Tutoriel : Création d'une application de WebSocket chat avec a WebSocket API, Lambda et DynamoDB - APIPasserelle Amazon

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Tutoriel : Création d'une application de WebSocket chat avec a WebSocket API, Lambda et DynamoDB

Dans ce didacticiel, vous allez créer une application de chat sans serveur avec un WebSocket API. Avec un WebSocket API, vous pouvez favoriser la communication bidirectionnelle entre les clients. Les clients peuvent recevoir des messages sans avoir à rechercher les mises à jour.

Ce didacticiel vous prendra environ 30 minutes. Tout d'abord, vous allez utiliser un AWS CloudFormation modèle pour créer des fonctions Lambda qui géreront les API demandes, ainsi qu'une table DynamoDB qui stocke votre client. IDs Ensuite, vous utiliserez la console API Gateway pour créer une interface WebSocket API qui s'intègre à vos fonctions Lambda. Enfin, vous allez tester votre appareil API pour vérifier que les messages sont envoyés et reçus.

Vue d'ensemble de l'architecture API que vous créez dans ce didacticiel.

Pour suivre ce didacticiel, vous avez besoin d'un AWS compte et d'un AWS Identity and Access Management utilisateur disposant d'un accès à la console. Pour plus d’informations, consultez Configuration pour utiliser API Gateway.

Vous devez également vous wscat connecter à votreAPI. Pour plus d’informations, consultez wscatÀ utiliser pour se connecter à une WebSocket API et y envoyer des messages.

Étape 1 : Création de fonctions Lambda et d'une table DynamoDB

Téléchargez et décompressez le modèle de création d'application pour AWS CloudFormation. Vous allez utiliser ce modèle pour créer une table Amazon DynamoDB afin de stocker le client de votre application. IDs Chaque client connecté possède un identifiant unique que nous utiliserons comme clé de partition de la table. Ce modèle crée également des fonctions Lambda qui mettent à jour vos connexions client dans DynamoDB et gèrent l'envoi de messages aux clients connectés.

Pour créer une AWS CloudFormation pile
  1. Ouvrez la AWS CloudFormation console à l'adresse https://console.aws.amazon.com/cloudformation.

  2. Choisissez Créer une pile, puis choisissez Avec de nouvelles ressources (standard).

  3. Dans Spécifier le modèle, choisissez Charger un modèle de fichier.

  4. Sélectionnez le modèle que vous avez téléchargé.

  5. Choisissez Suivant.

  6. Pour Nom de la pile, saisissez websocket-api-chat-app-tutorial, puis choisissez Suivant.

  7. Pour Configurer les options de pile, choisissez Suivant.

  8. Pour les fonctionnalités, reconnaissez que AWS CloudFormation vous pouvez créer IAM des ressources dans votre compte.

  9. Sélectionnez Envoyer.

AWS CloudFormation fournit les ressources spécifiées dans le modèle. La fin du provisionnement de vos ressources peut prendre quelques minutes. Lorsque le statut de votre AWS CloudFormation pile est CREATE_ COMPLETE, vous êtes prêt à passer à l'étape suivante.

Étape 2 : Création d'un WebSocket API

Vous allez créer un WebSocket API pour gérer les connexions client et acheminer les demandes vers les fonctions Lambda que vous avez créées à l'étape 1.

Pour créer un WebSocket API
  1. Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.

  2. Choisissez Create API. Ensuite WebSocket API, choisissez Build.

  3. Pour APIle nom, entrezwebsocket-chat-app-tutorial.

  4. Pour Route selction expression (Expression de sélection d'itinéraire), entrez request.body.action. L'expression de sélection d'itinéraire détermine l'itinéraire invoqué par API Gateway lorsqu'un client envoie un message.

  5. Choisissez Suivant.

  6. Pour Predefined routes (Routes prédéfinies), choisissez Add $connect (Ajouter $connect), Add $disconnect (Ajouter $disconnect) et Add $default (Ajouter $default). Les routes $connect et $disconnect sont des routes spéciales que API Gateway invoque automatiquement lorsqu'un client se connecte ou se déconnecte d'un. API APIGateway invoque la $default route lorsqu'aucune autre route ne correspond à une demande.

  7. Pour Custom routes (Routes personnalisées), choisissez Add custom route (Ajouter une route personnalisée). Pour Route key (Clé de route), entrez sendmessage. Cette route personnalisée gère les messages envoyés aux clients connectés.

  8. Choisissez Suivant.

  9. Sous Attach integrations (Attacher les intégrations), pour chaque route et type d'intégration, choisissez Lambda.

    Pour Lambda, choisissez la fonction Lambda correspondante que vous avez créée à l'étape 1. AWS CloudFormation Le nom de chaque fonction correspond à une route. Par exemple, pour la route $connect, choisissez la fonction nommée websocket-chat-app-tutorial-ConnectHandler.

  10. Passez en revue la scène créée par API Gateway pour vous. Par défaut, API Gateway crée un nom de stage production et vous déploie automatiquement sur API ce stage. Choisissez Suivant.

  11. Choisissez Create and deploy (Créer et déployer).

Étape 3 : Testez votre API

Ensuite, vous allez tester votre API appareil pour vous assurer qu'il fonctionne correctement. Utilisez la wscat commande pour vous connecter auAPI.

Pour obtenir l'invocation URL de votre API
  1. Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.

  2. Choisissez votre API.

  3. Choisissez Stages (Étapes), puis production.

  4. Notez le API vôtre WebSocket URL. Ils URL devraient ressembler àwss://abcdef123.execute-api.us-east-2.amazonaws.com/production.

Pour vous connecter à votre API
  1. Utilisez la commande suivante pour vous connecter à votreAPI. Lorsque vous vous connectez à votreAPI, API Gateway invoque l'$connectitinéraire. Lorsque cette route est appelée, il appelle une fonction Lambda qui stocke votre ID de connexion dans DynamoDB.

    wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
    Connected (press CTRL+C to quit)
  2. Ouvrez un nouveau terminal et exécutez à nouveau la commande wscat avec les paramètres suivants.

    wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
    Connected (press CTRL+C to quit)

    Vous disposez ainsi de deux clients connectés capables d'échanger des messages.

Pour envoyer un message
  • APIGateway détermine l'itinéraire à invoquer en fonction API de votre expression de sélection d'itinéraire. L'expression API de votre sélection d'itinéraire est$request.body.action. Par conséquent, API Gateway invoque la sendmessage route lorsque vous envoyez le message suivant :

    {"action": "sendmessage", "message": "hello, everyone!"}

    La fonction Lambda associée à la route invoquée collecte le client auprès de IDs DynamoDB. Ensuite, la fonction appelle le API Gateway Management API et envoie le message à ces clients. Tous les clients connectés reçoivent le message suivant :

    < hello, everyone!
Pour invoquer la route $default API de votre choix
  • APIGateway invoque votre API itinéraire par défaut lorsqu'un client envoie un message qui ne correspond pas aux itinéraires que vous avez définis. La fonction Lambda associée à la $default route utilise la gestion des API passerelles API pour envoyer au client des informations sur sa connexion.

    test
    Use the sendmessage route to send a message. Your info: {"ConnectedAt":"2022-01-25T18:50:04.673Z","Identity":{"SourceIp":"192.0.2.1","UserAgent":null},"LastActiveAt":"2022-01-25T18:50:07.642Z","connectionID":"Mg_ugfpqPHcCIVA="}
Pour vous déconnecter de votre API
  • Appuyez CTRL+C pour vous déconnecter de votreAPI. Lorsqu'un client se déconnecte de votre compteAPI, API Gateway invoque votre itinéraireAPI. $disconnect L'intégration Lambda pour votre $disconnect itinéraire supprime API l'ID de connexion de DynamoDB.

Étape 4 : Nettoyer

Pour éviter des coûts inutiles, supprimez les ressources que vous avez créées dans le cadre de ce tutoriel. Les étapes suivantes suppriment votre AWS CloudFormation pile et WebSocket API.

Pour supprimer un WebSocket API
  1. Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.

  2. Sur la APIspage, sélectionnez votre websocket-chat-app-tutorialAPI. Choisissez Actions, choisissez Supprimer, puis confirmez votre choix.

Pour supprimer une AWS CloudFormation pile
  1. Ouvrez la AWS CloudFormation console à l'adresse https://console.aws.amazon.com/cloudformation.

  2. Sélectionnez votre AWS CloudFormation pile.

  3. Choisissez Supprimer, puis confirmez votre choix.

Prochaines étapes : Automatisez avec AWS CloudFormation

Vous pouvez automatiser la création et le nettoyage de toutes les AWS ressources impliquées dans ce didacticiel. Pour un AWS CloudFormation modèle qui crée cette ressource API et toutes les ressources associées, consultez ws-chat-app.yaml.