"条件请求失败",而条件有效

Sté*_*ert 8 clojure amazon-web-services aws-cloudformation amazon-dynamodb amazonica

我正在使用Amazonica,一个Clojure库来写入DynamoDB.

以下内容将项目插入DynamoDB并在第二次调用时更新其内容,这是预期的.

(ddb/put-item cred
   :table-name table-name
   :item payload)
Run Code Online (Sandbox Code Playgroud)

现在,以下仅在第一次插入项目.再次调用它不会做任何事情,这就是我需要的.

(ddb/put-item cred
   :table-name table-name
   :condition-expression "attribute_not_exists(clientId)"
   :item payload)
Run Code Online (Sandbox Code Playgroud)

然而,最新的我收到一个错误:

条件请求失败(服务:AmazonDynamoDBv2;状态代码:400;错误代码: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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Art*_*ldt 8

Amazonica并没有默默地吞下这个物品没有添加的事实.它会抛出一个异常,你可以抓住它,以防你想对它做些什么.也许你想:

  1. 抓住例外
  2. 确保它的错误代码与那个匹配
  3. 忽略它,如果它.

要对此进行测试,请确保相同的调用确实适用于新密钥.