【问题标题】:Lambda function timed out when trying to write data to DynamoDB尝试将数据写入 DynamoDB 时 Lambda 函数超时
【发布时间】:2020-03-19 02:18:59
【问题描述】:

我正在尝试编写一个 lambda 函数来将一个新用户插入到我的 DynamoDB 表中 Users

表有UserId作为索引

¿为什么这段代码不起作用?

'use strict'
const AWS = require('aws-sdk');
const uuid = require('uuid')
const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-2'});

exports.handler = function(event, context, callback) {
    
    const params = {
        User: {
            "UserId":uuid.v1(),
            "username":event.username
        },
        TableName: process.env.TABLE_NAME
    }
    docClient.put(params, function(err,data){
        callback(err, data)
    })
  
};

我的 lambda 测试很简单:

{
  "username": "Javierito"
}

此测试失败返回:

任务在 3.00 秒后超时

  • 我尝试在测试中手动插入 UserId
  • lambda 函数已经拥有 AmazonDynamoDBFullAccess 权限
  • 我已成功将表名放入lambda函数的环境变量中
  • 我还检查了 db 的区域是否正确

【问题讨论】:

  • Lambda 函数是否在 VPC 内运行?
  • @MarkB 否,没有 VPC
  • 您好,刚刚尝试使用另一个代码解决了它。如果有人知道为什么上面的代码不起作用,我仍然会很感激。我也不得不删除 uuiv
  • 你的商品属性不应该命名为params.Item而不是params.User吗?

标签: node.js amazon-web-services aws-lambda amazon-dynamodb


【解决方案1】:

这里的主要问题是无法加载uuid 模块。它在默认的 Lambda 运行时环境中不可用。加载此模块失败需要 3 秒以上,因此您的 Lambda 函数超时(因为您使用的是 3 秒默认值)。您可以在部署上传中包含其他模块,例如 uuid,或使用 Lambda 层。

如果您将 Lambda 超时时间增加到 30 秒,您将看到它失败:

"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module 'uuid'"

另外,不相关的是,您的 params 对象不正确。其中的属性应命名为Item,而不是User

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多