翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS AppSync JavaScript Lambda のリゾルバー関数リファレンス
AWS AppSync 関数とリゾルバーを使用して、 アカウントにある Lambda 関数を呼び出すことができます。クライアントに返す前に、リクエストペイロードと Lambda 関数からのレスポンスを形作ることができます。実行する操作のタイプをリクエストオブジェクトで指定することもできます。このセクションでは、サポートされる Lambda 操作に対するリクエストについて説明します。
オブジェクトをリクエストする
Lambda リクエストオブジェクトは、Lambda 関数に関連するフィールドを処理します。
export type LambdaRequest = { operation: 'Invoke' | 'BatchInvoke'; invocationType?: 'RequestResponse' | 'Event'; payload: unknown; };
以下は、ペイロードデータが GraphQL スキーマのgetPost
フィールドであり、コンテキストの引数を含む invoke
オペレーションを使用する例です。
export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }
マッピングドキュメント全体が Lambda 関数への入力として渡されるため、前の例は次のようになります。
{ "operation": "Invoke", "payload": { "field": "getPost", "arguments": { "input": { "id": "postId1", } } } }
操作
Lambda データソースを使用すると、 operation
フィールドで Invoke
と の 2 つのオペレーションを定義できますBatchInvoke
。このInvoke
オペレーションでは、 がすべての GraphQL フィールドリゾルバーに対して Lambda 関数を呼び出すことを AWS AppSync に知らせます。 は、現在の GraphQL フィールドのバッチリクエスト AWS AppSync をBatchInvoke
指示します。operation
フィールドは必須です。
の場合Invoke
、解決されたリクエストは Lambda 関数の入力ペイロードと一致します。上記の例を変更してみましょう。
export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }
これは解決され、Lambda 関数に渡されます。この関数は次のようになります。
{ "operation": "Invoke", "payload": { "arguments": { "id": "postId1" } } }
の場合BatchInvoke
、リクエストはバッチ内のすべてのフィールドリゾルバーに適用されます。簡潔にするために、 はすべてのリクエストpayload
値を、リクエストオブジェクトに一致する単一のオブジェクトの下のリストに AWS AppSync マージします。以下のリクエストハンドラーの例ではマージを示しています。
export function request(ctx) { return { operation: 'Invoke', payload: ctx, }; }
このリクエストは評価され、次のマッピングドキュメントに解決されます。
{ "operation": "BatchInvoke", "payload": [ {...}, // context for batch item 1 {...}, // context for batch item 2 {...} // context for batch item 3 ] }
payload
リストの各要素は、単一のバッチ項目に対応します。Lambda 関数は、リクエストで送信された項目の順序に一致するリスト形式のレスポンスも返す予定です。
[ { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 1 { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 2 { "data": {...}, "errorMessage": null, "errorType": null } // result for batch item 3 ]
ペイロード
payload
フィールドは、Lambda 関数にデータを渡すために使用されるコンテナです。operation
フィールドが に設定されている場合BatchInvoke
、 は既存のpayload
値をリストに AWS AppSync ラップします。payload
フィールドはオプションです。
呼び出しタイプ
Lambda データソースでは、 RequestResponse
と の 2 つの呼び出しタイプを定義できますEvent
。呼び出しタイプは、Lambda APIで定義されている呼び出しタイプと同義です。RequestResponse
呼び出しタイプを使用すると、Lambda 関数を同期的に AWS AppSync 呼び出してレスポンスを待つことができます。Event
呼び出しにより、Lambda 関数を非同期的に呼び出すことができます。Lambda がEvent
呼び出しタイプのリクエストを処理する方法の詳細については、「非同期呼び出し」を参照してください。invocationType
フィールドはオプションです。このフィールドがリクエストに含まれていない場合、 AWS AppSync はデフォルトでRequestResponse
呼び出しタイプになります。
どのinvocationType
フィールドでも、解決されたリクエストは Lambda 関数の入力ペイロードと一致します。上記の例を変更してみましょう。
export function request(ctx) { return { operation: 'Invoke', invocationType: 'Event', payload: { field: 'getPost', arguments: ctx.args }, }; }
これは解決され、Lambda 関数に渡されます。この関数は次のようになります。
{ "operation": "Invoke", "invocationType": "Event", "payload": { "arguments": { "id": "postId1" } } }
BatchInvoke
オペレーションをEvent
呼び出しタイプフィールドと組み合わせて使用すると、 は上記の方法と同じ方法でフィールドリゾルバーを AWS AppSync マージし、リクエストは を値payload
のリストとする非同期イベントとして Lambda 関数に渡されます。Event
呼び出しタイプのリクエストからのレスポンスは、レスポンスハンドラーのないnull
値になります。
{ "data": { "field": null } }
Event
呼び出しタイプのリゾルバーのリゾルバーキャッシュは、キャッシュヒットがあった場合に Lambda に送信されないため、無効にすることをお勧めします。
レスポンスオブジェクト
他のデータソースと同様に、Lambda 関数は、GraphQL タイプに変換 AWS AppSync する必要があるレスポンスを に送信します。Lambda 関数の結果は、context
結果プロパティ () に含まれますcontext.result
。
Lambda 関数レスポンスの形状が GraphQL タイプの形状と一致する場合は、次の関数レスポンスハンドラーを使用してレスポンスを転送できます。
export function response(ctx) { return ctx.result }
レスポンスオブジェクトに適用される形状の制限や必須フィールドはありません。ただし、GraphQL が厳密に型指定されているので、解決されたレスポンスは予想される GraphQL タイプに一致する必要があります。
Lambda 関数のバッチ処理されたレスポンス
operation
フィールドが に設定されている場合BatchInvoke
、 AWS AppSync は Lambda 関数から返される項目のリストを期待します。 AWS AppSync が各結果を元のリクエスト項目にマッピングするには、レスポンスリストのサイズと順序が一致している必要があります。応答リストにnull
項目を含めることは有効ですctx.result
。それに応じて null に設定されます。