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

Verwendung von Amazon SQS für Warteschlangen-Nachrichten mit AWS Lambda und Python

Zuletzt aktualisiert am November 6, 2020

Lesedauer: 9 Minuten

Wenn große Mengen an Nachrichten erwartet werden, kann es problematisch sein, sicherzustellen, dass sie alle empfangen werden. Eine Möglichkeit, diese Fallstricke zu umgehen, ist die Verwendung einer Nachrichtenwarteschlange, wie z. B. AWS SQS.

In diesem Beispiel erstellen Sie einen serverlosen Microservice auf AWS Lambda unter Verwendung dieser Python-Anwendung, die auf Github verfügbar ist die Folgendes verwendet Flaskund Serverless. Die Anwendung dient zwei Zwecken: Sie fügt Nachrichten zu AWS SQS und erleichtert dann den eigentlichen Versand durch Vonage SMS wie gewünscht.

Voraussetzungen

Vonage API-Konto

Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

Anweisungen zur Einrichtung

Klonen Sie die nexmo-community/sms-aws-sqs-python-receiver von GitHub, und navigieren Sie in das neu erstellte Verzeichnis, um fortzufahren.

Umwelt

umbenennen .env.default in .env und fügen Sie Werte hinzu zu VONAGE_API_KEY und VONAGE_API_SECRET die von Ihrem Vonage API Dashboard.

AWS-Einrichtung

Sie müssen Folgendes erstellen AWS-Anmeldeinformationen wie von Serverless angegeben. Aktualisieren Sie die .env Datei mit diesen.

Erstellen Sie außerdem eine neue SQS-FIFO-Warteschlange mit den Standardeinstellungen an, und aktualisieren Sie .env mit der URL der SQS-Warteschlange. Durch die Verwendung von FIFO wird sichergestellt, dass die Nachrichten in der Reihenfolge gesendet werden, in der sie gespeichert wurden.

Verwendung

Erstellen Sie zunächst im Stammverzeichnis des Projekts eine virtuelle Umgebung, die das Projekt enthält, während Sie fortfahren. Aktivieren Sie diese dann wie folgt:

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

Als Nächstes initialisieren Sie npm und folgen den Anweisungen, indem Sie die Standardeinstellungen auswählen. Es sei denn, Sie möchten etwas davon ändern. Installieren Sie außerdem mit npm die erforderlichen Abhängigkeiten für Dev, damit Serverless und Lambda mit der Flask-App arbeiten können.

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

Nun können Sie pip verwenden, um die erforderlichen Python-Abhängigkeiten zu installieren. Die Abhängigkeiten sind bereits in der requirements.txt aufgeführt, also weisen Sie pip an, sie zu verwenden.

pip install -r requirements.txt

Lokales Laufen

Wenn Sie die App lokal ausführen und testen möchten, bevor Sie sie auf AWS Lambda bereitstellen, können Sie sie mit dem folgenden Befehl bereitstellen:

sls wsgi serve

Standardmäßig wird die Anwendung unter http://localhost:5000. Ein Klick auf Ctrl+c wird sie geschlossen.

Auf Lambda bereitstellen

Wenn alle oben genannten Schritte erfolgreich abgeschlossen sind, können Sie nun mit Serverless verwenden, um die App in AWS Lambda bereitzustellen.

sls deploy

WICHTIG: Diese Anwendung enthält keine Authentifizierung für die Nutzung. Stellen Sie daher sicher, dass Sie ihr eine Authentifizierung voranstellen, um eine öffentliche Nutzung zu verhindern. Wenn Sie die Anwendung der Öffentlichkeit zugänglich machen, kann dies zu Nutzungsgebühren bei AWS und Vonage führen.

Verfügbare Endpunkte

Es gibt 4 URL-Endpunkte, die mit diesem Client verfügbar sind:

1 HTTP-GET-Anfrage an /

  • Führt keine Aktionen aus, bietet aber eine schnelle Möglichkeit zum Testen

2 HTTP POST-Anfrage an /add

  • Diese Aktion speichert die Nachricht in SQS.

  • Übergeben Sie einen POST mit einem JSON-Body wie dem folgenden. Ersetzen Sie die Platzhalter, die mit <> durch Ihre Daten.

  • Das Ergebnis enthält die SQS MessageId.

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

3 HTTP-GET-Anfrage an /get

  • Ruft die Nachricht aus der SQS-FIFO-Warteschlange ab.

  • Nach dem Empfang kann die ReceiptHandle kann verwendet werden, um sie aus der Warteschlange zu entfernen.

location=None, media_mode=relayed, archive_mode=manual

4 HTTP POST-Anfrage an /delete

  • Diese Aktion löscht die Nachricht aus SQS.

  • Übergeben Sie einen POST mit einem JSON-Body wie dem folgenden. Ersetzen Sie die Platzhalter, die mit <> durch Ihre Daten.

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

Rufen Sie die vom Bereitstellungsprozess bereitgestellte URL auf. Nachfolgend finden Sie einige Beispiele dafür, wie Musteranfragen aussehen können: (Ihre URL wird variieren.)

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

Der / Endpunkt gibt die generische Nachricht zurück.

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

Der add Endpunkt wird die SQS zurückgeben MessageId.

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

Der get Endpunkt wird eine Nachricht zur Verwendung zurückgeben.

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

Die delete Endpunkt löscht eine Nachricht aus SQS.

Deaktivieren von Virtualenv

Um die Virtualenv zu beenden, können Sie sie bei Bedarf deaktivieren.

deactivate

HINWEIS: Je nach Betriebssystem müssen Sie möglicherweise den Befehl virtualenv an den obigen Befehl anhängen.

Nächste Schritte

Wenn Sie Fragen haben oder Probleme auftreten, können Sie sich an @VonageDev auf Twitter oder in der Vonage-Gemeinschaft Slack-Team. Viel Glück!

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpVonage Ehemalige

Adam ist ein Entwickler und Berater, der gerne Ultraläufe absolviert, bloggt und anderen dabei hilft, Technologien zu zähmen, um erstaunliche Dinge zu erreichen, und der ein unstillbares Verlangen hat, Mentoren zu sein und zu helfen.