Lambda 用の JavaScript リゾルバー関数リファレンス - AWS AppSync

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

Lambda 用の JavaScript リゾルバー関数リファレンス

AWS Lambda AppSync 関数を使用すると、AWS AppSync からアカウントにある Lambda 関数へのリクエストの形状を定義し、Lambda 関数からのレスポンスを AWS AppSync に戻すことができます。実行する操作のタイプをリクエストオブジェクトで指定することもできます。このセクションでは、サポートされる Lambda 操作に対するリクエストについて説明します。。

オブジェクトをリクエストする

Lambda リクエストオブジェクトはシンプルで、できるだけ多くのコンテキスト情報を Lambda 関数に渡すことができます。

type LambdaRequest = { operation: 'Invoke' | 'BatchInvoke'; payload: any; };

以下に示しているのは、コンテキストから GraphQL フィールド引数と field 値を渡すように選択した例です。

export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }

マッピングドキュメント全体は、使用する Lambda 関数に入力として渡されます。これにより、先ほどのサンプルは以下のようになります。

{ "version": "2018-05-29", "operation": "Invoke", "payload": { "field": "getPost", "arguments": { "id": "postId1" } } }

操作

Lambda データソースでは、2 つのオペレーションである InvokeBatchInvoke を定義できます。Invoke 操作では、すべての GraphQL フィールドリゾルバーに対して Lambda 関数を呼び出すことを AWS AppSync に通知します。BatchInvoke では、現在の GraphQL フィールドに対するリクエストをバッチ処理するように AWS AppSync に指示します。

operation は必須です。

Invoke では、解決されたリクエストは Lambda 関数の入力 payload と完全に一致します。以下はリクエストハンドラーの例です。

export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }

解決され、次の内容が Lambda 関数に渡されます。

{ "version": "2018-05-29", "operation": "Invoke", "payload": { "arguments": { "id": "postId1" } } }

BatchInvoke では、リクエストはバッチ内のすべてのフィールドリゾルバーに適用されます。簡潔さのために、AWS AppSync はすべてのリクエスト payload 値を、リクエストオブジェクトに一致する単一オブジェクトの下でリストにマージします。

以下のリクエストハンドラーの例ではマージを示しています。

export function request(ctx) { return { operation: 'Invoke', payload: ctx, }; }

このリクエストは評価され、次のマッピングドキュメントに解決されます。

{ "version": "2018-05-29", "operation": "BatchInvoke", "payload": [ {...}, // context for batch item 1 {...}, // context for batch item 2 {...} // context for batch item 3 ] }

ここで payload リストの各要素は、1 回のバッチ項目に対応しています。また、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 ]

operation は必須です。

Payload

payload フィールドは、任意のデータを Lambda 関数に渡す際に使用できるコンテナです。

operation フィールドが BatchInvoke に設定されている場合、AWS AppSync は既存の payload 値をリストにまとめます。

payload は省略可能です。

レスポンスオブジェクト

他のデータソースと同様に、Lambda 関数はレスポンスを、AWS AppSync に送信します。これは GraphQL タイプに変換する必要があります。

Lambda 関数の結果は、context result プロパティに設定されます (context.result)。

Lambda 関数のレスポンスの形状と GraphQL タイプの形状が正確に一致する場合は、以下の関数レスポンスハンドラーを使用して、レスポンスを転送できます。

export function response(ctx) { return ctx.result }

レスポンスオブジェクトに適用される形状の制限や必須フィールドはありません。ただし、GraphQL が厳密に型指定されているので、解決されたレスポンスは予想される GraphQL タイプに一致する必要があります。

Lambda 関数のバッチ処理されたレスポンス

operation フィールドが BatchInvoke に設定されている場合、AWS AppSync は Lambda 関数からの項目のリストを想定します。AWS AppSync で、それぞれの結果を元のリクエスト項目にマッピングするためには、レスポンスリストでサイズと順番が一致する必要があります。レスポンスリストに null 項目があっても構いません。その場合、ctx.resultnull に設定されます。