导入或要求不适用于 aws lamda

Saj*_*ain 4 javascript mongodb amazon-web-services node.js aws-lambda

我正在 aws 上编写 lambda 函数。我想在用户注册到我的 mongodb 数据库后发送用户数据。我使用“预验证”方法触发了 lambda 函数。但是,“我收到此错误”预身份验证失败,错误为找不到从 /var/task/index.mjs 导入的包“aws-sdk”。”

我的 lambda 函数代码:

import AWS  from 'aws-sdk'
import {MongoClient} from 'mongodb'

exports.handler = async (event) => {
 try{
     // Retrieve the user data from the event object
  const userData = event.request.userAttributes;

  // Connect to the MongoDB database
  const client = await MongoClient.connect("database url", {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  });
  const db = client.db("Cluster0");
  const collection = db.collection("users");

  // Insert the user data into the collection
  await collection.insertOne(userData);

  // Close the database connection
  client.close();
 }catch(error){
    callback(error, event)
 }
};
Run Code Online (Sandbox Code Playgroud)

我的问题是我是否必须在 lambda 函数文件夹上安装 mongodb 和 aws sdk?我正在从 aws 网站编写 lambda 函数。

lee*_*gan 5

找不到从 /var/task/index.mjs 导入的包“aws-sdk”

此错误通常是由于在使用 SDK V3 的 Lambda 运行时时使用 SDK V2 导入语句导致的。

我猜您正在 Lambda 上使用新的节点运行时 18。该运行时使用 Node SDK V3,它支持模块化导入,如下所示:

const { S3Client } = require("@aws-sdk/client-s3");

您可以更改为较低的运行时间或更改代码以适应 Node V3 SDK 导入:

https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/#modularized-packages

我也不相信 Lambda 运行时内置了 MongoDB 客户端,这意味着您需要在本地创建包或使用Lambda Layer

https://www.mongodb.com/developer/products/atlas/serverless-development-lambda-atlas/

如果您不受 MongoDB 的束缚,您可以使用 DynamoDB,它具有用于 Lambda 运行时的内置客户端。