はじめに
この記事は、社会人2年目 AWS、python初心者が勉強したことをまとめたものです。
間違っている点、改善点等ございましたご指摘いただけると大変ありがたいです。
この記事について
2つのLambdaを直列に動かす方法について記載します。
直列に動かすとは、Lambda1が正常終了した後Lambda2を動かすことを指しています。
Lambdaを直列に動かす方法として以下の二つが浮かびました。
- Step Functionsを利用
- SQSを利用
過去にStep Functionsを利用した方法を紹介したので、
本記事ではSQSを利用した方法について紹介します。
AWS Lambdaを直列に動かす Step Functions編
構築するシステム
メッセージの送受信を行う非常にシンプルな構成です。
func1がキューにメッセージ func1 is done!!!
を送信します。
func2がメッセージをキューイングし、メッセージの中身func1 is done!!!
を表示します。
構築手順
キューの作成
sushi.fifoという名前のfifoキューを作成します。
Lambda関数作成
SQSのキューにメッセージを送信するfunc1
とメッセージを取得し表示するfunc2
をそれぞれ作成します。
import boto3
def lambda_handler(event, context):
sqs = boto3.client('sqs')
response = sqs.send_message(
QueueUrl='https://sqs.ap-northeast-1.amazonaws.com/1234567890/sushi.fifo',
MessageBody='func1 is done!!!',
MessageGroupId='sushi'
)
def lambda_handler(event, context):
print(event['Records'][0]['body'])
Lambda関数に権限付与
func2にはLambdaメッセージをキューイングするためのポリシーAWSLambdaSQSQueueExecutionRole
を付与します
func1にはメッセージを送信するため以下のポリシーを作成し付与してあげます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "sushiSendMessage",
"Effect": "Allow",
"Action": "sqs:SendMessage",
"Resource": "arn:aws:sqs:*:1234567890:sushi.fifo"
}
]
}
準備は以上です!実行して結果を確認します!
成功しました!!!
func2のログからfunc1 is done!!!
が確認されました!
LambdaをSQSを使用して直列に動かすことに成功しました。