AWS Lambdaを直列に動かす SQS編


はじめに

この記事は、社会人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をそれぞれ作成します。

func1

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'
    )

func2
def lambda_handler(event, context):
    print(event['Records'][0]['body'])

Lambda関数に権限付与

func2にはLambdaメッセージをキューイングするためのポリシーAWSLambdaSQSQueueExecutionRoleを付与します

func1にはメッセージを送信するため以下のポリシーを作成し付与してあげます。

sushi-queue
{
    "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を使用して直列に動かすことに成功しました。