0
Help us understand the problem. What are the problem?
Organization

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

はじめに

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の仕組みを完全に理解する

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?