ダイレクト Lambda リゾルバー (VTL) - AWS AppSync

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

ダイレクト Lambda リゾルバー (VTL)

注記

現在、主にAPPSYNC_JS ランタイムとそのドキュメントをサポートしています。こちらにある APPSYNC_JS ランタイムとそのガイドの使用をご検討ください。

ダイレクト Lambda リゾルバーを使用すると、AWS Lambda データソースを使用するときに VTL マッピングテンプレートの使用を回避できます。 AWSAppSync は、Lambda 関数にデフォルトのペイロードを提供できるだけでなく、Lambda 関数の応答から GraphQL タイプへのデフォルト変換も提供できます。リクエストテンプレート、レスポンステンプレート、またはどちらも指定しないかを選択できます。AWSAppSync はその選択に応じて処理します。

デフォルトのリクエストペイロードとレスポンスの翻訳の詳細については、AWSAppSync が提供している、「Lambda リゾルバーの直接リファレンス」を参照してください。AWS Lambda データソースの設定と IAM 信頼ポリシーの設定の詳細については、「データソースのアタッチ」を参照してください。

ダイレクト Lambda リゾルバーを設定する

以下のセクションでは、Lambda データソースをアタッチし、Lambda リゾルバーをフィールドに追加する方法を示します。

Lambda データソースを追加する

ダイレクト Lambda リゾルバーをアクティブ化する前に、Lambda データソースを追加する必要があります。

Console
  1. AWS Management Console にサインインして、AppSync コンソールを開きます。

    1. API ダッシュボードで、GraphQL API を選択します。

    2. サイドバーで [データソース] を選択します。

  2. [Create data source (データソースを作成)] を選択します。

    1. データソース名を使用する場合、myFunction のようなデータソースの名前を入力します。

    2. [データソースタイプ] で [AWS Lambda関数] を選択します。

    3. [リージョン] で、該当するリージョンを選択します。

    4. 関数 ARNを使用する場合は、ドロップダウンリストから Lambda 関数を選択します。関数名を検索するか、使用する関数の ARN を手動で入力します。

    5. 次に、新しい IAM ロールを作成するか (推奨)、lambda:invokeFunction への IAM アクセス許可を持つ既存のロールを選択します。データソースのアタッチセクションで説明しているように、既存のロールには信頼ポリシーが必要です。

      次に、リソースで操作を実行するために必要なアクセス許可を持つ IAM ポリシーの例を示します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:invokeFunction" ], "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:myFunction", "arn:aws:lambda:us-west-2:123456789012:function:myFunction:*" ] } ] }
  3. [Create Server (サーバーの作成)] ボタンを選択します。

CLI
  1. create-data-source コマンドを実行してデータソースオブジェクトを作成します。

    このコマンドには次の 4 つのパラメータを入力する必要があります。

    1. API の api-id

    2. データソースの name。コンソールの例では、これはデータソース名です。

    3. データソースの type。コンソールの例では、これはAWS Lambda 関数です。

    4. コンソールの例では関数 ARNlambda-config

    注記

    Region など、設定する必要のあるパラメータは他にもありますが、通常はデフォルトで CLI 設定値になります。

    コマンドの例は、次のようになります。

    aws appsync create-data-source --api-id abcdefghijklmnopqrstuvwxyz --name myFunction --type AWS_LAMBDA --lambda-config lambdaFunctionArn=arn:aws:lambda:us-west-2:102847592837:function:appsync-lambda-example

    出力は CLI に返されます。例を示します。

    { "dataSource": { "dataSourceArn": "arn:aws:appsync:us-west-2:102847592837:apis/abcdefghijklmnopqrstuvwxyz/datasources/myFunction", "type": "AWS_LAMBDA", "name": "myFunction", "lambdaConfig": { "lambdaFunctionArn": "arn:aws:lambda:us-west-2:102847592837:function:appsync-lambda-example" } } }
  2. データソースの属性を変更するには、update-data-source コマンドを実行します。

    api-id パラメータを除いて、create-data-source コマンドで使用されているパラメータは、update-data-source コマンドの新しい値で上書きされます。

ダイレクト Lambda リゾルバをアクティブ化する

Lambda データソースを作成し、適切な IAM ロールを設定して AWS AppSync 関数を呼び出す許可をあたえると、その関数をリゾルバまたはパイプライン関数にリンクできます。

Console
  1. AWS Management Console にサインインして、AppSync コンソールを開きます。

    1. API ダッシュボードで、GraphQL API を選択します。

    2. サイドバーで [スキーマ] を選択します。

  2. リゾルバーセクションで、フィールドまたはオペレーションを選択し、[アタッチ] ボタンを選択します。

  3. 新しいリゾルバーを作成するページで、ドロップダウンリストから Lambda 関数を選択します。

  4. ダイレクト Lambda リゾルバーを利用するには、リクエストとレスポンスのマッピングテンプレートがマッピングテンプレートを設定するセクションで無効になっていることを確認します。

  5. [リゾルバーの保存] ボタンを選択します。

CLI
  • create-resolver コマンドを実行してリゾルバーを作成します。

    このコマンドには次の 6 つのパラメータを入力する必要があります。

    1. API の api-id

    2. スキーマでのタイプの type-name

    3. スキーマでのフィールドの field-name

    4. data-source-name、または Lambda 関数の名前。

    5. リクエストの本文である request-mapping-template。コンソールの例では、これは無効になっています。

      " "
    6. レスポンスの本文である response-mapping-template。コンソールの例では、これも無効になっています。

      " "

    コマンドの例は、次のようになります。

    aws appsync create-resolver --api-id abcdefghijklmnopqrstuvwxyz --type-name Subscription --field-name onCreateTodo --data-source-name LambdaTest --request-mapping-template " " --response-mapping-template " "

    出力は CLI に返されます。例を示します。

    { "resolver": { "resolverArn": "arn:aws:appsync:us-west-2:102847592837:apis/abcdefghijklmnopqrstuvwxyz/types/Subscription/resolvers/onCreateTodo", "typeName": "Subscription", "kind": "UNIT", "fieldName": "onCreateTodo", "dataSourceName": "LambdaTest" } }

マッピングテンプレートを無効にすると、AWS AppSync で発生する追加の動作がいくつかあります。

  • マッピングテンプレートを無効にすると、[ダイレクト Lambda リゾルバーリファレンス] で指定されたデフォルトのデータ変換を受け入れる AWS AppSync に信号を送ります。

  • リクエストマッピングテンプレートを無効にすると、Lambda データソースは、Contextオブジェクト全体で構成されるペイロードを受け取ります。

  • レスポンスマッピングテンプレートを無効にすると、リクエストマッピングテンプレートのバージョン、またはリクエストマッピングテンプレートも無効になっているかどうかに応じて、Lambda 呼び出しの結果が変換されます。