サンプル集  >  other  >  SQS+Lambda
SQS+Lambda
2023/11/13

SQSからLambda関数を起動するテストをしてみます。

まずはSQSを作成します。

タイプ FIFO
名前 MyQueue.fifo


Lambda関数を作成します。

関数の作成 一から作成
名前 MyFunctionFromSQS
ランタイム Python 3.9


引数で受け取ったeventをprintするようにします。

lambda_function.py
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
import json

def lambda_handler(event, context):
    # TODO implement
    print(event)
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

LambdaのトリガーにSQSを指定します。


エラーがでました。


エラーメッセージは以下でした。

The provided execution role does not have permissions to call ReceiveMessage on SQS
指定された実行ロールには、SQS で ReceiveMessage を呼び出す権限がありません。

権限が足りないとのことです。 作る手順の問題かもしれないので、SQSからLambda関数をトリガーに指定してみます。


同じエラーが出ました。


Lambdaの画面の下に以下のメッセージが表示されていました。

In order to read from the SQS trigger, your execution role must have proper permissions.
SQSトリガから読み込むためには、実行ロールに適切な権限が必要です。

Lambdaの設定のアクセス権限を開きます。


ロール名に「myFunctionFromSQS-role-u258berm」という表示があります。クリックします。


画面を下にスクロールさせます。


許可ポリシーにAWSLambdaBasicExecutionRole-dcecf9c...と表示されています。


編集をクリックします。


ビジュアルをクリックします。


許可をさらに追加をクリックし、sqsを選択します。


読み取りの中にReceiveMessageというものがありました。

ReceiveMessageにチェックをします。


メッセージが表示されました。

AddPermissionに指定されたqueueリソースARNおよび、さらに18個のアクション。

「このアカウント内のいずれか」をチェックします。


「次へ」をクリックします。


SQSが追加されています。「変更を保存」をクリックします。


再度Lambdaのトリガーを設定してみます。


DeleteMessageも必要なようです。DeleteMessageを追加したところ、GetQueueAttributesが必要というエラーが出たためGetQueueAttributesも追加しました。


トリガーにSQSを設定することができました。

SQSにメッセージを送信してみます。


メッセージが送信できると画面上部に「メッセージは送信され、受信可能です。」と表示されました。


CloudWatchのログを確認してみます。


print(event)で表示されて内容に、SQSに送信したメッセージも表示されています。

▲ PageTop  ■ Home


Copyright (C) 2023 ymlib.com