Dynamodb batchWrite 在 Lambda 中不起作用
Dynamodb batchWrite doesn't work in Lambda
我尝试使用 batchWrite 向 Dynamodb 中插入一个数据,但它无法插入数据。它只显示此消息(但没有错误消息)。
Ensuring latest function changes are built...
Starting execution...
{"key1":"value1","key2":"value2","key3":"value3"}
Result:
null
Finished execution.
然后,无法插入数据。
我尝试使用 put
,但效果很好。
我正在使用拉姆达。这是代码。
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);
}
});
};
代码只有一个问题。 table在参数中用作键的名称不会被替换为实际的 table 名称,我们可以通过将变量名包裹在 [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);
}
});
};
这是使用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"
}
]
}```
我尝试使用 batchWrite 向 Dynamodb 中插入一个数据,但它无法插入数据。它只显示此消息(但没有错误消息)。
Ensuring latest function changes are built...
Starting execution...
{"key1":"value1","key2":"value2","key3":"value3"}
Result:
null
Finished execution.
然后,无法插入数据。
我尝试使用 put
,但效果很好。
我正在使用拉姆达。这是代码。
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);
}
});
};
代码只有一个问题。 table在参数中用作键的名称不会被替换为实际的 table 名称,我们可以通过将变量名包裹在 [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);
}
});
};
这是使用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"
}
]
}```