uekyo
uekyo

Reputation: 431

Dynamodb batchWrite doesn't work in Lambda

I tried to insert one data into Dynamodb using batchWrite though, it couldn't insert data. It just shows this message (but no error message).

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

Then, cannot insert data. I tried to use put tho, it worked well. I'm using Lambda. This is the code.

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);
    }
  });
};

Upvotes: 3

Views: 1991

Answers (2)

Balu Vyamajala
Balu Vyamajala

Reputation: 10373

There is just one issue with code. tableName used as Key in params is not being replaced with actual table name, we can use variable name as key by wrapping it around [tableName]

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

This is full 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);
    }
  });
};

Upvotes: 2

uekyo
uekyo

Reputation: 431

This is the permission when it doesn't work to use 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"
        }
    ]
}```

Upvotes: 0

Related Questions