https://d226lax1qjow5r.cloudfront.net/blog/blogposts/using-a-message-queue-with-sms-for-throughput-limitations/Blog_Send-Outgoing-SMS_1200x600.png

Utilisation d'une file d'attente de messages avec le SMS en cas de limitation du débit

Publié le May 5, 2021

Temps de lecture : 9 minutes

Dans certains pays, la limitation du débit des SMS et la lenteur des requêtes (parfois aussi peu qu'une requête par seconde) compliquent l'envoi en masse. L'utilisation d'une file d'attente de messages, telle que AWS SQS.

Pour cet exemple, vous créez un microservice sans serveur sur AWS Lambda à l'aide de 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-sender 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 dans 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. La FIFO garantit que les messages sont envoyés dans l'ordre dans lequel ils ont été stockés.

Utilisation

Pour commencer, créez un fichier virtualenv à la racine du projet pour contenir le projet. Ensuite, activez-le comme suit :

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

Ensuite, initialisez npm et suivez les invites 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 dans le fichier requirements.txt, demandez donc à pip de l'utiliser.

pip install -r requirements.txt

Locaux de course à pied

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 est servie à l'adresse http://localhost:5000. Vous devez appuyer sur Ctrl+c pour la fermer.

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 3 points d'extrémité URL :

1 demande GET à /

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

2 Demande 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 GET à /process

  • Lance le processus d'envoi.

  • Récupère les messages de la file d'attente SQS FIFO.

  • Se connecte à Nexmo et envoie le SMS.

location=None, media_mode=relayed, archive_mode=manual
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 renvoie l'information SQS MessageId.

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

Le point d'arrivée process renvoie un message indiquant que l'envoi a réussi.

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

Dans cet exemple, l'application contient un /process qui peut être appelé par une requête HTTP GET à intervalles réguliers. Alternativement, le code dans /process pourrait être placé dans une fonction Lambda distincte et appelé directement à partir des événements planifiés de CloudWatch au lieu d'une requête HTTP GET.

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.