TransactGetItems
TransactGetItems リクエストオブジェクトを使用すると、AWS の AppSync DynamoDB リゾルバーから DynamoDB への TransactGetItems リクエストで、複数のテーブルから複数の項目を取得するように指定できます。このリクエストオブジェクトでは、以下の情報を指定する必要があります。
-
項目の取得元となる各リクエスト項目のテーブル名
-
各テーブルから取得する各リクエスト項目のキー
DynamoDB の TransactGetItems 制限が適用されるため、条件式を指定することはできません。
TransactGetItems リクエストオブジェクトのノードの構造は次のとおりです。
type DynamoDBTransactGetItemsRequest = { operation: 'TransactGetItems'; transactItems: { table: string; key: { [key: string]: any }; projection?: { expression: string; expressionNames?: { [key: string]: string }; }[]; }; };
各フィールドの定義は以下のようになります。
TransactGetItems フィールド
-
operation -
実行する DynamoDB の処理。
TransactGetItemsDynamoDB の処理を実行するには、これをTransactGetItemsに設定する必要があります。この値は必須です。 -
transactItems -
含めるリクエスト項目。値はリクエスト項目の配列です。少なくとも 1 つのリクエスト項目を指定する必要があります。この
transactItemsの値は必須です。-
table -
項目の取得元となる DynamoDB テーブル。値はテーブル名の文字列です。この
tableの値は必須です。 -
key -
取り出す項目のプライマリキーを表す DynamoDB キー。DynamoDB の項目には、単一のハッシュキー、またはハッシュキーとソートキーが含まれています。これはテーブルの構造によって変わります。「型付き値」を指定する方法の詳細については、「型システム (リクエストマッピング)」を参照してください。
projection-
DynamoDB オペレーションから返される属性を指定するために使用されるプロジェクション。プロジェクションの詳細については、「プロジェクション」を参照してください。このフィールドはオプションです。
-
覚えておくべきポイント:
-
トランザクションが成功すると、
itemsブロック内で取得された項目の順序はリクエスト項目の順序と同じになります。 -
トランザクションは、オールオアナッシング方式で実行されます。いずれかのリクエスト項目でエラーが発生した場合、トランザクション全体は実行されず、エラーの詳細が返されます。
-
リクエスト項目を取得できなくても、エラーではありません。代わりに、null要素が対応する位置の項目ブロックに表示されます。
-
トランザクションのエラーが TransactionCanceledException である場合、
cancellationReasonsブロックに入力されます。cancellationReasonsブロック内のキャンセル理由の順序は、リクエスト項目の順序と同じになります。 -
TransactGetItemsのリクエスト項目数は 100 個に制限されています。
次の例の関数リクエストハンドラーの場合:
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { authorId, postId } = ctx.args; return { operation: 'TransactGetItems', transactItems: [ { table: 'posts', key: util.dynamodb.toMapValues({ postId }), }, { table: 'authors', key: util.dynamodb.toMapValues({ authorId }), }, ], }; }
トランザクションが成功し、最初にリクエストされた項目だけが取得された場合、ctx.result で使用できる呼び出し結果は次のようになります。
{ "items": [ { // Attributes of the first requested item "post_id": "p1", "post_title": "title", "post_description": "description" }, // Could not retrieve the second requested item null, ], "cancellationReasons": null }
最初のリクエスト項目によって発生した TransactionCanceledException が原因でトランザクションが失敗した場合、ctx.result で使用可能な呼び出し結果は次のようになります。
{ "items": null, "cancellationReasons": [ { "type":"Sample error type", "message":"Sample error message" }, { "type":"None", "message":"None" } ] }
ctx.error にエラーに関する詳細が含まれています。キー items と cancellationReasons は、ctx.result にあることが保証されています。