"The conditional request failed" 而条件有效
"The conditional request failed" whereas the condition works
我正在使用 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,一个 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"
}
}
}
我是不是漏掉了什么?
亚马逊并没有默默地接受没有添加该商品的事实。它会抛出一个异常,如果您想对此做些什么,您可以捕获该异常。也许你想:
- 捕获异常
- 确保它的错误代码与那个匹配
- 如果有请忽略。
要对此进行测试,请确保同一调用确实适用于新密钥。