Comment informer les abonnés AWS AppSync des mises à jour de base de données externes n’étant pas effectuées par les mutations côté client ?

Lecture de 8 minute(s)
0

J'ai besoin que les clients de mon application se mettent à jour en temps réel lorsque des modifications de bases de données externes sont apportées et qui ne sont pas effectuées via des mutations côté client. Comment utiliser AWS AppSync pour informer les abonnés de ces modifications ?

Brève description

Utilisez les résolveurs locaux pour avertir les abonnés des modifications des bases de données externes en temps réel sans avoir besoin d'effectuer un appel de source de données. Par exemple, les résolveurs locaux sont utiles pour les applications qui mettent régulièrement à jour les informations, comme les applications 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 des 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 Conception d'une API GraphQL.

1.    Ouvrez la console AWS AppSync.

2.    Sélectionnez Create API (Créer une API).

3.    Sur la page Getting Started (Mise en route) sous Customize your API or import from Amazon DynamoDB (Personnaliser votre API ou importer depuis Amazon DynamoDB), sélectionnez Create with wizard (Créer avec l'assistant), puis Start (Démarrer).

4.    Sur la page Créer un modèle :
Sous Name the model(Nommer le modèle), entrez un nom pour votre modèle. Dans cet exemple, Book est le nom.
Sous Configure model fields (Configurer les champs de modèle), définissez les types de données de votre application. Pour cet exemple de configuration, gardez les noms de champs par défaut (id et title) et les types.
(Facultatif) Développez Configure model table (facultatif) (Configurer les champs de modèle [facultatif]) pour ajouter un index.
Choisissez Create (Créer).

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

Créer un abonnement test

1.    Ouvrez la console AWS AppSync.

2.    Naviguez vers la page Queries (Requêtes) de votre API, puis ouvrez une fenêtre ou un onglet de navigateur en double.

3.    Dans l'onglet ou la fenêtre du navigateur dupliqué, 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 de createBook.

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

5.    Dans l'onglet ou la fenêtre du navigateur d'origine, choisissez le bouton de lecture (Execute Query [Exécuter la requête]), puis createBook pour exécuter la mutation. Les résultats s’affichent dans les onglets ou fenêtres du navigateur d'origine et en double (abonnement).

6.    Fermez l'onglet ou la fenêtre du navigateur en double une fois que vous avez vu le comportement d'abonnement.

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

Le type de source de données None transmet le modèle de mappage des requêtes directement au modèle de mappage des réponses.

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

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

3.    Sélectionnez Create Data Source (Créer une source de données).

4.    Sur la page New Data Source (Nouvelle source de données), sous Create new Data Source (Créer une nouvelle source de données),effectuez les étapes suivantes :
Pour Data source name (Nom de la source de données), entrez un nom. Par exemple, real_time_data.
Pour Data source type (Type de source de données), sélectionnez None (Aucun).

5.    Choisissez Create (Créer).

Pour plus d'informations, consultez Attachement d'une source de données.

Ajouter une mutation au schéma

Créez une deuxième mutation à utiliser par un administrateur ou à activer lorsque vous mettez à jour le schéma.

Mettez à jour le schéma avec une mutation qui transmet les mises à jour des bases de données à la source de données de type None.

1.    Ouvrez la console AWS AppSync.

2.    Dans le panneau de navigation de gauche, choisissez Schema (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 Subscription {, localisez 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.    Choisissez Save Schema (enregistrer le schéma).

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

Attachez un résolveur à la mutation

1.    Ouvrez la console AWS AppSync.

2.    Sur la page Schema (Schéma) de votre API, sous Resolvers (Résolveurs), faites défiler jusqu'à Mutation. Ou, pour Filter types (Types de filtres), entrez Mutation.

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

4.    Sur la page Create new Resolver (Créer un nouveau résolveur) pour Data source name (Nom de la source de données), sélectionnez le nom de la source de données type None que vous avez créée. Par exemple, real_time_data.

5.    Sous Configurer le modèle de mappage de demandes, recherchez la fonction de demande :

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

6.    Modifiez la fonction pour renvoyer ctx.args :

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

7.    Choisissez Create (Créer).

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

Créer un nouvel abonnement test

1.    Ouvrez la console AWS AppSync.

2.    Dans le panneau de navigation de gauche, choisissez Queries (Requêtes).

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

4.    Dans l'onglet ou la fenêtre du 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 Play (Exécuter la requête). L'onglet ou la fenêtre de navigateur dupliqué est désormais abonné aux mutations createBook et createBookExt.

Créer une nouvelle mutation de test

1.    Dans l'onglet ou la fenêtre du navigateur d'origine, sur la page Queries (Requêtes) de votre API, effacer le contenu de l’éditeur de requêtes. Entrez ensuite 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 saisissez 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 Play (Exécuter la requête).

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

(Facultatif) Consultez l’exemple de cas d'utilisation

Lorsque vous créez votre application client et appliquez ces concepts, vous pouvez utiliser l'exemple de construction d’une application de compagnie aérienne qui fournit la tarification et les heures de vol.

Les étapes suivantes montrent comment informer les clients abonnés lorsque les détails d'un vol changent 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 appelle la fonction Lambda. Pour plus d'informations, consultez Utilisation d'AWS Lambda avec Amazon DynamoDB.

2.    Dans le code de la fonction Lambda, incluez la logique pour filtrer les mises à jour appropriées et effectuer un appel de mutation à AWS AppSync. Ainsi, AWS AppSync informe les abonnés par le biais de l'abonnement. Pour plus d'informations, consultez Didacticiel : résolveurs AWS Lambda.

3.    Dans AWS AppSync, ajoutez un nouveau champ de mutation (par exemple, nommé publishPrice) 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 Conception de votre schéma.

5.    Créez une autre fonction AWS Lambda qui utilise un flux DynamoDB comme déclencheur. Dans cette fonction, appelez la mutation publishPrice. Étant donné que la mutation publishPrice possède un résolveur local, les données ne sont pas de nouveau écrites dans DynamoDB. De cette façon, vous pouvez utiliser AWS AppSync comme agent PubSub.

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


Informations connexes

Tutoriels Resolveur (VTL)

Exécuter des requêtes et des mutations

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