LoginSignup
5
0

More than 1 year has passed since last update.

SQSのキューをトリガーにしてLambdaでメッセージを受信する(Python)

Posted at

はじめに

S3をトリガーにしてLambdaでSQSにメッセージを送信するの続きとして、SQSのキューに入ったメッセージをLambdaで取得する方法のメモ。

目標

図のように、SQSをトリガーにして、Lambdaを起動させる。
image.png

1. SQSでキューを作成する

キューの新規作成

キューを新規作成する。詳細はこちらを参照。
既にあるキューを使用する場合は2.以降を実施。

image.png
image.png

標準とFIFOの違い、ショートポーリングとロングポーリング(メッセージ受信待機時間0がショート、それ以外はロング)の違いは以下を参照。

2. Lambda関数を作成する

SQSのメッセージを取り出すコードを作成

lambda_function.py
import json

def lambda_handler(event, context):

    # eventオブジェクトからメッセージとキュー名称を取得
    msg = event['Records'][0]['body']
    queue = event['Records'][0]['eventSourceARN']
    
    # メッセージとキューを返す
    return {
        'statusCode': 200,
        'body': {'Message':msg, 'Queue':queue}
    }

eventオブジェクトの例

SQSから送られてくるeventの構造は以下の形になっている。

{
  "Records": [
    {
      "messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
      "receiptHandle": "MessageReceiptHandle",
      "body": "Hello from SQS!",
      "attributes": {
        "ApproximateReceiveCount": "1",
        "SentTimestamp": "1523232000000",
        "SenderId": "123456789012",
        "ApproximateFirstReceiveTimestamp": "1523232000001"
      },
      "messageAttributes": {},
      "md5OfBody": "{{{md5_of_body}}}",
      "eventSource": "aws:sqs",
      "eventSourceARN": "arn:aws:sqs:us-east-1:123456789012:MyQueue",
      "awsRegion": "us-east-1"
    }
  ]
}

LambdaにSQS向けのポリシーをアタッチ

Lambdaの実行ロールに「AWSLambdaSQSQueueExecutionRole」のポリシーをアタッチする。
lambda_policy.png

3. SQSでキューにLambdaトリガーを設定する

キューを選択し、「Lambdaトリガー」→「Lambda関数トリガーを設定」
image.png

起動したいLambda関数を選択し、保存する。
lambda_sqs_trigger.png

リストに起動したいLambda関数が追加され、設定完了。
lambda_sqs_trigger_2.png

4. テスト

テストイベントを作成

テンプレートでSQS(sqs-recieve-message)を選択する。
image.png

実行結果

image.png

参考

[serverless] AWS LambdaのイベントソースにSQSを使う
SQSのメッセージをトリガーにLambdaを起動する
SQSのイベントをトリガーに起動するLambdaの仕組みを完全に理解する

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0