nomurabbitのブログ

nomurabbitのブログはITを中心にした技術ブログです。

nomurabbitのブログ

【AWS】Lambdaから別のLambdaを呼んでみた(invoke)【サーバーレス】

こんにちは!nomurabbitです。
今回は、
Lambdaから他のLambdaを呼び出す方法を
紹介します。

AWSDSKでは
Invokeと呼ばれる方法ですね!

テンプレートの準備

まず、Lambdaのテンプレートを準備します。

.NET Core3.1のテンプレートは、
この記事この記事を参考にしてください。

.NET toolsのコマンドはこんな感じです。

dotnet new lambda.EmptyFunction --name 20211113_my_glb_invokesample

ソースコード

呼び出し元でAWSSDK.Lambdaが必要なので、
nugetでパッケージを追加します。

f:id:nomurabbit:20211113111205p:plain
nuget

今回はAmazonLambdaClientを使います。
ソースコードのポイントは下記の通りです。

private async Task<string> InvokeAccess(ApiRequestBody apiRequestBody)
{
    try
    {
        var client  = new AmazonLambdaClient(Amazon.RegionEndpoint.APNortheast1);
        var request = new InvokeRequest()
        {
            FunctionName   = ApiUtil.MY_GLB_INVOKESAMPLE,
            InvocationType = InvocationType.RequestResponse,
            Payload        = JsonSerializer.Serialize(GetInvokePayload(apiRequestBody))
        };
        var response = await client.InvokeAsync(request);

        using(var stream = new StreamReader(response.Payload))
        {
            return await stream.ReadToEndAsync();
        }
    }
    catch (System.Exception e)
    {
        throw e;
    }
}

AmazonLambdaClientのInvokeAsyncメソッドの引数が
InvokeRequestのインスタンスになっています。

GitHubソースコードを載せていますので、
よろしければ参考にしてください。

呼び出す方(呼び出し元)
github.com

呼び出される方
github.com

messageを送ると、文末に「: I received a message.」と追加されて
レスポンスが返ってくるプログラムです。

以上でLambdaから
別のLambdaを呼び出すことができると思います。

よかったら試してみてください。
では!