概要
SQSに届いたメッセージをLambdaに渡す処理を調べたので、設定や実装方法をメモとして記載する
前提
以下の記事でSQSにメッセージを渡す処理を実装しておく
準備
Lambda実行ロール作成
AWSLambdaSQSQueueExecutionRole 許可ポリシーをアタッチしたロールを作成する
許可されている定義に、sqs:DeleteMessage、sqs:GetQueueAttributes、sqs:ReceiveMessageが含まれている
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:ReceiveMessage",
"sqs:DeleteMessage",
"sqs:GetQueueAttributes",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
参考記事
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-sqs-example.html
https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-lambda-function-trigger.html#configure-lambda-function-trigger-prerequisites
Lambda関数作成
上で作成したLambda実行ロールをデフォルトの実行ロールとして指定して作成する
ソースコード更新
SQSから渡されたメッセージを出力するコードを用意
require 'json'
def lambda_handler(event:, context:)
event['Records'].each do |record|
# メッセージ本文 (Body) を取得
body = record['body']
puts "Message received: #{body}"
end
{ statusCode: 200, body: JSON.generate('Success') }
end
SQSをトリガーに設定
Lambda関数の画面でトリガーを追加を選択
トリガーの設定でSQSを指定し、SQSキューに登録しているキュー情報を指定する
※SQSキュー情報設定については、前提のリンクにある記事を参照
設定後、トリガーにSQSが追加される
動作確認
Railsアプリから実行
タイトルとコメントを指定して、Create Sqs messageを選択

Lambda側確認
モニタリングタブにて
処理が成功しているか、エラーカウントと成功率のグラフで確認
※処理直後は、間隔を狭めて(30秒などにして)確認

CloudWatchログ表示を選択し、SQSから渡されたメッセージが出力されていることを確認

無事にSQSからLambdaにメッセージが渡されているのが確認できた



