"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"
    }
  }
}

我是不是漏掉了什么?

亚马逊并没有默默地接受没有添加该商品的事实。它会抛出一个异常,如果您想对此做些什么,您可以捕获该异常。也许你想:

  1. 捕获异常
  2. 确保它的错误代码与那个匹配
  3. 如果有请忽略。

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