簡體   English   中英

帶有dynamodb解析器的AWS AppSync條件更新

[英]AWS AppSync conditional update with dynamodb resolver

嘗試使用Appsync dynamodb解析器有條件地更新dynamodb中的項目。 在通過“應用同步查詢”面板測試條件更新時,即使提供了錯誤的用戶名,操作也會繼續進行,並使用price和ModifyDate的新值更新數據庫。 這是解析器的代碼:

{
    "version" : "2017-02-28",
    "operation" : "UpdateItem",
    "key" : {
        "id": $util.dynamodb.toDynamoDBJson($ctx.args.input.id)
    },
    "update" : {
        "expression" : "SET price = :price, modificationDate = :newDate",
        "expressionValues": {
            ":price" : { "N": $context.arguments.input.price },
            ":newDate": $util.dynamodb.toDynamoDBJson($util.time.nowISO8601())
        }
    },
    "condition" : {
        "expression"       : "username = :expectedOwner",
        "expressionValues" : {
            ":expectedOwner" : { "S" : "${context.identity.username}" }
        }
    }
}

條件表達式中是否有任何錯誤?

在我的頭頂,您的映射模板看起來正確。 需要檢查的幾件事:

->更改"id": $util.dynamodb.toDynamoDBJson($ctx.args.input.id) ->更改"id": $util.dynamodb.toDynamoDBJson($ctx.args.input.id) "id": $util.dynamodb.toStringJson($ctx.args.input.id)

->下面是使用Cognito用戶池身份驗證與條件檢查一起使用的映射模板的示例。 對於Cognito身份/ AWS IAM,也應該相同。

 {
     "version" : "2017-02-28",
     "operation" : "UpdateItem",
     "key" : {
        "id": $util.dynamodb.toStringJson($ctx.args.id)
      },
      "update" : {
          "expression" : "SET title = :title, modificationDate = :newDate, content = :content",
          "expressionValues": {
             ":title" : $util.dynamodb.toStringJson($ctx.args.title),
             ":newDate": $util.dynamodb.toStringJson($util.time.nowISO8601()),
             ":content": $util.dynamodb.toStringJson($ctx.args.content)
          }
      },
      "condition" : {
         "expression"       : "#sub = :expectedOwner",
         "expressionNames"  : { "#sub": "sub" },
         "expressionValues" : {
            ":expectedOwner" : { "S" : "${context.identity.sub}" }
         }
      }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM