BatchPutItem
BatchPutItem
リクエストオブジェクトを使用すると、 AWS の AppSync DynamoDB の関数から DynamoDB への BatchWriteItem
リクエストで、複数のテーブルに複数の項目を挿入するように指定できます。このリクエストオブジェクトでは、以下の情報を指定する必要があります。
-
項目を挿入するテーブルの名前
-
各テーブルに挿入するすべての項目
DynamoDB の BatchWriteItem
制限が適用されるため、条件式を指定することはできません。
BatchPutItem
リクエストオブジェクトのノードの構造は次のとおりです。
type DynamoDBBatchPutItemRequest = { operation: 'BatchPutItem'; tables: { [tableName: string]: { [key: string]: any}[]; }; };
各フィールドの定義は以下のようになります。
BatchPutItem フィールド
-
operation
-
実行する DynamoDB の処理。
BatchPutItem
DynamoDB の処理を実行するには、これをBatchPutItem
に設定する必要があります。この値は必須です。 -
tables
-
項目を挿入する DynamoDB テーブル。各テーブルエントリは、この特定のテーブルに挿入する DynamoDB 項目のリストを表します。1 つ以上のテーブルを指定する必要があります。この値は必須です。
覚えておくべきポイント:
-
完全に挿入された項目がレスポンスに返されます (正常に挿入された場合)。
-
項目がテーブルに挿入されなかった場合は、そのテーブルの data ブロックに null 要素があります。
-
挿入された項目は、リクエストオブジェクト内で提供された順序に基づいて、テーブル別にソートされます。
-
Put
内の各BatchPutItem
コマンドはアトミックですが、バッチは部分的に処理される場合があります。エラーのためにバッチが部分的に処理された場合、未処理のキーは unprocessedKeys ブロック内に呼び出し結果の一部として返されます。 -
BatchPutItem
は 25 項目に制限されています。 -
このオペレーション、競合検出で使用するとサポートされていません。両方を同時に使用すると、エラーが発生する可能性があります。
次の例の関数リクエストハンドラーの場合:
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { authorId, postId, name, title } = ctx.args; return { operation: 'BatchPutItem', tables: { authors: [util.dynamodb.toMapValues({ authorId, name })], posts: [util.dynamodb.toMapValues({ authorId, postId, title })], }, }; }
ctx.result
で使用可能な呼び出し結果は以下のとおりです。
{ "data": { "authors": [ null ], "posts": [ // Was inserted { "authorId": "a1", "postId": "p2", "title": "title" } ] }, "unprocessedItems": { "authors": [ // This item was not processed due to an error { "authorId": "a1", "name": "a1_name" } ], "posts": [] } }
ctx.error
にエラーに関する詳細が含まれています。data キー、The keys data, unprocessedItems キー、およびリクエストオブジェクトで渡された各テーブルキーは呼び出し結果に必ずあります。挿入された項目は data ブロックにあります。処理されなかった項目は、data ブロック内で null としてマークされ、unprocessedItems ブロックに挿入されます。