【问题标题】:"The conditional request failed" whereas the condition works“条件请求失败”而条件有效
【发布时间】:2016-05-07 21:13:19
【问题描述】:

我正在使用 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)

但是最近我收到一个错误:

条件请求失败(服务: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"
    }
  }
}

我错过了什么吗?

【问题讨论】:

    标签: amazon-web-services clojure amazon-dynamodb amazon-cloudformation amazonica


    【解决方案1】:

    Amazonica 并没有默默地接受没有添加该项目的事实。它抛出了一个异常,如果你想对它做点什么,你可以捕获它。也许你想:

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

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

    【讨论】:

    • 喜欢分享 .. 我在 AWS Web 控制台中遇到了同样的问题。原因是为我的搜索条件找到了多个项目,并且我更新了其中一个项目。在更改查询以返回我想要的唯一行后,我对该项目/行的更新成功
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多