我正在使用 Amazonica(一个 Clojure 库)来写入 DynamoDB。
以下代码将一个项目插入 DynamoDB 中,并在第二次调用时更新其内容,这是预期的。
(ddb/put-item cred
:table-name table-name
:item payload)
现在,以下内容仅在第一次插入项目。第二次调用它不会执行任何操作,这正是我所需要的。
(ddb/put-item cred
:table-name table-name
:condition-expression "attribute_not_exists(clientId)"
:item payload)
但是最新版本我收到错误:
The conditional request failed (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ConditionalCheckFailedException;
...这并不能真正使代码可交付。我的 CloudFormation 模板非常简单:
"Resources": {
"ClientTable": {
"Type": "AWS::DynamoDB::Table",
"Properties": {
"AttributeDefinitions": [
{ "AttributeName": "clientId", "AttributeType": "S" }
],
"KeySchema": [
{ "AttributeName": "clientId", "KeyType": "HASH" }
],
"ProvisionedThroughput": {
"ReadCapacityUnits": { "Ref": "ReadCapacityUnits" },
"WriteCapacityUnits": { "Ref": "WriteCapacityUnits" }
},
"TableName": "ClientTable"
}
}
}
我错过了什么吗?
最佳答案
Amazonica 并没有默默地接受该项目未添加的事实。它会抛出一个异常,您可以捕获该异常,以防万一您想对此采取措施。也许您想要:
- 捕获异常
- 确保错误代码与该错误代码匹配
- 如果有,请忽略它。
要测试这一点,请确保相同的调用确实适用于新 key 。
关于amazon-web-services - "The conditional request failed"而条件有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35096312/