TransactWriteItems - AWS AppSync

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

TransactWriteItems

TransactWriteItems リクエストオブジェクトを使用すると、 AWS AppSync DynamoDB 関数に DynamoDB に複数の項目を書き込むようにTransactWriteItemsリクエストするように指示できます。場合によっては複数のテーブルに書き込むことができます。このリクエストオブジェクトでは、以下の情報を指定する必要があります。

  • 各リクエスト項目の書き込み先テーブル名

  • 実行する各リクエスト項目のオペレーション。サポートされているオペレーションには、PutItem、、DeleteItem、および UpdateItemの 4 種類があります。 ConditionCheck

  • 書き込む各リクエスト項目のキー

DynamoDB の TransactWriteItems 制限が適用されます。

TransactWriteItems リクエストオブジェクトのノードの構造は次のとおりです。

type DynamoDBTransactWriteItemsRequest = { operation: 'TransactWriteItems'; transactItems: TransactItem[]; }; type TransactItem = | TransactWritePutItem | TransactWriteUpdateItem | TransactWriteDeleteItem | TransactWriteConditionCheckItem; type TransactWritePutItem = { table: string; operation: 'PutItem'; key: { [key: string]: any }; attributeValues: { [key: string]: string}; condition?: TransactConditionCheckExpression; }; type TransactWriteUpdateItem = { table: string; operation: 'UpdateItem'; key: { [key: string]: any }; update: DynamoDBExpression; condition?: TransactConditionCheckExpression; }; type TransactWriteDeleteItem = { table: string; operation: 'DeleteItem'; key: { [key: string]: any }; condition?: TransactConditionCheckExpression; }; type TransactWriteConditionCheckItem = { table: string; operation: 'ConditionCheck'; key: { [key: string]: any }; condition?: TransactConditionCheckExpression; }; type TransactConditionCheckExpression = { expression: string; expressionNames?: { [key: string]: string}; expressionValues?: { [key: string]: any}; returnValuesOnConditionCheckFailure: boolean; };

TransactWriteItems フィールド

各フィールドの定義は以下のようになります。
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 内に既に存在するオブジェクトの状態に基づき、リクエストが成功するかどうかを判断する条件です。条件チェックに失敗した場合に、既存の項目を取得し直すかどうかを指定できます。トランザクション条件の詳細については、「トランザクション条件式」を参照してください。この値は必須です。

覚えておくべきポイント:

  • リクエスト項目のキーのみがレスポンスに返されます (正常に挿入された場合)。キーの順序は、リクエスト項目の順序と同じです。

  • トランザクションはある all-or-nothing方法で実行されます。いずれかのリクエスト項目でエラーが発生した場合、トランザクション全体は実行されず、エラーの詳細が返されます。

  • 同じ項目をターゲットにできるリクエスト項目が 2 つありません。そうしないとエラーが発生しますTransactionCanceledException

  • トランザクションのエラーが の場合TransactionCanceledExceptioncancellationReasonsブロックが入力されます。リクエスト項目の条件チェックが失敗し、かつ returnValuesOnConditionCheckFailurefalse に指定しなかった場合、テーブルに存在する項目が取得され、itemcancellationReasons ブロックの対応する位置に保存されます。

  • TransactWriteItems は 100 個のリクエスト項目に制限されています。

  • このオペレーション、競合検出で使用するとサポートされていません。両方を同時に使用すると、エラーが発生する可能性があります。

次の例の関数リクエストハンドラーの場合:

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { authorId, postId, title, description, oldTitle, authorName } = ctx.args; return { operation: 'TransactWriteItems', transactItems: [ { table: 'posts', operation: 'PutItem', key: util.dynamodb.toMapValues({ postId }), attributeValues: util.dynamodb.toMapValues({ title, description }), condition: util.transform.toDynamoDBConditionExpression({ title: { eq: oldTitle }, }), }, { table: 'authors', operation: 'UpdateItem', key: util.dynamodb.toMapValues({ authorId }), update: { expression: 'SET authorName = :name', expressionValues: util.dynamodb.toMapValues({ ':name': authorName }), }, }, ], }; }

トランザクションが成功した場合、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 にエラーに関する詳細が含まれています。キーキーcancellationReasonsは、 に存在することが保証されますctx.result