
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 einer Nachrichtenwarteschlange mit SMS bei Durchsatzbeschränkungen
In einigen Ländern stellen der begrenzte Durchsatz von SMS und die langsamen Abfragezeiten (manchmal bis zu einer Anfrage pro Sekunde) eine zusätzliche Herausforderung für den Massenversand dar. Eine Möglichkeit, diese Beschränkungen 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)Pip
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-sender 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 Sie auf Ihrem Dashboard der Vonage API.
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. FIFO stellt sicher, dass die Nachrichten in der Reihenfolge gesendet werden, in der sie gespeichert wurden.
Verwendung
Um zu beginnen, erstellen Sie eine virtualenv in der Projektwurzel, um das Projekt zu enthalten. Dann aktivieren Sie es wie folgt:
Als Nächstes initialisieren Sie npm und folgen den Aufforderungen zur Auswahl der Standardeinstellungen, sofern Sie diese nicht ändern möchten. 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 befinden sich in der requirements.txt, also weisen Sie pip an, diese 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:
In der Standardeinstellung wird die App unter http://localhost:5000 angezeigt. Sie drücken Ctrl+c um sie zu schließen.
Auf Lambda bereitstellen
Wenn alle oben genannten Schritte erfolgreich abgeschlossen sind, können Sie nun 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 3 URL-Endpunkte, die mit diesem Client verfügbar sind:
1 GET-Anfrage an /
Führt keine Aktionen aus, bietet aber eine schnelle Möglichkeit zum Testen
2 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 GET-Anfrage an /process
Startet den Sendevorgang.
Ruft Nachrichten aus der SQS-FIFO-Warteschlange ab.
Stellt eine Verbindung zu Nexmo her und sendet die SMS.
location=None, media_mode=relayed, archive_mode=manual Beispiele:
Rufen Sie die vom Bereitstellungsprozess bereitgestellte URL auf. Nachfolgend finden Sie einige Beispiele dafür, wie Musteranfragen aussehen können: (Ihre URL kann abweichen.)
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 gibt die SQS MessageId.
GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/process
Der process Endpunkt gibt eine Nachricht zurück, die einen erfolgreichen Versand anzeigt.
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
In diesem Beispiel enthält die Anwendung einen /process Endpunkt, der in regelmäßigen Abständen mit einer HTTP-GET-Anforderung aufgerufen werden kann. Alternativ dazu könnte der Code in /process in eine separate Lambda-Funktion eingefügt und direkt von geplanten CloudWatch-Ereignissen anstelle einer HTTP-GET-Anfrage aufgerufen werden.
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!
