Durch die Nutzung von AWS re:Post stimmt du den AWS re:Post Nutzungsbedingungen

Wie informiere ich AWS AppSync-Subscriber über externe Datenbank-Updates, dass clientseitige Mutationen nicht funktionieren?

Lesedauer: 7 Minute
0

Ich möchte, dass die Clients meiner App in Echtzeit aktualisiert werden, wenn externe Datenbankänderungen vorgenommen werden, die nicht durch clientseitige Mutationen vorgenommen wurden. Wie verwende ich AWS AppSync, um Subscriber über diese Änderungen zu informieren?

Kurzbeschreibung

Verwenden Sie lokale Resolver, um Subscriber in Echtzeit über externe Datenbankänderungen zu informieren, ohne einen Datenquellen-Aufruf tätigen zu müssen. Lokale Resolver sind beispielsweise nützlich für Apps, die Informationen regelmäßig aktualisieren, wie z. B. eine Airline-App.

Führen Sie die Schritte im Abschnitt Lösung aus, um eine Beispiel-GraphQL-API zu erstellen. Die GraphQL-API aktualisiert Subscriber in Echtzeit, wenn Daten in eine Amazon DynamoDB-Tabellendatenquelle geschrieben werden.

Lösung

Erstellen einer GraphQL-API mit dem Assistenten

Verwenden Sie den geführten Schema-Assistenten von AWS AppSync, um eine neue GraphQL-API zu erstellen. Weitere Informationen finden Sie unter Entwerfen einer GraphQL-API.

1.    Öffnen Sie die AWS AppSync-Konsole.

2.    Wählen Sie API erstellen aus.

3.    Wählen Sie auf der Seite Erste Schritte unter Customize your API or import from Amazon DynamoDB (API anpassen oder aus Amazon DynamoDB importieren) die Option Create with wizard (Mit Assistenten erstellen) und dann Start aus.

4.    Gehen Sie auf der Seite Create a model (Ein Modell erstellen) wie folgt vor:
Geben Sie unter Name the model (Modell benennen) einen Namen für Ihr Modell ein. In diesem Beispiel ist Book (Buch) der Name.
Definieren Sie unter Configure model fields (Modellfelder konfigurieren) die Datentypen für Ihre App. Behalten Sie für dieses Beispiel-Setup die Standardfeldnamen (id und title (Titel) und Typen bei.
(Optional) Erweitern Sie Configure model table (optional) (Modelltabelle konfigurieren), um einen Index hinzuzufügen.
Wählen Sie Create (Erstellen).

5.    Geben Sie auf der Seite Create resources (Ressourcen erstellen) einen Namen für Ihre API ein. Wählen Sie dann Create (Erstellen). AWS AppSync erstellt Ihre API und öffnet die Seite Queries (Abfragen) Ihrer API.

Erstellen eines Testabonnements

1.    Öffnen Sie die AWS AppSync-Konsole.

2.    Navigieren Sie zur Seite Queries (Abfragen) Ihrer API und öffnen Sie dann eine doppelte Browserregisterkarte oder ein doppeltes Browserfenster.

3.    Löschen Sie in der doppelten Browserregisterkarte oder im -fenster den Inhalt des Abfrageeditors und geben Sie die folgende Abfrage ein:

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

Die vorherige Abfrage erstellt ein Abonnement für ** **createbook-Mutationen.

4.    Wählen Sie die Wiedergabetaste (Abfrage ausführen). Die doppelte Browserregisterkarte oder das doppelte Browserfenster hat createBook-Mutationen abonniert.

5.    Wählen Sie in der ursprünglichen Browserregisterkarte oder im -fenster die Wiedergabetaste (Abfrage ausführen) und wählen Sie dann createBook, um die Mutation auszuführen. Die Ergebnisse werden sowohl in den ursprünglichen als auch in den doppelten Browserregisterkarten oder -fenstern (Abonnement) angezeigt.

6.    Nachdem Sie das Abonnement gesehen haben, schließen Sie die doppelte Browserregisterkarte oder das doppelte Browserfenster.

Erstellen einer Datenquelle vom Typ „None“

Der Datenquellentyp None (Kein) übergibt die Vorlage für die Anforderungszuordnung direkt an die Vorlage für die Antwortzuordnung.

1.    Öffnen Sie in der ursprünglichen Browserregisterkarte oder im Fenster die AWS AppSync-Konsole.

2.    Wählen Sie im linken Navigationsbereich Data Sources (Datenquellen) aus.

3.    Wählen Sie Create Data Source (Datenquelle erstellen).

4.    Führen Sie auf der Seite New Data Source (Neue Datenquelle) unter Create new Data Source (Neue Datenquelle erstellen) die folgenden Schritte aus:
Geben Sie für Data source name (Name der Datenquelle) einen Namen ein. Zum Beispiel real\ _time_data.
Wählen Sie für Data source type (Datenquellentyp) die Option None (Kein) aus.

5.    Wählen Sie Create (Erstellen).

Weitere Informationen finden Sie unter Anhängen einer Datenquelle.

Hinzufügen einer Mutation zu einem Schema

Erstellen Sie eine zweite Mutation, die ein Administrator verwenden kann, oder die Sie auslösen können, wenn Sie das Schema aktualisieren.

Aktualisieren Sie das Schema mit einer Mutation, die Datenbankaktualisierungen an die Datenquelle vom Typ None (Kein) weitergibt.

1.    Öffnen Sie die AWS AppSync-Konsole.

2.    Wählen Sie im linken Navigationsbereich Schema aus.

3.    Fügen Sie im Schemaeditor unter type Mutation { (Typ Mutation) den folgenden Befehl hinzu, um den neuen Mutationstyp für externe Updates zu erstellen:

createBookExt(input: CreateBookInput!): Book

4.    Suchen Sie im Schemaeditor unter type Subscription { (Typ Abonnement) nach der folgenden Zeile:

onCreateBook(id: ID, title: String): Book
        @aws_subscribe(mutations: ["createBook"])

5.    Fügen Sie „createBookExt“ zur Liste der Mutationen hinzu:

onCreateBook(id: ID, title: String): Book
        @aws_subscribe(mutations: ["createBook", "createBookExt"])

6.    Wählen Sie Save Schema (Schema speichern).

Weitere Informationen finden Sie unter Entwerfen Ihres Schemas.

Hinzufügen eines Resolver zur Mutation

1.    Öffnen Sie die AWS AppSync-Konsole.

2.    Scrollen Sie auf der Seite Schema Ihrer API unter Resolvers (Resolver) nach unten zu Mutation. Oder geben Sie für Filter types (Filtertypen) Mutation ein.

3.    Weiter zu createBookExt(...): Book (Buch), wählen Sie unter Resolver die Option Attach (Anhängen) aus.

4.    Wählen Sie auf der Seite Create new Resolver (Neuen Resolver erstellen) unter Data source name (Datenquellenname) den Namen der Datenquelle vom Typ None (Kein) aus, die Sie erstellt haben. Zum Beispiel real_time_data.

5.    Suchen Sie unter Configure the request mapping template (Vorlage für die Anforderungszuordnung konfigurieren) nach der Funktion request (Anforderung):

export function request(ctx) {
    return {};
}

6.    Ändern Sie die Funktion, um ctx.args zurückzugeben:

export function request(ctx) {
    return ctx.args;
}

7.    Wählen Sie Create (Erstellen).

Weitere Informationen finden Sie unter Konfigurieren von Resolvern (VTL).

Erstellen eines neuen Testabonnements

1.    Öffnen Sie die AWS AppSync-Konsole.

2.    Wählen Sie im linken Navigationsbereich Queries (Abfragen) aus.

3.    Öffnen Sie auf der Seite Queries (Abfragen) Ihrer API eine doppelte Browserregisterkarte oder ein doppeltes Browserfenster.

4.    Löschen Sie in der doppelten Browserregisterkarte oder im -fenster den Inhalt des Abfrageeditors und geben Sie die folgende Abfrage ein:

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

5.    Wählen Sie die Wiedergabetaste (Abfrage ausführen). Die doppelte Browserregisterkarte oder das doppelte Browserfenster hat jetzt sowohl die createBook- als auch die createBookExt-Mutationen abonniert.

Erstellen einer neuen Testmutation

1.    Löschen Sie in der ursprünglichen Browserregisterkarte oder im ursprünglichen -fenster auf der Seite Queries (Abfragen) Ihrer API den Inhalt des Abfrageeditors. Geben Sie dann die folgende Abfrage ein:

mutation createBook($createbookinput: CreateBookInput!) {
  createBook(input: $createbookinput) {
    id
    title
  }
}

Löschen Sie im Abschnitt Query Variable (Abfragevariablen) unten im Editor den Inhalt und geben Sie die folgende Abfrage ein:

{
  "createbookinput": {
    "title": "My New Book"
  }
}

Die vorherige Abfrage erstellt ein neues Book (Buch) mit der createBook-Mutation.

2.    Wählen Sie die Wiedergabetaste (Abfrage ausführen).

3.    Beachten Sie in der doppelten Browserregisterkarte oder im fenster (Abonnement), dass der Subscriber das Update in Echtzeit erhält.

(Optional) Sehen Sie sich Beispielanwendungsfälle an

Beim Erstellen Ihrer Kunden-App und der Anwendung dieser Konzepte können Sie das folgende Beispiel für das Erstellen einer Airline-App verwenden, die Preise und Flugzeiten bereitstellt.

Die folgenden Schritte veranschaulichen, wie abonnierte Kunden benachrichtigt werden, wenn sich Flugdetails in einer DynamoDB-Tabelle ändern:

1.    Erstellen Sie eine AWS Lambda-Funktion, die einen DynamoDB-Stream als Trigger verwendet. Wenn die DynamoDB-Tabelle aktualisiert wird, ruft sie die Lambda-Funktion auf. Weitere Informationen finden Sie unter Verwenden von AWS Lambda mit Amazon DynamoDB.

2.    Fügen Sie in den Lambda-Funktionscode eine Logik ein, um die entsprechenden Updates zu filtern und einen Mutationsaufruf an AWS AppSync durchzuführen. Dies veranlasst AWS AppSync, Subscriber über das Abonnement zu benachrichtigen. Weitere Informationen finden Sie im Tutorial: AWS Lambda-Resolver.

3.    Fügen Sie in AWS AppSync ein neues Mutationsfeld (z. B. publishPrice) mit einem lokalen Resolver hinzu.

4.    Abonnieren Sie diese Mutation in einem Abonnementfeld (z. B. mit dem Namen onPriceUpdate).

Beispiel für ein Schema

type flightDetails {
  id: ID!
  src: String!
  destn: String!
  price : Int
}

type Mutation {
   # A local resolver targeting a None data source that publishes the message to subscribed clients.
  publishPrice(price: Int): flightDetails
}

type Subscription {
  # Notified whenever *publishPrice* is called.
  onPriceUpdate: Message
    @aws_subscribe(mutations: ["publishPrice"])
}

type Query { ... }

Weitere Informationen finden Sie unter Entwerfen Ihres Schemas.

5.    Erstellen Sie eine weitere AWS Lambda-Funktion, die einen DynamoDB-Stream als Aktivierung verwendet. Rufen Sie in dieser Funktion die publishPrice-Mutation auf. Da die publishPrice-Mutation über einen lokalen Resolver verfügt, werden die Daten nicht erneut in DynamoDB geschrieben. Mit dieser Methode können Sie AWS AppSync als PubSub-Broker verwenden.

Weitere Informationen und ein weiteres Beispiel für einen Anwendungsfall finden Sie im Tutorial: Lokale Resolver.


Verwandte Informationen

Resolver-Tutorials (VTL)

Ausführen von Abfragen und Mutationen

Referenz zur Resolver-Zuordnungsvorlage (VTL)