Lambda関数からLambda関数を呼びだしてみた

2024/11/01

AWS
Lambda

Lambda関数からLambda関数を呼びだしてみたので手順をまとめました。

Lambda

呼ぶLmabda(yobu)と呼ばれるLambda(yobareru)を作成します。

呼ぶLmabda(yobu)

呼ばれるLambda(yobareru)に引数を2つ渡します。

Lambda yobu
import boto3
import json

def lambda_handler(event, context):
    print('Start Lambda [yobu]')
    
    # 呼び出す関数に渡すペイロード
    argslist = {
        'args1': 1,
        'args2': 2
    }
    payload = json.dumps(argslist)
    
    # 別の Lambda 関数を呼び出す
    response = boto3.client('lambda').invoke(
        FunctionName='yobareru',
        InvocationType='RequestResponse',
        Payload=payload
    )
    
    # 応答データを取得
    body = json.loads(response['Payload'].read())
    print('Response from yobareru:', body)
    
    print('Stop Lambda [yobu]')

呼ばれるLambda(yobareru)

呼ぶLmabda(yobu)から渡された引数を足し合わせて戻り値として返します。

Lambda [yobareru]
import json

def lambda_handler(event, context):
    print('Start Lambda [yobareru]')

    # event は yobu から渡された JSON データ
    args1 = event['args1']  # event のキー 'args1' を取得
    args2 = event['args2']  # event のキー 'args2' を取得
    response = args1 + args2  # 引数の合計を計算
    
    print('Stop Lambda [yobareru]')
    return {
        'statusCode': 200,
        'body': response  # 合計値を返却
    }

IAM

lambda:InvokeFunctionアクションを実行できるポリシーを作成します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "*"
        }
    ]
}

呼ぶLmabda(yobu)に紐付いているロールに作成したポリシーをアタッチします。

実行

呼ぶLmabda(yobu)を実行します。
実行結果として、ステータスコード200と引数を足し合わせた戻り値(今回は)3が表示されていれば成功です。

Start Lambda [yobu]
{'statusCode': 200, 'body': 3}
Stop Lambda [yobu]

[Tips] 非同期処理

呼ばれるLambda(yobareru)を非同期処理で実行する場合はInvocationTypeを変更します。

Lambda yobu
    # 別の Lambda 関数を呼び出す
    response = boto3.client('lambda').invoke(
        FunctionName='yobareru',
        # InvocationType='RequestResponse', # 同期処理
        InvocationType='Event', # 非同期処理
        Payload=payload
    )

今回はここまでです。