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

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

での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エンドポイントを設定できます。

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

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

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

  2. 次の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:

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

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

  3. API 名前には、 と入力しますUserData。[Next (次へ)] を選択します。

  4. [Create GraphQL resources later] を選択します。[Next (次へ)] を選択します。

  5. 入力を確認し、 の作成 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 データソースを設定するには、以下を実行します。

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

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

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

  4. チュートリアルの冒頭で作成された 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クエリに接続します。

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

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

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

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

  4. データソース名 で、前に作成したHTTPエンドポイントを選択します。

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

  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. [Create] (作成) を選択します。

  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 する必要があります。 は、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 のリストを返します。