
Teilen Sie:
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.
Verwendung von Amazon SQS für Warteschlangen-Nachrichten mit AWS Lambda und Python
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
Python 3.8 (aktualisieren
serverless.ymlwenn eine höhere Version gewünscht wird)Node.js und npm
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:
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.
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.
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:
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.
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
ReceiptHandlekann verwendet werden, um sie aus der Warteschlange zu entfernen.
location=None, media_mode=relayed, archive_mode=manual4 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.
HINWEIS: Je nach Betriebssystem müssen Sie möglicherweise den Befehl
virtualenvan 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!
