我正在使用 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 函数仍然超时。
您的 Lambda 函数在连接到 DynamoDB(或任何互联网终端节点)时超时的最明显原因是您将 Lambda 函数配置为附加到 VPC。
除非您需要访问 VPC 中的其他资源(例如 RDS 数据库),否则无需将 Lambda 函数附加到您的 VPC,因此需要重新配置并重新部署 Lambda 函数。然后,Lambda 函数将使用 Lambda 服务提供的默认互联网路由。
如果您需要访问 VPC 中的其他资源,请将 DynamoDB VPC 终端节点添加到您的 VPC。