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

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

# 参考

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

[AWS LambdaがSQSをイベントソースとしてサポートしました！ ｜ DevelopersIO](https://dev.classmethod.jp/etc/aws-lambda-support-sqs-event-source/)

# HELP

[AWS Lambda を Amazon SQS に使用する - AWS Lambda](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-sqs.html)

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

[#AWS Lambda の実行ロールを作成する ( SQSの実行権限を与えて見る例 ) · Issue #2496 · YumaInaura/YumaInaura](https://github.com/YumaInaura/YumaInaura/issues/2496)


# SQSのキューを作成する

![image](https://user-images.githubusercontent.com/13635059/65371747-cdaca580-dca1-11e9-8f6c-78a35532702a.png)

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

![image](https://user-images.githubusercontent.com/13635059/65371774-0c426000-dca2-11e9-82f4-6f456b9537db.png)

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

![image](https://user-images.githubusercontent.com/13635059/65371801-54fa1900-dca2-11e9-8552-85a421320ae4.png)


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

![image](https://user-images.githubusercontent.com/13635059/65371787-2b40f200-dca2-11e9-9e2f-30ae920cb6a1.png)

# トリガーに SQSを選ぶ

![image](https://user-images.githubusercontent.com/13635059/65371732-af46aa00-dca1-11e9-89e7-d6ca78d8fc34.png)

# SQSのキューを選ぶ

![image](https://user-images.githubusercontent.com/13635059/65371734-ba013f00-dca1-11e9-9d13-4334937c4420.png)

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

![image](https://user-images.githubusercontent.com/13635059/65371838-bf12be00-dca2-11e9-8e16-ece79840df87.png)

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

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

![image](https://user-images.githubusercontent.com/13635059/65371824-8f63b600-dca2-11e9-9d55-d01243736915.png)

![image](https://user-images.githubusercontent.com/13635059/65371817-8672e480-dca2-11e9-9f96-b2656574a9fe.png)

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

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

![image](https://user-images.githubusercontent.com/13635059/65372185-aa84f480-dca7-11e9-952e-34d6c241bd91.png)


![image](https://user-images.githubusercontent.com/13635059/65371961-6cd29c80-dca4-11e9-91a2-f18a59547fb0.png)


# LambdaでSQSのメッセージ内容はどうやって扱うの？

Hello world のテンプレートに `event` という表記が見える。
そもそも各言語で event を簡単に参照できるっぽい？

当方Lambda未経験者につき。

Ruby の例

```rb
require 'json'

def lambda_handler(event:, context:)
    # TODO implement
    { statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end
```

# SQSのメッセージイベントはこんなん

```json
{
    "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](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-sqs.html)

# SQS のテストイベントを作成しておくと、簡単にテストできそう

![image](https://user-images.githubusercontent.com/13635059/65372610-5c72ef80-dcad-11e9-8b1c-71a0c12dd39b.png)

# Ruby 

こんなノリ？

```rb
require 'json'

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

```

# テストは成功

![image](https://user-images.githubusercontent.com/13635059/65372732-ab6d5480-dcae-11e9-9195-62e97d6fbaac.png)

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

宿題。

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

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

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

![image](https://user-images.githubusercontent.com/13635059/65372314-4fec9800-dca9-11e9-838a-c015202443a3.png)

# 著者近影

![image](https://user-images.githubusercontent.com/13635059/65372333-80343680-dca9-11e9-8996-9027ecd836ae.png)

![image](https://user-images.githubusercontent.com/13635059/65372329-77436500-dca9-11e9-8ee0-162fd275ac06.png)



# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->