【问题标题】:Dynamodb batchWrite doesn't work in LambdaDynamodb batchWrite 在 Lambda 中不起作用
【发布时间】:2021-04-03 22:05:20
【问题描述】:

我尝试使用 batchWrite 将一个数据插入 Dynamodb,但它无法插入数据。它只显示此消息(但没有错误消息)。

Ensuring latest function changes are built...
Starting execution...
{"key1":"value1","key2":"value2","key3":"value3"}
Result:
null
Finished execution.

然后,无法插入数据。 我尝试使用put tho,效果很好。 我正在使用 Lambda。这是代码。

const dynamodb = new AWS.DynamoDB.DocumentClient();
let tableName = "BlrSession-56pfbzohnvdqpac6asb627z2wu-dev";

// const AWS = require("aws-sdk/global");

exports.handler = (event, context, callback) => {
  // The event parameter is the input to your lambda function
  console.log(JSON.stringify(event));
  let games = [];
  let documentClient = new AWS.DynamoDB.DocumentClient();

  // lambda.forEach((item) => {
  games.push({
    PutRequest: {
      Item: {
        id: Math.random().toString(36).substring(2) + Date.now().toString(36),
      },
    },
  });
  // });

  let params = {
    RequestItems: {
      tableName: games,
    },
  };

  documentClient.batchWrite(params, function (err, data) {
    if (err) {
      callback(err);
    } else {
      callback(null, data);
    }
  });
};

【问题讨论】:

  • 你如何确认it cannot insert data.
  • 我通过查看 Dynamodb 表确认了这一点。

标签: node.js aws-lambda amazon-dynamodb aws-amplify


【解决方案1】:

代码只有一个问题。在 params 中用作 Key 的 tableName 不会被实际的表名替换,我们可以通过将变量名包装在 [tableName] 周围来使用变量名作为键

  let params = {
    RequestItems: {
      [tableName]: games,
    },
  };

这是完整的 lambda

const AWS = require("aws-sdk");
AWS.config.update({ region: "us-east-1" });
const dynamodb = new AWS.DynamoDB.DocumentClient();
let documentClient = new AWS.DynamoDB.DocumentClient();
let tableName = "test";

exports.handler = (event, context, callback) => {
  let games = [];
  games.push({
    PutRequest: {
      Item: {
        id: Math.random().toString(36).substring(2) + Date.now().toString(36),
      },
    },
  });

  let params = {
    RequestItems: {
      [tableName]: games,
    },
  };
  console.log('params',params);
  documentClient.batchWrite(params, function (err, data) {
    if (err) {
      console.log('err', err);
      callback(err);
    } else {
      console.log('data', data);
      callback(null, data);
    }
  });
};

【讨论】:

  • 谢谢,巴鲁。我试过了,但结果是一样的。嗯
  • 我测试了你的代码,除了这个,其他都很好。可能缺少某些权限?
  • 我在上面发布了许可。好像有什么问题?
  • @uekyo 政策看起来不错。我粘贴了我测试过的完整 lambda 代码。
  • 天啊,我做到了!谢谢,兄弟!
【解决方案2】:

这是不能使用batchWrite时的权限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "dynamodb:Put*",
                "dynamodb:Create*",
                "dynamodb:BatchWriteItem",
                "dynamodb:Get*",
                "dynamodb:BatchGetItem",
                "dynamodb:List*",
                "dynamodb:Describe*",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:Update*",
                "dynamodb:RestoreTable*",
                "dynamodb:Delete*"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:613917858805:table/BlrSession-56pfbzohnvdqpac6asb627z2wu-dev",
                "arn:aws:dynamodb:us-west-2:613917858805:table/BlrSession-56pfbzohnvdqpac6asb627z2wu-dev/index/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "dynamodb:Put*",
                "dynamodb:Create*",
                "dynamodb:BatchWriteItem",
                "dynamodb:Get*",
                "dynamodb:BatchGetItem",
                "dynamodb:List*",
                "dynamodb:Describe*",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:Update*",
                "dynamodb:RestoreTable*",
                "dynamodb:Delete*"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:613917858805:table/BlrMeetup-56pfbzohnvdqpac6asb627z2wu-dev",
                "arn:aws:dynamodb:us-west-2:613917858805:table/BlrMeetup-56pfbzohnvdqpac6asb627z2wu-dev/index/*"
            ],
            "Effect": "Allow"
        }
    ]
}```

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2020-09-22
    • 2017-08-12
    • 2020-07-12
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多