翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
でのHTTPリゾルバーの使用 AWS AppSync
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 スタックは次の手順を実行します。
-
マイクロサービス用のビジネスロジックを含む Lambda 関数を設定します。
-
次のendpoint/method/contentタイプの組み合わせRESTAPIで API Gateway を設定します。
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を選択します。
-
GraphQL APIsを選択し、最初から設計 を選択します。[Next (次へ)] を選択します。
-
API 名前には、 と入力します
UserData
。[Next (次へ)] を選択します。 -
[
Create GraphQL resources later
] を選択します。[Next (次へ)] を選択します。 -
入力を確認し、 の作成 APIを選択します。
AWS AppSync コンソールは、APIキー認証モードAPIを使用して新しい GraphQL を作成します。コンソールを使用して、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 データソースを設定するには、以下を実行します。
-
AWS AppSync GraphQL のデータソースページでAPI、データソースの作成 を選択します。
-
HTTP_Example
のようにデータソースの名前を入力します。 -
データソースタイプ で、HTTPエンドポイント を選択します。
-
チュートリアルの冒頭で作成された API Gateway エンドポイントにエンドポイントを設定します。Lambda コンソールに移動し、[アプリケーション] でアプリケーションを見つけると、スタックで生成されたエンドポイントを見つけることができます。アプリケーションの設定内には、 のAPIエンドポイントとなるエンドポイントが表示されます AWS AppSync。エンドポイントの一部にステージ名が含まれていないことを確認します。例えば、エンドポイントが
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
クエリに接続します。
リゾルバーをセットアップするには、以下の手順に従います。
-
AWS AppSync GraphQL でAPI、スキーマタブを選択します。
-
スキーマエディタの右側の[リゾルバー]ペインの[クエリタイプ]で、
getUser
フィールドを見つけて[アタッチ]を選択します。 -
リゾルバータイプは
Unit
のままにし、ランタイムはAPPSYNC_JS
にします。 -
データソース名 で、前に作成したHTTPエンドポイントを選択します。
-
[Create] (作成) を選択します。
-
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}`, } }
-
次のスニペットをレスポンスハンドラーとして追加します。
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) }
-
[Query (クエリ)] タブを選択して、以下のクエリを実行します。
query GetUser{ getUser(id:1){ id username } }
これは以下のレスポンスを返します。
{ "data": { "getUser": { "id": "1", "username": "nadia" } } }
リゾルバーをセットアップするには、以下の手順に従います。
-
[Schema (スキーマ)] タブを選択します。
-
スキーマエディタの右側の[リゾルバー]ペインの[クエリタイプ]で、
addUser
フィールドを見つけて[アタッチ]を選択します。 -
リゾルバータイプは
Unit
のままにし、ランタイムはAPPSYNC_JS
にします。 -
データソース名 で、前に作成したHTTPエンドポイントを選択します。
-
[Create] (作成) を選択します。
-
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 } } }
-
次のスニペットをレスポンスハンドラーとして追加します。
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") } }
-
[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 する必要があります。 は、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 のリストを返します。