Direkt zum Inhalt

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

Verwende 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ühre 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

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

1.    Öffne die AWS AppSync-Konsole.

2.    Wähle API erstellen aus.

3.    Wähle auf der Seite Erste Schritte unter API anpassen oder aus Amazon DynamoDB importieren die Option Mit Assistenten erstellen und dann Start aus.

4.    Gehe auf der Seite Ein Modell erstellen wie folgt vor:
       Gib unter Modell benennen einen Namen für dein Modell ein. In diesem Beispiel ist Buch der Name.
       Definiere unter Modellfelder konfigurieren die Datentypen für deine App. Behalte für dieses Beispiel-Setup die Standardfeldnamen (id und Titel) und Typen bei.
       (Optional) Erweitere Modelltabelle konfigurieren (optional), um einen Index hinzuzufügen.
       Wähle Erstellen aus.

5.    Gib auf der Seite Ressourcen erstellen einen Namen für deine API ein. Wähle dann Erstellen aus. AWS AppSync erstellt deine API und öffnet die Seite Abfragen deiner API.

Erstellen eines Testabonnements

1.    Öffne die AWS AppSync-Konsole.

2.    Navigiere zur Seite Abfragen deiner API und öffne dann eine doppelte Browserregisterkarte oder ein doppeltes Browserfenster.

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

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

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

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

5.    Wähle in der ursprünglichen Browserregisterkarte oder im -fenster die Wiedergabetaste (Abfrage ausführen) und wähle 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 du das Abonnement gesehen hast, schließe die doppelte Browserregisterkarte oder das doppelte Browserfenster.

Erstellen einer Datenquelle vom Typ „None“

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

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

2.    Wähle im linken Navigationsbereich Datenquellen aus.

3.    Wähle Datenquelle erstellen aus.

4.    Führe auf der Seite Neue Datenquelle unter Neue Datenquelle erstellen die folgenden Schritte aus:
       Gib für Name der Datenquelle einen Namen ein. Zum Beispiel real_time_data.
       Wähle für Datenquellentyp die Option Kein aus.

5.    Wähle Erstellen aus.

Weitere Informationen findest du unter Anhängen einer Datenquelle.

Hinzufügen einer Mutation zu einem Schema

Erstelle eine zweite Mutation, die ein Administrator verwenden kann, oder die du auslösen kannst, wenn du das Schema aktualisierst.

Aktualisiere das Schema mit einer Mutation, die Datenbankaktualisierungen an die Datenquelle vom Typ Kein weitergibt.

1.    Öffne die AWS AppSync-Konsole.

2.    Wähle im linken Navigationsbereich Schema aus.

3.    Füge im Schemaeditor unter tTyp Mutation { den folgenden Befehl hinzu, um den neuen Mutationstyp für externe Updates zu erstellen:

createBookExt(input: CreateBookInput!): Book

4.    Suche im Schemaeditor unter Typ Abonnement { nach der folgenden Zeile:

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

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

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

6.    Wähle Schema speichern aus.

Weitere Informationen findest du unter Entwerfen deines Schemas.

Hinzufügen eines Resolver zur Mutation

1.    Öffne die AWS AppSync-Konsole.

2.    Scrolle auf der Seite Schema deiner API unter Resolver nach unten zu Mutation. Oder gib für Filtertypen Mutation ein.

3.    Weiter zu createBookExt(...): Buch, wähle unter Resolver die Option Anhängen aus.

4.    Wähle auf der Seite Neuen Resolver erstellen unter Datenquellenname den Namen der Datenquelle vom Typ Kein aus, die du erstellt hast. Zum Beispiel real_time_data.

5.    Suche unter Vorlage für die Anforderungszuordnung konfigurieren nach der Funktion Anforderung:

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

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

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

7.    Wähle Erstellen aus.

Weitere Informationen findest du unter Konfigurieren von Resolvern (VTL).

Erstellen eines neuen Testabonnements

1.    Öffne die AWS AppSync-Konsole.

2.    Wähle im linken Navigationsbereich Abfragen aus.

3.    Öffne auf der Seite Abfragen deiner API eine doppelte Browserregisterkarte oder ein doppeltes Browserfenster.

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

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

5.    Wähle die Wiedergabetaste aus (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ösche in der ursprünglichen Browserregisterkarte oder im ursprünglichen -fenster auf der Seite Abfragen deiner API den Inhalt des Abfrageeditors. Gib dann die folgende Abfrage ein:

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

Lösche im Abschnitt Abfragevariablen unten im Editor den Inhalt und gib die folgende Abfrage ein:

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

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

2.    Wähle die Wiedergabetaste aus (Abfrage ausführen).

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

(Optional) Beispielanwendungsfälle ansehen

Beim Erstellen deiner Kunden-App und der Anwendung dieser Konzepte kannst du 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.    Erstelle 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 findest du unter Verwenden von AWS Lambda mit Amazon DynamoDB.

2.    Füge 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 findest du unter Tutorial: AWS Lambda-Resolver.

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

4.    Abonniere 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 findest du unter Entwerfen deines Schemas.

5.    Erstelle eine weitere AWS Lambda-Funktion, die einen DynamoDB-Stream als Aktivierung verwendet. Rufe 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 kannst du AWS AppSync als PubSub-Broker verwenden.

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


Verwandte Informationen

Resolver-Tutorials (VTL)

Ausführen von Abfragen und Mutationen

Referenz zur Resolver-Zuordnungsvorlage (VTL)