对于数量大于10的更新组,TransactWriteItems API失败.错误:成员的长度必须小于或等于10



问题TransactWriteItems API对于数量大于10的更新组抛出以下错误,尽管API预计最多工作25个。

根据AWS TransactWriteItems API文档:

TransactWriteItems是一个同步写入操作,最多可将25项行动请求。这些操作可以针对不同的项目表,但不在不同的AWS帐户或地区中,并且没有两个操作可以针对同一项目。例如,不能同时ConditionCheck并更新同一项。事务中的项目不能超过4 MB。

AWS SDK版本

"aws-sdk":"^2.624.0">

错误

message: 'Member must have length less than or equal to 10',
code: 'ValidationException',
time: 2020-02-24T05:07:02.795Z,
requestId: 'a3952ab2-593e-4164-ad2f-3a000e599cia',
statusCode: 400,
retryable: false,
retryDelay: 48.36097368479314 } 
'ValidationException*: Member must have length less than or equal to 10 at Request.extractError (node_modules/aws-sdk/lib/protocol/json.js:51:27)n    at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:106:20)n    at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)n    at Request.emit (node_modules/aws-sdk/lib/request.js:683:14)n    at Request.transition (node_modules/aws-sdk/lib/request.js:22:10)n    at AcceptorStateMachine.runTo (node_modules/aws-sdk/lib/state_machine.js:14:12)n    at node_modules/aws-sdk/lib/state_machine.js:26:10n    at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:38:9)n    at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:685:12)n    at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:116:18)'

代码:

var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({
'region': 'eu-west-1'
});
// Throws the error if the TransactItems array is > 10
var params = {
TransactItems: [{
Update: {
Key: { "id": { "S": "ABC-XYABV2-2019" }},
ExpressionAttributeNames: { "#s": "s" },
ExpressionAttributeValues: { ":s": { "S": "OHIO" } },
UpdateExpression: "SET #s = :s",
TableName: "test-order-dev"
}
}, 
...
....
.....
{
Update: {
Key: { "id": { "S": "CDE-ZUABV2-2020" }},
ExpressionAttributeNames: { "#s": "s" },
ExpressionAttributeValues: { ":s": { "S": "OHIO" } },
UpdateExpression: "SET #s = :s",
TableName: "test-order-dev"
}
}
]
};
dynamodb.transactWriteItems(params, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});

我刚刚发现了一个AWS论坛链接,该链接描述了相同的问题,并提示使用最新的SDK版本。我是最新的SDK版本,想知道可能是什么问题。分享你的想法或解决方案(如果存在(:-(

我昨天在使用事务更新10多行时遇到了这个问题。我发现我使用docker pull amazon/dynamodb-local安装的本地发电机数据库有问题。在使用在线数据库时,它可以很好地处理最多25个事务。希望这能有所帮助。

最新更新