TransactWriteItems - AWS AppSync

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

TransactWriteItems

TransactWriteItems 請求映射文件可讓您告訴 AWS AppSync DynamoDB 解析器向 DynamoDB 提出寫入多個項目的TransactWriteItems請求,可能寫入多個資料表。使用此要求範本時,您必須指定下列項目:

  • 每個請求項目的目標資料表名稱

  • 每個請求項目要執行的操作。支援四種類型的操作:PutItemDeleteItemUpdateItemConditionCheck

  • 每個要寫入之請求項目的索引鍵

套用 DynamoDB TransactWriteItems 限制。

TransactWriteItems 映射文件結構如下:

{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "table1", "operation": "PutItem", "key": { "foo": ... typed value, "bar": ... typed value }, "attributeValues": { "baz": ... typed value }, "condition": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table":"table2", "operation": "UpdateItem", "key": { "foo": ... typed value, "bar": ... typed value }, "update": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value } }, "condition": { "expression": "someExpression", "expressionNames": { "#foo":"foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table3", "operation": "DeleteItem", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table4", "operation": "ConditionCheck", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } } ] }

TransactWriteItems 欄位

欄位定義如下:
version

範本定義的版本。僅支援 2018-05-29。此值為必填。

operation

要執行的 DynamoDB 操作。若要執行 TransactWriteItems DynamoDB 操作,這必須設為 TransactWriteItems。此值為必填。

transactItems

要包含的請求項目。此值是請求項目的陣列。必須提供至少一個請求項目。transactItems 值為必填。

對於 PutItem,欄位定義如下:

table

目的地 DynamoDB 資料表。此值是資料表名稱的字串。table 值為必填。

operation

要執行的 DynamoDB 操作。若要執行 PutItem DynamoDB 操作,這必須設為 PutItem。此值為必填。

key

DynamoDB 金鑰代表要放置的項目主金鑰。DynamoDB 項目可能具有單一雜湊金鑰,或雜湊金鑰和排序金鑰,具體取決於資料表結構。如需如何指定「輸入值」的詳細資訊,請參閱類型系統 (請求映射)。此值為必填。

attributeValues

將放入 DynamoDB 的項目其餘屬性。如需如何指定「輸入值」的詳細資訊,請參閱類型系統 (請求映射)。此欄位為選用欄位。

condition

決定要求是否成功的條件,可根據已存在於 DynamoDB 的物件狀態。如果沒有指定條件,PutItem 要求會覆寫該項目的任何現有資料項目。您可以指定在條件檢查失敗時是否擷取現有項目。如需交易條件的詳細資訊,請參閱交易條件表達式 。此值是選用的。

對於 UpdateItem,欄位定義如下:

table

要更新的 DynamoDB 資料表。此值是資料表名稱的字串。table 值為必填。

operation

要執行的 DynamoDB 操作。若要執行 UpdateItem DynamoDB 操作,這必須設為 UpdateItem。此值為必填。

key

DynamoDB 金鑰代表要更新之項目的主要金鑰。DynamoDB 項目可能具有單一雜湊金鑰,或雜湊金鑰和排序金鑰,具體取決於資料表結構。如需如何指定「輸入值」的詳細資訊,請參閱類型系統 (請求映射)。此值為必填。

update

update 本節可讓您指定更新表達式,描述如何在 DynamoDB 中更新項目。如需如何寫入更新表達式的詳細資訊,請參閱 DynamoDB UpdateExpressions 文件 。此區段是必須的。

condition

決定要求是否成功的條件,可根據已存在於 DynamoDB 的物件狀態。如果沒有指定條件,UpdateItem 要求會更新現有的資料項目,無論項目的目前狀態為何。您可以指定在條件檢查失敗時是否擷取現有項目。如需交易條件的詳細資訊,請參閱交易條件表達式 。此值是選用的。

對於 DeleteItem,欄位定義如下:

table

要在其中刪除項目的 DynamoDB 資料表。此值是資料表名稱的字串。table 值為必填。

operation

要執行的 DynamoDB 操作。若要執行 DeleteItem DynamoDB 操作,這必須設為 DeleteItem。此值為必填。

key

DynamoDB 金鑰代表要刪除項目的主要金鑰。DynamoDB 項目可能具有單一雜湊金鑰,或雜湊金鑰和排序金鑰,具體取決於資料表結構。如需如何指定「輸入值」的詳細資訊,請參閱類型系統 (請求映射)。此值為必填。

condition

決定要求是否成功的條件,可根據已存在於 DynamoDB 的物件狀態。如果沒有指定條件,DeleteItem 要求會刪除項目,無論該項目的目前狀態為何。您可以指定在條件檢查失敗時是否擷取現有項目。如需交易條件的詳細資訊,請參閱交易條件表達式 。此值是選用的。

對於 ConditionCheck,欄位定義如下:

table

要檢查條件的 DynamoDB 資料表。此值是資料表名稱的字串。table 值為必填。

operation

要執行的 DynamoDB 操作。若要執行 ConditionCheck DynamoDB 操作,這必須設為 ConditionCheck。此值為必填。

key

DynamoDB 金鑰代表要進行條件檢查的項目主金鑰。DynamoDB 項目可能具有單一雜湊金鑰,或雜湊金鑰和排序金鑰,具體取決於資料表結構。如需如何指定「輸入值」的詳細資訊,請參閱類型系統 (請求映射)。此值為必填。

condition

決定要求是否成功的條件,可根據已存在於 DynamoDB 的物件狀態。您可以指定在條件檢查失敗時是否擷取現有項目。如需交易條件的詳細資訊,請參閱交易條件表達式 。此值為必填。

注意事項:

  • 如果成功,只會在回應中傳回請求項目的索引鍵。索引鍵的順序將與請求項目的順序相同。

  • 交易會以某種 all-or-nothing方式執行。如果任何請求項目造成錯誤,將不執行整個交易,而且將傳回錯誤詳細資料。

  • 沒有兩個請求項目可以定位到相同項目。否則會導致TransactionCanceledException錯誤。

  • 如果交易的錯誤為 TransactionCanceledException,則會填入cancellationReasons區塊。如果請求項目的條件檢查失敗,而且您未將 returnValuesOnConditionCheckFailure 指定為 false,將擷取資料表中存在的項目,並存放在 cancellationReasons 區塊之對應位置的 item 中。

  • TransactWriteItems 限制為 100 個請求項目。

  • 與衝突偵測搭配使用時,不支援此操作。同時使用兩者可能會導致錯誤。

使用下列範例要求映射範本時:

{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "posts", "operation": "PutItem", "key": { "post_id": { "S": "p1" } }, "attributeValues": { "post_title": { "S": "New title" }, "post_description": { "S": "New description" } }, "condition": { "expression": "post_title = :post_title", "expressionValues": { ":post_title": { "S": "Expected old title" } } } }, { "table":"authors", "operation": "UpdateItem", "key": { "author_id": { "S": "a1" }, }, "update": { "expression": "SET author_name = :author_name", "expressionValues": { ":author_name": { "S": "New name" } } }, } ] }

如果交易成功,$ctx.result 中可用的叫用結果如下所示:

{ "keys": [ // Key of the PutItem request { "post_id": "p1", }, // Key of the UpdateItem request { "author_id": "a1" } ], "cancellationReasons": null }

如果交易因PutItem請求的條件檢查失敗而失敗,則 中可用的調用結果$ctx.result如下所示:

{ "keys": null, "cancellationReasons": [ { "item": { "post_id": "p1", "post_title": "Actual old title", "post_description": "Old description" }, "type": "ConditionCheckFailed", "message": "The condition check failed." }, { "type": "None", "message": "None" } ] }

$ctx.error 包含錯誤的詳細資訊。金鑰金鑰cancellationReasons保證會出現在 中$ctx.result

如需更完整的範例,請依照 DynamoDB 交易教學課程搭配 AppSync 此處教學課程:DynamoDB 交易解析程式。