以前、Laravelを利用してSQSメッセージを送信する方法を解説しました。こちらの続きです。
SQSメッセージを送信するだけで機能完了することはほぼ無いことだと思います。メッセージを送信した先で、何らかの処理を実行するために用います。
そこでよく使われるのが、Lambdaです。
SQSメッセージをトリガーにして、Lambdaを起動させるまでを簡潔に解説していきます。
0. GOAL
今回のGOALは、SQSのメッセージ送信をトリガーにして、Lambdaを起動させる。そして、起動したことをCloudWatchで確認。
1. Lambdaを作成
1-1. Lambda関数を新規作成
特別な設定は不要です。 今回、Python3.7 で作成していきます。
1-2. Roleを設定
Roleを設定していきます。 SQSをポーリングして、メッセージを受信できるRoleを設定します。
AWSLambdaSQSQueueExecutionRole
を追加します。
1-3. 関数のコードを設定
import json def lambda_handler(event, context): for record in event['Records']: payload=record["body"] print(str(payload))
CloudWatchへ、SQSのメッセージを送信するだけなので、record["body"]
をprintする。だけの単純な処理です。
2. SQSメッセージ送信をトリガーに設定する
トリガーをLmabdaに設定します。
- SQSを選択
- キューを指定
キューを設定することで、キューにメッセージが受信することをトリガーにLambdaが起動されます。
CloudWatchにSQSメッセージがprintされています。確認してみて下さい。
Q. LambdaはSQSメッセージをどのように判定しているのか.
今回、SQSはメッセージを送信していません。その上で、LambdaではトリガーにSQSのキューを指定しただけです。
結論から言うと、LambdaはSQSのメッセージを定期的に確認しにいってます。これをポーリングと言います。
下記ブログで詳しく書いてありましたので、参照してみて下さい。