https://d226lax1qjow5r.cloudfront.net/blog/blogposts/using-amazon-sqs-for-queuing-messages-using-aws-lambda-and-python/Blog_Send-Incoming-SMS_1200x600.png

Utiliser Amazon SQS pour la mise en file d'attente des messages en utilisant AWS Lambda et Python

Publié le November 6, 2020

Temps de lecture : 9 minutes

Lorsque l'on s'attend à recevoir un grand nombre de messages, il peut être problématique de s'assurer qu'ils sont tous reçus. L'utilisation d'une file d'attente de messages, telle qu'AWS SQS, permet de contourner ces écueils. AWS SQS.

Dans cet exemple, vous allez créer un microservice sans serveur sur AWS Lambda en utilisant cette application Python disponible sur Github qui utilise Flasket Serverless. L'application répond à deux objectifs : Elle ajoute des messages à AWS SQS et facilite ensuite l'envoi proprement dit par l'intermédiaire de Vonage SMS comme demandé.

Conditions préalables

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

Instructions d'installation

Clonez le fichier nexmo-community/sms-aws-sqs-python-receiver depuis GitHub, et naviguez dans le répertoire nouvellement créé pour continuer.

Environnement

Renommer .env.default en .env et ajouter des valeurs à VONAGE_API_KEY et VONAGE_API_SECRET fournies par votre Tableau de bord de l'API Vonage.

Configuration d'AWS

Vous devez créer informations d'identification AWS comme indiqué par Serverless. Mettez à jour le fichier .env avec ces informations.

Créez également une nouvelle file d'attente file d'attente SQS FIFO en utilisant les paramètres par défaut, et mettez à jour .env avec l'URL de la file d'attente SQS. L'utilisation de FIFO garantit que les messages sont envoyés dans l'ordre dans lequel ils ont été stockés.

Utilisation

Pour commencer, créez une virtualenv à partir de la racine du projet pour contenir le projet au fur et à mesure que vous avancez. Activez-la ensuite comme suit :

virtualenv venv --python=python3 source venv/bin/activate

Ensuite, initialisez npm et suivez les instructions en sélectionnant les valeurs par défaut. À moins que vous ne souhaitiez en changer. Utilisez également npm pour installer les dépendances nécessaires pour dev afin de permettre à Serverless et Lambda de fonctionner avec l'application Flask.

npm init npm install --save-dev serverless-wsgi serverless-python-requirements

Vous pouvez maintenant utiliser pip pour installer les dépendances Python nécessaires. Les dépendances sont déjà listées dans le fichier requirements.txt, demandez donc à pip de les utiliser.

pip install -r requirements.txt

La course au niveau local

Si vous souhaitez exécuter l'application localement et tester les choses, avant de la déployer sur AWS Lambda, vous pouvez la servir avec la commande suivante :

sls wsgi serve

Par défaut, l'application sera servie à l'adresse http://localhost:5000. En appuyant sur Ctrl+c la fermera.

Déployer vers Lambda

Une fois toutes les étapes ci-dessus terminées avec succès, vous pouvez maintenant utiliser Serverless pour déployer l'application sur AWS Lambda.

sls deploy

IMPORTANT : Cette application ne contient aucune authentification pour l'utilisation. Veillez donc à ajouter une authentification devant cette application afin d'empêcher son utilisation par le public. Si vous la laissez ouverte au public, vous risquez de devoir payer des frais d'utilisation à AWS et à Vonage.

Critères d'évaluation disponibles

Ce client dispose de 4 points d'extrémité URL :

1 Requête HTTP GET à /

  • Il n'effectue aucune action, mais constitue un moyen rapide de tester l'efficacité de l'application.

2 Demande HTTP POST à /add

  • Cette action stocke le message dans le SQS.

  • Passez un POST avec un corps JSON comme le suivant. Remplacez les espaces réservés, indiqués par <> par vos données.

  • Le résultat contient le SQS MessageId.

{
    "from": "<your_name_or_number>",
    "message": "<sms_message_contents>",
    "to": "<recipients_number>"
}

3 Demande HTTP GET à /get

  • Récupère le message de la file d'attente FIFO de SQS.

  • Une fois reçue, la touche ReceiptHandle peut être utilisée pour le retirer de la file d'attente.

location=None, media_mode=relayed, archive_mode=manual

4 Demande HTTP POST à /delete

  • Cette action supprime le message de SQS.

  • Passez un POST avec un corps JSON comme le suivant. Remplacez les espaces réservés, indiqués par <> par vos données.

{
    "receipt_handle": "<your_receipt_handle>",
}
Exemples :

Accédez à l'URL fournie par le processus de déploiement. Vous trouverez ci-dessous des exemples de requêtes types : (Votre URL peut varier.)

GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/

Le point d'arrivée / renvoie le message générique.

POST https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/add

Le point de terminaison add renverra le code SQS MessageId.

GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/get

Le point de terminaison get renverra un message à utiliser.

GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/delete

Le delete supprimera un message de SQS.

Désactivation de Virtualenv

Pour quitter la virtualenv, vous pouvez la désactiver si vous le souhaitez.

deactivate

REMARQUE : Selon le système d'exploitation, il peut être nécessaire de faire précéder la commande ci-dessus de la mention virtualenv à la commande ci-dessus.

Prochaines étapes

Si vous avez des questions ou rencontrez des problèmes, vous pouvez contacter @VonageDev sur Twitter ou vous renseigner dans la Communauté Vonage de Vonage. Bonne chance.

Partager:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpAnciens de Vonage

Adam est un développeur et un consultant qui aime l'ultra-course, les blogs, et qui aide les autres à apprivoiser la technologie pour accomplir des choses étonnantes avec un désir insatiable de mentorat et d'aide.