翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS AppSync での HTTP リゾルバーの使用
注記
現在、主に APPSYNC_JS ランタイムとそのドキュメントをサポートしています。こちらにある APPSYNC_JS ランタイムとそのガイドの使用をご検討ください。
AWS AppSync では、サポートされたデータソース (つまり Amazon DynamoDB、Amazon OpenSearch Service、または Amazon Aurora) を使用してさまざまなオペレーションを実行できるほか、任意の HTTP エンドポイントを使用して GraphQL フィールドを解決できます。HTTP エンドポイントが利用可能になったら、データソースを使用してこれに接続できます。その後、クエリ、ミューテーション、およびサブスクリプションなどの GraphQL オペレーションを実行するために、スキーマ内のリゾルバーを設定できます。このチュートリアルでは、いくつかの一般的な例を説明します。
このチュートリアルでは、AWSAppSync GraphQL エンドポイントで REST API (Amazon API Gateway と Lambda により作成) を使用します。
ワンクリックでのセットアップ
AWS AppSync で HTTP エンドポイントを設定した GraphQL エンドポイントを自動的に設定するには (Amazon API Gateway および Lambda を使用)、以下の AWS CloudFormation テンプレートを使用します。
REST API を作成する
以下の AWS CloudFormation テンプレートを使用して、このチュートリアルで機能する REST エンドポイントを設定できます。
AWS CloudFormation スタックは以下のステップを実行します。
-
マイクロサービス用のビジネスロジックを含む Lambda 関数を設定します。
-
以下のエンドポイント/メソッド/コンテンツタイプを組み合わせて、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 を作成するには、以下の手順に従います。
-
AWS AppSync コンソールを開き、[Create API (API の作成)] を選択します。
-
API 名として「
UserData
」と入力します。 -
カスタムスキーマを選択します。
-
[Create] (作成) を選択します。
AWS AppSync;コンソールによって、API キー認証モードを使用して新しい GraphQL API が作成されます。このコンソールを使用して、残りの 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 (データソース)] タブで [New (新規)] を選択し、データソース名としてわかりやすい名前 (
HTTP
など) を入力します。 -
[Data source type (データソースタイプ)] で「HTTP」を選択します。
-
作成された API Gateway エンドポイントに、エンドポイントを設定します。エンドポイントの一部にステージ名が含まれていないことを確認します。
注意: 現時点では、パブリックエンドポイントのみが AWS AppSync でサポートされています。
注意: AWS AppSync サービスによって認識される認証機関の詳細については、「HTTPS エンドポイントについて AWS AppSync によって認識される認証機関 (CA)」を参照してください。
リゾルバーの設定
このステップでは、http データソースを getUser クエリに接続します。
リゾルバーをセットアップするには、以下の手順に従います。
-
[Schema (スキーマ)] タブを選択します。
-
クエリタイプの右下のデータ型ペインで、getUserフィールドを見つけて、アタッチを選択します。
-
[データソース名] で、[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フィールドを見つけて、アタッチを選択します。
-
[データソース名] で、[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 インターフェイスを設定できます。AWS への HTTP リクエストは、AWS誰が送信したかを特定できるように 署名バージョン 4 の署名プロセス で署名する必要があります。AWSIAM ロールを HTTP データソースに関連付けるときに、AppSync が署名を計算します。
HTTP リゾルバーで AWS のサービスを呼び出すには、2 つの追加のコンポーネントを指定します。
-
AWS のサービス API を呼び出すアクセス許可を持つ IAM ロール
-
データソースの署名設定
例えば、HTTP リゾルバーを使用して ListGraphqLapis オペレーションを呼び出す場合は、まず IAM ロールを作成すると AWS AppSync は、それに以下のポリシーをアタッチします。
{ "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 API のリストを返します。