🖥

#AWS で SQSのメッセージ受信をトリガーに lambda で関数を実行させる手順

2019/09/21に公開

この例ではlambdaとSQSのコンソールを行き来して作業する

参考

書いた後に気づいたけど、こちらの記事がずっと詳しい。

AWS LambdaがSQSをイベントソースとしてサポートしました! | DevelopersIO

HELP

AWS Lambda を Amazon SQS に使用する - AWS Lambda

AWS lambda が SQS を使えるように、実行ロールを作成しておく

#AWS Lambda の実行ロールを作成する ( SQSの実行権限を与えて見る例 ) · Issue #2496 · YumaInaura/YumaInaura

SQSのキューを作成する

image

Lambda の関数を選んで設定に進む

image

Lambdaに SQS が使える実行ロールを与えておく

image

Lambda の設定で「トリガーを追加」を選ぶ

image

トリガーに SQSを選ぶ

image

SQSのキューを選ぶ

image

SQSのコンソールを開いてキューを見ると、Lambdaが設定されているのがわかる

image

SQS のキューでメッセージの送信をする

どうやら一瞬でメッセージが処理されるようで、すぐに一覧画面を更新しても「利用可能メッセージ」の件数さえ、増えるのは分からなかった。
キュー実行に遅延時間を与えてやれば、動きがわかるかもしれない。

image

image

Lambdaでモニタリング / CloudWatchのログなどを確認して、履歴を見る

メッセージが処理されているのが分かる。

image

image

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 のテストイベントを作成しておくと、簡単にテストできそう

image

Ruby

こんなノリ?

require 'json'

def lambda_handler(event:, context:)
    # TODO implement
    { statusCode: 200, body: JSON.generate(event['Records'][0]['messageId']) }
end

テストは成功

image

JSON の出力結果のログってどこで見るの?

宿題。

ところでリモートワークで365日8時間ずつ稼働しようとしてたら

体力は余ってるんだけど、目がかすんで仕方がない。人間の体って難儀だ。

大阪の夜の街をぼんやり眺めて、視力回復するしかないか?

image

著者近影

image

image

Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2497

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2019-09-21

Discussion