翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
TransactWriteItems
リクエストマッピングドキュメントでは、 AWS AppSync DynamoDB リゾルバーに、複数のテーブルに複数の項目を書き込むように DynamoDB にTransactWriteItems
リクエストするように指示できます。このリクエストテンプレートでは、以下の情報を指定する必要があります。
-
各リクエスト項目の書き込み先テーブル名
-
実行する各リクエスト項目のオペレーション。サポートされているオペレーションには、PutItem、UpdateItem、DeleteItem、および ConditionCheck の 4 種類があります。
-
書き込む各リクエスト項目のキー
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
-
含めるリクエスト項目。値はリクエスト項目の配列です。少なくとも 1 つのリクエスト項目を指定する必要があります。この
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 内に既に存在するオブジェクトの状態に基づき、リクエストが成功するかどうかを判断する条件です。条件チェックに失敗した場合に、既存の項目を取得し直すかどうかを指定できます。トランザクション条件の詳細については、「トランザクション条件式」を参照してください。この値は必須です。
-
-
覚えておくべきポイント:
-
リクエスト項目のキーのみがレスポンスに返されます (正常に挿入された場合)。キーの順序は、リクエスト項目の順序と同じです。
-
トランザクションは、オールオアナッシング方式で実行されます。いずれかのリクエスト項目でエラーが発生した場合、トランザクション全体は実行されず、エラーの詳細が返されます。
-
同じ項目をターゲットにできるリクエスト項目が 2 つありません。それ以外の場合は、TransactionCanceledException エラーが発生します。
-
トランザクションのエラーが TransactionCanceledException である場合、
cancellationReasons
ブロックに入力されます。リクエスト項目の条件チェックが失敗し、かつreturnValuesOnConditionCheckFailure
をfalse
に指定しなかった場合、テーブルに存在する項目が取得され、item
でcancellationReasons
ブロックの対応する位置に保存されます。 -
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
リクエストの条件チェックに失敗したためにトランザクションが失敗した場合、 で使用できる呼び出し結果は次のようになります。
{
"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
にエラーに関する詳細が含まれています。keys および cancellationReasons が $ctx.result
に存在することが保証されています。
より完全な例については、AppSync を使用した DynamoDB トランザクションのチュートリアル「チュートリアル: DynamoDB Transaction リゾルバー」を参照してください。