チュートリアル: AWS AppSync を使用してHTTPリゾルバーを作成する - AWS AppSync

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

チュートリアル: AWS AppSync を使用してHTTPリゾルバーを作成する

注記

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

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

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

ワンクリックでのセットアップ

(Amazon API Gateway と Lambda を使用して) エンドポイントが設定された AWS AppSync で GraphQL HTTPエンドポイントを自動的にセットアップする場合は、次の AWS CloudFormation テンプレート を使用できます。

Blue button labeled "Launch Stack" with an arrow icon indicating an action to start.

の作成 REST API

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

Blue button labeled "Launch Stack" with an arrow icon indicating an action to start.

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

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

  2. 次のエンドポイント/メソッド/コンテンツタイプの組み合わせRESTAPIで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

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

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

  • API 名前には、 と入力しますUserData

  • カスタムスキーマを選択します。

  • [作成] を選択します。

AWS AppSync コンソールは、APIキー認証モードAPIを使用して新しい GraphQL を作成します。コンソールを使用して残りの GraphQL を設定しAPI、このチュートリアルの残りの部分でクエリを実行できます。

GraphQL スキーマを作成する

GraphQL ができたのでAPI、GraphQL スキーマを作成しましょう。 AWS AppSync コンソールのスキーマエディタから、スキーマが次のスキーマと一致していることを確認します。

schema { query: Query mutation: Mutation } 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 データソースを設定するには、次の手順を実行します。

  • DataSources タブで、新規 を選択し、データソースのわかりやすい名前 (例: ) を入力しますHTTP

  • データソースタイプ で、 を選択しますHTTP

  • エンドポイントを、作成されたAPIゲートウェイエンドポイントに設定します。エンドポイントの一部にステージ名が含まれていないことを確認します。

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

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

リゾルバーの設定

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

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

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

  • クエリタイプの下の右側のデータ型ペインで、 getUserフィールドを見つけて、アタッチ を選択します。

  • [Data source name (データソース名)] で [HTTP] を選択します。

  • 以下のコードを [リクエストマッピングテンプレートの設定] に貼り付けます。

{ "version": "2018-05-29", "method": "GET", "params": { "headers": { "Content-Type": "application/json" } }, "resourcePath": $util.toJson("/v1/users/${ctx.args.id}") }
  • 以下のコードを [レスポンスマッピングテンプレートの設定] に貼り付けます。

## return the body #if($ctx.result.statusCode == 200) ##if response is 200 $ctx.result.body #else ##if response is not 200, append the response to error block. $utils.appendError($ctx.result.body, "$ctx.result.statusCode") #end
  • [Query (クエリ)] タブを選択して、以下のクエリを実行します。

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

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

{ "data": { "getUser": { "id": "1", "username": "nadia" } } }
  • [Schema (スキーマ)] タブを選択します。

  • 右側の「ミューテーション」のデータペインで、 addUserフィールドを見つけて「アタッチ」を選択します。

  • [Data source name (データソース名)] で [HTTP] を選択します。

  • 以下のコードを [リクエストマッピングテンプレートの設定] に貼り付けます。

{ "version": "2018-05-29", "method": "POST", "resourcePath": "/v1/users", "params":{ "headers":{ "Content-Type": "application/json", }, "body": $util.toJson($ctx.args.userInput) } }
  • 以下のコードを [レスポンスマッピングテンプレートの設定] に貼り付けます。

## Raise a GraphQL field error in case of a datasource invocation error #if($ctx.error) $util.error($ctx.error.message, $ctx.error.type) #end ## if the response status code is not 200, then return an error. Else return the body ** #if($ctx.result.statusCode == 200) ## If response is 200, return the body. $ctx.result.body #else ## If response is not 200, append the response to error block. $utils.appendError($ctx.result.body, "$ctx.result.statusCode") #end
  • [Query (クエリ)] タブを選択して、以下のクエリを実行します。

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

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

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

AWS サービスの呼び出し

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

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

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

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

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

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

次に、 のHTTPデータソースを作成します AWS AppSync。この例では、米国西部 (オレゴン) リージョン 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 リージョンのアカウントAPIsで AWS AppSync GraphQL のリストを返します。