AWS Lambda(C#)でAPI Gatewayからパラメータを受け取る方法

はじめに

API Gatewayから呼び出されるLambda関数をC#(.NET Core 3.1)で作成した場合の、パラメータの受け渡し方法についてご紹介します。

Lambda関数の作成方法については、前回の記事をご参照ください。

Lambda関数の作成

C#のLambda関数では、下記のAssemby属性を指定することによって、引数及び戻り値について.NETクラスとJSONの相互変換を行なわれます。

[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

例えば、下記のようなLambda関数を用意します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using Amazon.Lambda.Core;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

namespace AWSLambda1
{
    public class Function
    {
        public ResponseParam FunctionHandler(RequestParam input, ILambdaContext context)
        {
            return new ResponseParam
            {
                StatusCode = 200,
                Result = input?.ParamA + " - " + input?.ParamB
            };
        }
    }
    public class RequestParam
    {
        public string ParamA { get; set; }
        public string ParamB { get; set; }
    }
    public class ResponseParam
    {
        public int StatusCode { get; set; }
        public string Result { get; set; }
    }
}

ここでは引数用にRequestParamクラス、戻り値用にResponseParamクラスを用意しています。

API Gatewayから以下のようなJSONデータをLambda関数を渡すと、.NETのRequestParamクラスへ自動的にマッピングしてくれます。

{"ParamA":"ValueA","ParamB","ValueB"}

このLambda関数をパブリッシュしておきます。

API Gatewayの作成

AWSマネジメントコンソールから作成したlambda関数を選択し、「トリガーを追加」ボタンをクリックします。

必要な項目を入力し、「追加」ボタンをクリックします。今回は、

  • トリガーの種類:API Gateway
  • API:Create an API
  • API:REST API
  • セキュリティ:オープン

を選択します。

画面下部に表示されたAPI名をクリックし、API Gatewayの設定画面へ移動します。

「統合リクエスト」をクリックします。

「Lambda プロキシ統合の使用」のチェックを外します。確認ダイアログが出たら「OK」を押してください。

画面下部にある「マッピングテンプレートの追加」をクリックします。

“application/json”を入力し、テキストボックス右側の「作成」ボタンをクリックします。

テンプレートに下記の内容を入力し、「保存」ボタンをクリックします。ここではクエリストリング”a”,”b”をそれぞれ”ParamA”,”ParamB”にマッピングしています。

{
"ParamA": "$input.params('a')",
"ParamB": "$input.params('b')"
}

以上で設定は終わりです。動作確認してみましょう。

動作確認

元のページに戻り、「テスト」ボタンをクリックします。

メソッドとクエリ文字列を入力し、「テスト」ボタンをクリックします。

うまくいくと、画面右側にレスポンス内容が表示されます。レスポンス本文にLambda関数の戻り値が想定通り出力されていますね。

エンドポイントから実行できるか確認してみましょう。エンドポイントから実行するためにはAPIのデプロイが必要です。

「アクション」 – 「APIのデプロイ」を選択します。

デプロイ先のステージを選択し、「デプロイ」ボタンをクリックします。

デプロイが完了すると、ステージエディターページに遷移します。

左側のツリーから該当のリソースとメソッドを選択すると、画面上部にエンドポイントが表示されます。

以下例のように、エンドポイントにクエリ文字列を付与してブラウザのアドレスバーに入れてみましょう。

https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/default/AWSLambda1?a=Value1&b=Value2

ブラウザに以下のような表示がされれば動作確認OKです。

{"StatusCode":200,"Result":"Value1 - Value2"}

以上です。