🖥
#AWS で SQSのメッセージ受信をトリガーに lambda で関数を実行させる手順
この例ではlambdaとSQSのコンソールを行き来して作業する
参考
書いた後に気づいたけど、こちらの記事がずっと詳しい。
AWS LambdaがSQSをイベントソースとしてサポートしました! | DevelopersIO
HELP
AWS Lambda を Amazon SQS に使用する - AWS Lambda
AWS lambda が SQS を使えるように、実行ロールを作成しておく
#AWS Lambda の実行ロールを作成する ( SQSの実行権限を与えて見る例 ) · Issue #2496 · YumaInaura/YumaInaura
SQSのキューを作成する
Lambda の関数を選んで設定に進む
Lambdaに SQS が使える実行ロールを与えておく
Lambda の設定で「トリガーを追加」を選ぶ
トリガーに SQSを選ぶ
SQSのキューを選ぶ
SQSのコンソールを開いてキューを見ると、Lambdaが設定されているのがわかる
SQS のキューでメッセージの送信をする
どうやら一瞬でメッセージが処理されるようで、すぐに一覧画面を更新しても「利用可能メッセージ」の件数さえ、増えるのは分からなかった。
キュー実行に遅延時間を与えてやれば、動きがわかるかもしれない。
Lambdaでモニタリング / CloudWatchのログなどを確認して、履歴を見る
メッセージが処理されているのが分かる。
LambdaでSQSのメッセージ内容はどうやって扱うの?
Hello world のテンプレートに event
という表記が見える。
そもそも各言語で event を簡単に参照できるっぽい?
当方Lambda未経験者につき。
Ruby の例
require 'json'
def lambda_handler(event:, context:)
# TODO implement
{ statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end
SQSのメッセージイベントはこんなん
{
"Records": [
{
"messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
"receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
"body": "test",
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1545082649183",
"SenderId": "AIDAIENQZJOLO23YVJ4VO",
"ApproximateFirstReceiveTimestamp": "1545082649185"
},
"messageAttributes": {},
"md5OfBody": "098f6bcd4621d373cade4e832627b4f6",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue",
"awsRegion": "us-east-2"
},
{
"messageId": "2e1424d4-f796-459a-8184-9c92662be6da",
"receiptHandle": "AQEBzWwaftRI0KuVm4tP+/7q1rGgNqicHq...",
"body": "test",
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1545082650636",
"SenderId": "AIDAIENQZJOLO23YVJ4VO",
"ApproximateFirstReceiveTimestamp": "1545082650649"
},
"messageAttributes": {},
"md5OfBody": "098f6bcd4621d373cade4e832627b4f6",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue",
"awsRegion": "us-east-2"
}
]
}
AWS Lambda を Amazon SQS に使用する - AWS Lambda
SQS のテストイベントを作成しておくと、簡単にテストできそう
Ruby
こんなノリ?
require 'json'
def lambda_handler(event:, context:)
# TODO implement
{ statusCode: 200, body: JSON.generate(event['Records'][0]['messageId']) }
end
テストは成功
JSON の出力結果のログってどこで見るの?
宿題。
ところでリモートワークで365日8時間ずつ稼働しようとしてたら
体力は余ってるんだけど、目がかすんで仕方がない。人間の体って難儀だ。
大阪の夜の街をぼんやり眺めて、視力回復するしかないか?
著者近影
Original by Github issue
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2019-09-21
Discussion