当前位置: 首页 > 知识库问答 >
问题:

Dynamodb批处理在Lambda中不起作用

宗翔宇
2023-03-14

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

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

然后,无法插入数据。我试着用put,效果很好。我用的是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);
    }
  });
};

共有2个答案

郎和志
2023-03-14

这是使用batchWrit不起作用时的权限

{
    "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"
        }
    ]
}```
云焱
2023-03-14

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

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

这是全拉姆达

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);
    }
  });
};
 类似资料:
  • 我有一张如下的桌子 数据将从AWS Lambda函数一致地插入到此表中。(可能是数百万个项目) 我有一个用例,当表中有100个可用项时,我需要有一个触发器来执行一些批处理。换句话说,一旦我们在这个表中创建了100个新项目,我希望有一个Lambda触发器函数来对100个项目执行批处理。 当我研究时,DynamoDB流似乎可以支持批处理,但根据文档我不太清楚。 Lambda分批读取记录,并调用函数处理

  • 我正在使用lambda、API网关和Dynamodb 我正在创建一个batchWrite函数,在一个函数中上载25个以上的项目 但我发现,当我上传35个项目时,前25个项目成功上传到dynamodb,但最后10个项目失败,但没有记录任何错误 该函数在node.js中编写 日志如下所示。

  • 我很难让Hibernate在MySQL上执行大容量插入。 我有要排序的主键生成类型,下面是我的dao.xml 这使得每次都可以执行单个查询。我也相应地刷新和清除实体管理器。 技术堆栈:Spring 4,Hibernate 5.2。 编辑1:我也浏览了下面的链接,但没有运气 https://vladmihalcea.com/how-to-batch-insert-and-update-stateme

  • 我得到以下查询:hibernate:select CHARGE.nextval from dual hibernate:insert into CHARGE(ACCOUNTNUMBER CHARGE_ID)值(?,?)Hibernate:插入到CHARGE(ACCOUNTNUMBER CHARGE_ID)值(?,?)Hibernate:插入到CHARGE(ACCOUNTNUMBER CHARGE_

  • BatchWrit在Laqmbda中不适用于异步。代码将插入一条记录,但它不能。但是,当我删除异步时,它可以工作。 结果如下。没有错误。 你们有同样的行为吗?

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。