View a markdown version of this page

AWS AppSync での HTTP リゾルバーの使用 - AWS AppSync GraphQL

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

AWS AppSync での HTTP リゾルバーの使用

AWS AppSync を使用すると、サポートされているデータソース (Amazon DynamoDB AWS Lambda、Amazon OpenSearch Service、または Amazon Aurora) を使用して、GraphQL フィールドを解決するための任意の HTTP エンドポイントに加えて、さまざまなオペレーションを実行できます。HTTP エンドポイントが利用可能になったら、データソースを使用してこれに接続できます。その後、クエリ、ミューテーション、およびサブスクリプションなどの GraphQL オペレーションを実行するために、スキーマ内のリゾルバーを設定できます。このチュートリアルでは、いくつかの一般的な例を説明します。

このチュートリアルでは、 AWS AppSync GraphQL エンドポイントで REST API (Amazon API Gateway と Lambda により作成) を使用します。

REST API を作成する

次の AWS CloudFormation テンプレートを使用して、このチュートリアルで機能する REST エンドポイントを設定できます。

AWS CloudFormation スタックは次のステップを実行します。

  1. マイクロサービス用のビジネスロジックを含む Lambda 関数を設定します。

  2. 以下のエンドポイント/メソッド/コンテンツタイプを組み合わせて、API Gateway REST API をセットアップします。

API リソースパス HTTP メソッド サポートされているコンテンツタイプ

/v1/users

POST

application/json

/v1/users

GET

application/json

/v1/users/1

GET

application/json

/v1/users/1

PUT

application/json

/v1/users/1

DELETE

application/json

GraphQL API の作成

AWS AppSync で GraphQL API を作成するには:

  1. AWS AppSync コンソールを開き、API の作成を選択します。

  2. [GraphQL API] を選択し、[最初から設計] を選択します。[次へ] を選択します。

  3. API 名として「UserData」と入力します。[次へ] を選択します。

  4. Create GraphQL resources later を選択してください。[次へ] を選択します。

  5. 入力内容を確認し、[API の作成] を選択します。

AWS AppSync コンソールは、API キー認証モードを使用して新しい GraphQL API を作成します。コンソールを使用して GraphQL API をさらに設定し、リクエストを実行できます。

GraphQL スキーマを作成する

GraphQL API を作成できたので、次に GraphQL スキーマを作成します。 AWS AppSync コンソールのスキーマエディタで、以下のスニペットを使用します。

type Mutation { addUser(userInput: UserInput!): User deleteUser(id: ID!): User } type Query { getUser(id: ID): User listUser: [User!]! } type User { id: ID! username: String! firstname: String lastname: String phone: String email: String } input UserInput { id: ID! username: String! firstname: String lastname: String phone: String email: String }

HTTP データソースを設定する

HTTP データソースを設定するには、以下の操作を行います。

  1. AWS AppSync GraphQL API のデータソースページで、データソースの作成を選択します。

  2. HTTP_Example のようにデータソースの名前を入力します。

  3. [データソースタイプ][HTTP エンドポイント] を選択します。

  4. チュートリアルの最初に作成された API ゲートウェイエンドポイントに、エンドポイントを設定します。Lambda コンソールに移動し、[アプリケーション] でアプリケーションを見つけると、スタックで生成されたエンドポイントを見つけることができます。アプリケーションの設定の中に、 AWS AppSyncのエンドポイントとなる API エンドポイントが表示されます。エンドポイントの一部にステージ名が含まれていないことを確認します。例えば、エンドポイントが https://aaabbbcccd.execute-api.us-east-1.amazonaws.com/v1 であれば、https://aaabbbcccd.execute-api.us-east-1.amazonaws.com に入力します。

注記

現時点では、 AWS AppSync ではパブリックエンドポイントのみがサポートされています。

AWS AppSync サービスによって認識される認証機関の詳細については、「HTTPS エンドポイント AWS AppSync の によって認識される認証機関 (CA)」を参照してください。

リゾルバーの設定

このステップでは、http データソースを とgetUser および addUser クエリに接続します。

getUserリゾルバーをセットアップするには

  1. AWS AppSync GraphQL API で、スキーマタブを選択します。

  2. スキーマエディタの右側のリゾルバー]ペインの[クエリタイプ]で、getUserフィールドを見つけて[アタッチ]を選択します。

  3. リゾルバータイプはUnitのままにし、ランタイムはAPPSYNC_JSにします。

  4. [データソース名] で、先ほど作成した HTTP エンドポイントを選択します。

  5. [作成] を選択します。

  6. Resolver コードエディターで、次のスニペットをリクエストハンドラーとして追加します。

    import { util } from '@aws-appsync/utils' export function request(ctx) { return { version: '2018-05-29', method: 'GET', params: { headers: { 'Content-Type': 'application/json', }, }, resourcePath: `/v1/users/${ctx.args.id}`, } }
  7. 次のスニペットをレスポンスハンドラーとして追加します。

    export function response(ctx) { const { statusCode, body } = ctx.result // if response is 200, return the response if (statusCode === 200) { return JSON.parse(body) } // if response is not 200, append the response to error block. util.appendError(body, statusCode) }
  8. [Query (クエリ)] タブを選択して、以下のクエリを実行します。

    query GetUser{ getUser(id:1){ id username } }

    これは以下のレスポンスを返します。

    { "data": { "getUser": { "id": "1", "username": "nadia" } } }

リゾルバーをセットアップするには、以下の手順に従います。

  1. [Schema (スキーマ)] タブを選択します。

  2. スキーマエディタの右側のリゾルバー]ペインの[クエリタイプ]で、addUserフィールドを見つけて[アタッチ]を選択します。

  3. リゾルバータイプはUnitのままにし、ランタイムはAPPSYNC_JSにします。

  4. [データソース名] で、先ほど作成した HTTP エンドポイントを選択します。

  5. [作成] を選択します。

  6. Resolver コードエディターで、次のスニペットをリクエストハンドラーとして追加します。

    export function request(ctx) { return { "version": "2018-05-29", "method": "POST", "resourcePath": "/v1/users", "params":{ "headers":{ "Content-Type": "application/json" }, "body": ctx.args.userInput } } }
  7. 次のスニペットをレスポンスハンドラーとして追加します。

    export function response(ctx) { if(ctx.error) { return util.error(ctx.error.message, ctx.error.type) } if (ctx.result.statusCode == 200) { return ctx.result.body } else { return util.appendError(ctx.result.body, "ctx.result.statusCode") } }
  8. [Query (クエリ)] タブを選択して、以下のクエリを実行します。

    mutation addUser{ addUser(userInput:{ id:"2", username:"shaggy" }){ id username } }

    getUser クエリを再実行すると、次のレスポンスが返されるはずです。

    { "data": { "getUser": { "id": "2", "username": "shaggy" } } }

AWS サービスの呼び出し

HTTP リゾルバーを使用して、 AWS サービスの GraphQL API インターフェイスを設定できます。への HTTP リクエストは、 AWS が送信者を識別できるように、署名バージョン 4 プロセスで署名 AWS する必要があります。 AWS AppSync は、IAM ロールを HTTP データソースに関連付けるときに、ユーザーに代わって署名を計算します。

HTTP リゾルバーで AWS サービスを呼び出すには、次の 2 つの追加コンポーネントを提供します。

  • AWS サービス APIs を呼び出すアクセス許可を持つ IAM ロール

  • データソースの署名設定

たとえば、HTTP リゾルバーを使用して ListGraphqlApis オペレーションを呼び出す場合は、まず AWS AppSync が引き受ける IAM ロールを作成し、次のポリシーをアタッチします。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "appsync:ListGraphqlApis" ], "Effect": "Allow", "Resource": "*" } ] }

次に、 AWS AppSync の HTTP データソースを作成します。この例では、米国西部 (オレゴン) リージョンで AWS AppSync を呼び出します。http.json という名前のファイルで、署名リージョンとサービス名を含む以下の HTTP 設定を定義します。

{ "endpoint": "https://appsync.us-west-2.amazonaws.com/", "authorizationConfig": { "authorizationType": "AWS_IAM", "awsIamConfig": { "signingRegion": "us-west-2", "signingServiceName": "appsync" } } }

次に、 を使用して AWS CLI 、次のように関連付けられたロールを持つデータソースを作成します。

aws appsync create-data-source --api-id <API-ID> \ --name AWSAppSync \ --type HTTP \ --http-config file:///http.json \ --service-role-arn <ROLE-ARN>

リゾルバーをスキーマの フィールドにアタッチする場合は、次のリクエストマッピングテンプレートを使用して AWS AppSync を呼び出します。

{ "version": "2018-05-29", "method": "GET", "resourcePath": "/v1/apis" }

このデータソースに対して GraphQL クエリを実行すると、 AWS AppSync は指定したロールを使用してリクエストに署名し、リクエストに署名を含めます。クエリは、その AWS リージョンのアカウントの AWS AppSync GraphQL APIsのリストを返します。