在 Node.js 中使用 AWS SDK v3 与 DynamoDB 交互时如何修复 Lambda 函数超时?

问题描述 投票:0回答:1

我正在使用 AWS Lambda 通过 Node.js 构建无服务器 API,并且我的函数与 DynamoDB 交互以检索数据。但是,每次我尝试与 DynamoDB 交互时,Lambda 函数都会在请求完成之前超时。

我已使用必要的权限正确配置了 Lambda 函数的执行角色,并确保 AWS SDK v3 (

@aws-sdk/client-dynamodb
) 已正确安装和初始化。尽管如此,Lambda 函数还是超时,无法成功查询 DynamoDB。

这是我到目前为止所做的:

  • 将 Lambda 函数超时配置为 30 秒,但仍然超时。

  • 我验证了 Lambda 角色的权限,其中包括对 DynamoDB 的访问权限。

  • 我使用

    async/await
    来处理异步请求。

我希望 Lambda 函数成功完成并从 DynamoDB 返回数据而不会出现任何超时。

  • 我尝试将 Lambda 函数的超时时间增加到 30 秒。

  • 我尝试调整DynamoDB表的读/写容量,但没有解决问题。

  • 我希望 Lambda 函数能够运行而不会超时,并成功从 DynamoDB 检索数据。

Task timed out after 30.01 seconds

const { DynamoDBClient, GetItemCommand } = require("@aws-sdk/client-dynamodb");

const client = new DynamoDBClient({ region: "us-east-1" });

const params = {
  TableName: "MyTable",
  Key: { "id": { S: "123" } }
};

exports.handler = async (event) => {
  try {
    const data = await client.send(new GetItemCommand(params));
    return {
      statusCode: 200,
      body: JSON.stringify(data),
    };
  } catch (err) {
    console.error("Error", err);
    return {
      statusCode: 500,
      body: JSON.stringify({ error: "Could not retrieve data" }),
    };
  }
};

我已验证 DynamoDB 表存在并包含所提供的数据

id
,但 Lambda 函数仍然超时。

javascript node.js aws-lambda serverless api-gateway
1个回答
0
投票

您的 Lambda 函数在连接到 DynamoDB(或任何互联网终端节点)时超时的最明显原因是您将 Lambda 函数配置为附加到 VPC

除非您需要访问 VPC 中的其他资源(例如 RDS 数据库),否则无需将 Lambda 函数附加到您的 VPC,因此需要重新配置并重新部署 Lambda 函数。然后,Lambda 函数将使用 Lambda 服务提供的默认互联网路由。

如果您需要访问 VPC 中的其他资源,请将 DynamoDB VPC 终端节点添加到您的 VPC。

© www.soinside.com 2019 - 2024. All rights reserved.