Verwendung von HTTP Resolvern in AWS AppSync - AWS AppSync

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwendung von HTTP Resolvern in AWS AppSync

AWS AppSync ermöglicht es Ihnen, unterstützte Datenquellen (d. h. Amazon DynamoDB AWS Lambda, Amazon OpenSearch Service oder Amazon Aurora) zu verwenden, um verschiedene Operationen durchzuführen, zusätzlich zu beliebigen HTTP Endpunkten zur Auflösung von GraphQL-Feldern. Sobald Ihre HTTP Endgeräte verfügbar sind, können Sie über eine Datenquelle eine Verbindung zu ihnen herstellen. Anschließend können Sie einen Resolver im Schema konfigurieren, um GraphQL-Operationen wie Abfragen, Mutationen und Abonnements auszuführen. Dieses Tutorial führt Sie durch einige häufig auftretende Beispiele.

In diesem Tutorial verwenden Sie ein REST API (mit Amazon API Gateway und Lambda erstellt) mit einem AWS AppSync GraphQL-Endpunkt.

Erstellen eines REST API

Sie können die folgende AWS CloudFormation Vorlage verwenden, um einen REST Endpunkt einzurichten, der für dieses Tutorial funktioniert:

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

Der AWS CloudFormation Stack führt die folgenden Schritte aus:

  1. Richtet eine Lambda-Funktion ein, die die Geschäftslogik für den Mikroservice enthält.

  2. Richtet ein API Gateway REST API mit der folgenden endpoint/method/content Typkombination ein:

APIPfad der Ressource HTTPMethode Unterstützter Inhaltstyp

/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

Erstellen Sie Ihr GraphQL API

Um GraphQL zu erstellen API in AWS AppSync:

  1. Öffnen Sie die AWS AppSync Konsole und wählen Sie Create API.

  2. Wählen Sie GraphQL APIs und dann Design from scratch. Wählen Sie Weiter.

  3. Geben UserData Sie als API Namen ein. Wählen Sie Weiter.

  4. Wählen Sie Create GraphQL resources later. Wählen Sie Weiter.

  5. Überprüfen Sie Ihre Eingaben und wählen Sie Erstellen ausAPI.

Die AWS AppSync Konsole erstellt im API Schlüsselauthentifizierungsmodus ein neues GraphQL API für Sie. Sie können die Konsole verwenden, um Ihr GraphQL weiter zu konfigurieren API und Anfragen auszuführen.

Erstellen eines GraphQL-Schemas

Nun, da Sie ein GraphQL habenAPI, lassen Sie uns ein GraphQL-Schema erstellen. Verwenden Sie im Schema-Editor in der AWS AppSync Konsole das folgende Snippet:

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 }

Konfigurieren Sie Ihre Datenquelle HTTP

Gehen Sie wie folgt vor, um Ihre HTTP Datenquelle zu konfigurieren:

  1. Wählen Sie auf der Seite Datenquellen in Ihrem AWS AppSync GraphQL API die Option Datenquelle erstellen aus.

  2. Geben Sie einen Namen für die Datenquelle ein, z. HTTP_Example

  3. Wählen Sie unter Datenquellentyp die Option HTTPEndpunkt aus.

  4. Stellen Sie den Endpunkt auf den API Gateway-Endpunkt ein, der zu Beginn des Tutorials erstellt wurde. Sie finden Ihren vom Stack generierten Endpunkt, wenn Sie zur Lambda-Konsole navigieren und Ihre Anwendung unter Anwendungen suchen. In den Einstellungen Ihrer Anwendung sollten Sie einen APIEndpunkt sehen, der Ihr Endpunkt sein wird. AWS AppSync Stellen Sie sicher, dass Sie den Phasennamen nicht als Teil des Endpunkts angeben. Wenn Ihr Endpunkt beispielsweise wärehttps://aaabbbcccd.execute-api.us-east-1.amazonaws.com/v1, würden Sie Folgendes eingebenhttps://aaabbbcccd.execute-api.us-east-1.amazonaws.com.

Anmerkung

Derzeit werden nur öffentliche Endpunkte von AWS AppSync unterstützt.

Weitere Informationen zu den Zertifizierungsstellen, die vom AWS AppSync Dienst anerkannt werden, finden Sie unter Zertifizierungsstellen (CA) Anerkannt von AWS AppSync für HTTPS Endgeräte.

Konfigurieren von Resolvern

In diesem Schritt verbinden Sie die HTTP Datenquelle mit den getUser addUser AND-Abfragen.

So richten Sie den getUser Resolver ein:

  1. Wählen Sie in Ihrem AWS AppSync GraphQL API die Registerkarte Schema.

  2. Suchen Sie rechts neben dem Schema-Editor im Bereich Resolvers unter dem Abfragetyp das getUser Feld und wählen Sie Anhängen aus.

  3. Behalten Sie den Resolvertyp bei Unit und die Laufzeit bei. APPSYNC_JS

  4. Wählen Sie im Feld Datenquellenname den HTTP Endpunkt aus, den Sie zuvor erstellt haben.

  5. Wählen Sie Create (Erstellen) aus.

  6. Fügen Sie im Resolver-Code-Editor das folgende Snippet als Ihren Request-Handler hinzu:

    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. Fügen Sie das folgende Snippet als Antworthandler hinzu:

    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. Wählen Sie auf der Registerkarte Query (Abfrage) und führen Sie dann folgende Abfrage aus:

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

    Folgende Antwort sollte zurückgegeben werden:

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

Um den Resolver einzurichten: addUser

  1. Wählen Sie die Registerkarte Schema aus.

  2. Suchen Sie rechts neben dem Schema-Editor im Bereich Resolver unter dem Abfragetyp das addUser Feld und wählen Sie Anhängen aus.

  3. Behalten Sie den Resolvertyp bei Unit und die Laufzeit bei. APPSYNC_JS

  4. Wählen Sie im Feld Datenquellenname den HTTP Endpunkt aus, den Sie zuvor erstellt haben.

  5. Wählen Sie Create (Erstellen) aus.

  6. Fügen Sie im Resolver-Code-Editor das folgende Snippet als Ihren Request-Handler hinzu:

    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. Fügen Sie das folgende Snippet als Antworthandler hinzu:

    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. Wählen Sie auf der Registerkarte Query (Abfrage) und führen Sie dann folgende Abfrage aus:

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

    Wenn Sie die getUser Abfrage erneut ausführen, sollte sie die folgende Antwort zurückgeben:

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

Dienste werden aufgerufen AWS

Sie können HTTP Resolver verwenden, um eine API GraphQL-Schnittstelle für AWS Dienste einzurichten. HTTPAnfragen an AWS müssen mit dem Signature Version 4-Prozess signiert werden, damit identifiziert werden AWS kann, wer sie gesendet hat. AWS AppSync berechnet die Signatur in Ihrem Namen, wenn Sie der HTTP Datenquelle eine IAM Rolle zuordnen.

Sie stellen zwei zusätzliche Komponenten bereit, um AWS Dienste mit HTTP Resolvern aufzurufen:

  • Eine IAM Rolle mit Berechtigungen zum Aufrufen des Dienstes AWS APIs

  • Signierkonfiguration in der Datenquelle

Wenn Sie den ListGraphqlApis Vorgang beispielsweise mit HTTP Resolvern aufrufen möchten, erstellen Sie zunächst eine IAM Rolle, der AWS AppSync die folgende Richtlinie zugewiesen ist:

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

Als Nächstes erstellen Sie die HTTP Datenquelle für AWS AppSync. In diesem Beispiel rufen Sie AWS AppSync in der Region USA West (Oregon) an. Richten Sie die folgende HTTP Konfiguration in einer Datei mit dem Namen einhttp.json, die die Signaturregion und den Dienstnamen enthält:

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

Verwenden Sie dann den, AWS CLI um die Datenquelle mit einer zugehörigen Rolle wie folgt zu erstellen:

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

Wenn Sie einen Resolver an das Feld im Schema anhängen, verwenden Sie zum Aufrufen AWS AppSync die folgende Vorlage für die Anforderungszuweisung:

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

Wenn Sie eine GraphQL-Abfrage für diese Datenquelle ausführen, AWS AppSync signiert die Anfrage mit der von Ihnen angegebenen Rolle und fügt die Signatur in die Anfrage ein. Die Abfrage gibt eine Liste von AWS AppSync GraphQL APIs in Ihrem Konto in dieser AWS Region zurück.