Passer au contenu

Comment informer les abonnés AWS AppSync des mises à jour de la base de données externe non effectuées via des mutations côté client ?

Lecture de 8 minute(s)
0

J'ai besoin que les clients de mon application soient mis à jour en temps réel lorsque des modifications de la base de données externe sont effectuées sans passer par des mutations côté client. Comment utiliser AWS AppSync pour informer les abonnés de ces modifications ?

Brève description

Utilisez des résolveurs locaux pour informer les abonnés des modifications apportées à la base de données externe en temps réel, sans effectuer d'appel à la source de données. Par exemple, les résolveurs locaux sont utiles pour les applications qui mettent régulièrement à jour les informations, comme l'application d'une compagnie aérienne.

Suivez les étapes de la section Résolution pour créer un exemple d'API GraphQL. L'API GraphQL met à jour les abonnés en temps réel lorsque les données sont écrites dans une source de données de table Amazon DynamoDB.

Résolution

Créer une API GraphQL à l'aide de l'assistant

Utilisez l'assistant de schéma guidé AWS AppSync pour créer une nouvelle API GraphQL. Pour plus d'informations, consultez la section Conception d'une API GraphQL.

1.    Ouvrez la console AWS AppSync.

2.    Sélectionnez Créer l'API.

3.    Sur la page Prise en main, sous Personnaliser votre API ou importer depuis Amazon DynamoDB, sélectionnez Créer avec un assistant, puis Démarrer.

4.    Sur la page Créer un modèle :
       Dans Nommer le modèle, entrez un nom pour votre modèle. Dans cet exemple, Livre est le nom.
       Dans Configurer les champs du modèle, définissez les types de données pour votre application. Pour cet exemple de configuration, conservez les noms de champs par défaut (identifiant et titre) et les types.
       (Facultatif) Développez Configurer la table de modèles (facultatif) pour ajouter un index.
       Sélectionnez Créer.

5.    Sur la page Créer des ressources, entrez un nom pour votre API. Puis, sélectionnez Créer. AWS AppSync crée votre API et ouvre la page Requêtes de votre API.

Créer un abonnement de test

1.    Ouvrez la console AWS AppSync.

2.    Accédez à la page Requêtes de votre API, puis ouvrez un onglet ou une fenêtre de navigateur en double.

3.    Dans l'onglet ou la fenêtre de navigateur en double, effacez le contenu de l'éditeur de requêtes et saisissez la requête suivante :

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

La requête précédente crée un abonnement aux mutations createBook.

4.    Cliquez sur le bouton de lecture (Exécuter la requête). L'onglet ou la fenêtre de navigateur en double est abonné aux mutations createBook.

5.    Dans l'onglet ou la fenêtre de navigateur d'origine, cliquez sur le bouton de lecture (Exécuter la requête), puis sélectionnez CreateBook pour exécuter la mutation. Les résultats s'affichent dans les onglets ou les fenêtres de navigateur d'origine et en double (abonnement).

6.    Une fois que l'abonnement s'affiche, fermez l'onglet ou la fenêtre de navigateur en double.

Créer une source de données de type Aucun

Le type de source de données Aucun transmet le modèle de mappage de requête directement au modèle de mappage de réponse.

1.    Dans l'onglet ou la fenêtre de navigateur d’origine, ouvrez la console AWS AppSync.

2.    Dans le volet de navigation de gauche, sélectionnez Sources de données.

3.    Sélectionnez Créer une source de données.

4.    Sur la page Nouvelle source de données, sous Créer une nouvelle source de données, effectuez les étapes suivantes :
       Pour Nom de la source de données, entrez un nom. Par exemple, real_time_data.
       Pour Type de source de données, choisissez Aucun.

5.    Sélectionnez Créer.

Pour plus d'informations, consultez la section Association d’une source de données.

Ajouter une mutation au schéma

Créez une deuxième mutation qui pourra être utilisée par un administrateur ou activée lorsque vous mettrez à jour le schéma.

Mettez à jour le schéma à l'aide d'une mutation qui transmet les mises à jour de la base de données à la source de données de type Aucun.

1.    Ouvrez la console AWS AppSync.

2.    Dans le volet de navigation gauche, choisissez Schéma.

3.    Dans l'éditeur de schéma, sous type Mutation {, ajoutez la commande suivante pour créer le nouveau type de mutation pour les mises à jour externes :

createBookExt(input: CreateBookInput!): Book

4.    Dans l'éditeur de schéma, sous type Abonnement {, recherchez la ligne suivante :

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

5.    Ajoutez « CreateBookExt » à la liste des mutations :

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

6.    Sélectionnez Enregistrer le schéma.

Pour plus d'informations, consultez la section Conception de votre schéma.

Associer un résolveur à la mutation

1.    Ouvrez la console AWS AppSync.

2.    Sur la page Schéma de votre API, sous Résolveurs, faites défiler l'écran jusqu'à Mutation. Ou, pour Types de filtres, saisissez Mutation.

3.    À côté de createBookExt(...) : Livre, sous Résolveur, choisissez Associer.

4.    Sur la page Créer un nouveau résolveur, dans Nom de la source de données, choisissez le nom de la source de données de type Aucun que vous avez créée. Par exemple, real_time_data.

5.    Sous Configurer le modèle de mappage de requête, recherchez la fonction de requête :

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

6.    Modifiez la fonction pour renvoyer ctx.args :

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

7.    Sélectionnez Créer.

Pour plus d'informations, consultez la section Configuration des résolveurs (VTL).

Créer un nouvel abonnement de test

1.    Ouvrez la console AWS AppSync.

2.    Dans le volet de navigation gauche, sélectionnez Requêtes.

3.    Sur la page Requêtes de votre API, ouvrez un onglet ou une fenêtre de navigateur en double.

4.    Dans l'onglet ou la fenêtre de navigateur en double, effacez le contenu de l'éditeur de requêtes et saisissez la requête suivante :

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

5.    Cliquez sur le bouton de lecture (Exécuter la requête). L'onglet ou la fenêtre de navigateur en double est désormais abonné aux mutations createBook et createBookExt.

Créer une nouvelle mutation de test

1.    Dans l'onglet ou la fenêtre de navigateur d’origine, sur la page Requêtes de votre API, effacez le contenu de l'éditeur de requêtes. Ensuite, entrez la requête suivante :

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

Dans la section Variables de requête en bas de l'éditeur, effacez le contenu et insérez la requête suivante :

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

La requête précédente crée un nouveau livre avec la mutation createBook.

2.    Cliquez sur le bouton de lecture (Exécuter la requête).

3.    Dans l'onglet ou la fenêtre de navigateur en double (abonnement), notez que l'abonné reçoit la mise à jour en temps réel.

(Facultatif) Consulter des exemples de cas d'utilisation

Lorsque vous créez votre application client et appliquez ces concepts, vous pouvez utiliser l'exemple suivant pour créer une application de compagnie aérienne qui indique les prix et les horaires de vol.

Les étapes suivantes montrent comment informer les clients abonnés lorsque les détails d'un vol sont modifiés dans une table DynamoDB :

1.    Créez une fonction AWS Lambda qui utilise un flux DynamoDB comme déclencheur. Lorsque la table DynamoDB est mise à jour, elle invoque la fonction Lambda. Pour plus d'informations, consultez la section Utilisation d'AWS Lambda avec Amazon DynamoDB.

2.    Dans le code de la fonction Lambda, incluez une logique permettant de filtrer les mises à jour appropriées et d'effectuer un appel de mutation à AWS AppSync. AWS AppSync envoie alors une notification aux abonnés via l'abonnement. Pour plus d'informations, consultez la section Didacticiel : Résolveurs AWS Lambda.

3.    Dans AWS AppSync, ajoutez un nouveau champ de mutation (nommé publishPrice, par exemple) avec un résolveur local.

4.    Abonnez-vous à cette mutation dans un champ d'abonnement (par exemple, nommé onPriceUpdate).

Exemple de schéma

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 { ... }

Pour plus d'informations, consultez la section Conception de votre schéma.

5.    Créez une autre fonction AWS Lambda qui utilise un flux DynamoDB comme activation. Dans cette fonction, appelez la mutation publishPrice. Comme la mutation publishPrice utilise un résolveur local, les données ne sont pas réécrites dans DynamoDB. Avec cette méthode, vous pouvez utiliser AWS AppSync en tant qu’exécutant PubSub.

Pour plus d'informations et un autre exemple de cas d'utilisation, consultez la section Didacticiel : Résolveurs locaux.


Informations connexes

Didacticiels sur Resolver (VTL)

Exécuter des requêtes et des mutations

Référence du modèle de mappage du résolveur (VTL)

AWS OFFICIELA mis à jour il y a 3 ans