LoginSignup
1
1

More than 3 years have passed since last update.

AWS Lambdaを直列に動かす SQS編

Last updated at Posted at 2021-02-07

はじめに

この記事は、社会人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!!!を表示します。

image.png

構築手順

キューの作成

sushi.fifoという名前のfifoキューを作成します。
image.png

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!!!が確認されました!
image.png

LambdaをSQSを使用して直列に動かすことに成功しました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1