https://a.storyblok.com/f/270183/29307/c3f7822801/blog_send-incoming-sms_1200x600.png

AWS LambdaとPythonを使ったメッセージキューイングにAmazon SQSを使う

最終更新日 November 6, 2020

所要時間:6 分

大量のメッセージを受信することが予想される場合、それらがすべて受信されることを保証することは問題になる可能性がある。このような落とし穴を回避する1つの方法は、以下のようなメッセージキューを使うことだ。 AWS SQS.

この例では、サーバーレスマイクロサービスを AWSラムダでサーバーレスマイクロサービスを作成します。 Githubで公開されているPythonアプリケーションで公開されている フラスコサーバーレス.このアプリケーションには2つの目的がある:アプリケーションは、メッセージを AWS SQSにメッセージを追加し Vonage SMSによる実際の送信を容易にする。

前提条件

セットアップ方法

クローン をクローンしてください。レポを GitHub からクローンし、新しく作成したディレクトリに移動します。

環境

名称変更 .env.default.envに変更し、値を VONAGE_API_KEYおよび VONAGE_API_SECRETに値を追加します。 Vonage API ダッシュボード.

AWSセットアップ

以下を作成する必要があります。 AWS認証情報を作成する必要があります。ファイル .envファイルを更新してください。

また、新しい キューキューを作成し .envを SQS キューの URL で更新します。FIFO を使用することで、メッセージが保存された順序で送信されるようになります。

使用方法

手始めに、プロジェクトのルート内にvirtualenvを作成し、その中にプロジェクトを格納する。そして、以下のようにアクティベートする:

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

次に、npmを初期化し、デフォルトを選択するプロンプトに従う。変更したいものがなければ。また、ServerlessとLambdaがFlaskアプリで動作するように、npmを使ってdevに必要な依存関係をインストールする。

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

これで、pipを使って必要なPythonの依存関係をインストールできる。依存関係はrequirements.txtに既に記載されているので、それを使うようにpipに指示してください。

pip install -r requirements.txt

地元で走る

AWS Lambdaにデプロイする前に、ローカルでアプリを実行してテストしたい場合は、以下のコマンドでアプリを提供できる:

sls wsgi serve

デフォルトでは http://localhost:5000.を押すとアプリは終了する。 Ctrl+cを押すと終了する。

ラムダへのデプロイ

上記がすべて成功したら、次は Serverlessを使ってアプリをAWS Lambdaにデプロイすることができる。

sls deploy

重要:このアプリケーションには、使用するための認証が含まれていません。そのため、一般利用を防ぐために、必ずその前に認証を追加してください。一般に公開したままにしておくと、AWSやVonageで利用料金が発生する可能性があります。

利用可能なエンドポイント

このクライアントでは、4つのURLエンドポイントが利用可能です:

1 HTTP GETリクエスト /

  • 何のアクションも実行しないが、素早くテストする方法を提供する。

2 HTTP POSTリクエスト /add

  • このアクションはメッセージをSQSに保存する。

  • 以下のようなJSONボディのPOSTを渡す。で示されるプレースホルダを <>で示されたプレースホルダをあなたのデータで置き換えます。

  • 結果にはSQSが含まれる MessageId.

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

3 HTTP GETリクエスト /get

  • SQS FIFO キューからメッセージを取得します。

  • 一度受信すると ReceiptHandleを使えばキューから削除できる。

location=None, media_mode=relayed, archive_mode=manual

4 HTTP POSTリクエスト /delete

  • このアクションは SQS からメッセージを削除します。

  • 以下のようなJSONボディのPOSTを渡す。で示されるプレースホルダを <>で示されたプレースホルダをあなたのデータで置き換えます。

{
    "receipt_handle": "<your_receipt_handle>",
}
例を挙げよう:

デプロイプロセスが提供するURLにアクセスする。以下に、リクエストの例をいくつか示します:(URLは異なります。)

ゲット https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/

エンドポイントは /エンドポイントは一般的なメッセージを返します。

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

エンドポイントは addエンドポイントはSQS MessageId.

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

エンドポイントは getエンドポイントは、使用するためのメッセージを返します。

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

この deleteを終了すると、SQS からメッセージが削除されます。

Virtualenvの停止

virtualenvを終了するには、必要であれば解除することができる。

deactivate

注:OSによっては、上記のコマンドの前に virtualenvを付加する必要がある。

次のステップ

何か質問があったり、問題が発生した場合は、以下までご連絡ください。 までご連絡ください。にご連絡いただくか VonageコミュニティSlackチームにお問い合わせください。頑張ってください。

シェア:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam Culpヴォネージの卒業生

アダムは開発者兼コンサルタントで、ウルトラランニング、ブログ、そして指導と支援への飽くなき欲求を持ちながら、他の人々が素晴らしいことを成し遂げるためにテクノロジーを手なずけるのを助けることを楽しんでいる。