AWS
lambda
APIGateway

AWS Lambdaにクエリ文字列(get値)を引数で渡すトリガを設定する

やりたいこと

クエリ文字列(get値)付きのURLをキーにLambdaを実行させたい。

そして、必須のクエリ文字列がない場合はエラーで弾きたい。

先にまとめ

  1. LambdaのトリガーにAPI Gatewayを設定
  2. API GatewayGetメソッドを作成
  3. Getメソッドのメソッドリクエストを開く
    • リクエストの検証 -> クエリ文字列パラメータおよびヘッダーの検証に変更
    • URL クエリ文字列パラメータ にクエリ文字列を追加で、必要なgetのkeyを追加(必要に応じて、必須にチェックを付ける)
  4. Getメソッドの統合リクエストを開き、本文マッピングテンプレートを開く
    • リクエスト本文のパススルー-> テンプレートが定義されていない場合 (推奨)を選択
    • application/jsonを追加する

記載は、以下の形(fooを任意で書き換える)

application/json
{
  "foo": "$input.params('foo')"
}

アクションAPIデプロイを実行すると反映される。

実装の流れ

Amazon API GatewayでAWS Lambda関数にクエリ文字列をパラメータとして渡す - Qiitaを参考に実装する

1. Lambda関数を準備する

確認用のfuntionを設定する

lambda関数コード(nodeJs)
exports.handler = function(event, context) {
    console.log(JSON.stringify({event: event, context: context}, null, 2));
    context.succeed({event: event});
};

2.URLを処理するAPI Gatewayのメソッドを準備する

Designerから、API Gatewayを選択し、トリガーの設定

  • API名 -> APIの設定名
  • デプロイされるステージ -> 識別としてURLの値に使われる値 (セキュリティは今回はオープンを選択)

設定が終わったら、ページ上部の保存でLambda全体の設定を保存する

3.API Gatewayの詳細設定

メソッドを作成

API Gatewayで、作成したAPI名のメッソドをのリソースを開く

  1. リソースでANYメソッドがある場合、今回は必須のGet値がない場合は弾くためアクションからメソッドを削除する。
    any削除.PNG

  2. アクションメソッドを作成Getを作成

    • 総合タイプはLambda関数を選択する

メソッドリクエストで、必須の値をURL クエリ文字列を指定

  • リクエストの検証で、クエリ文字列パラメータおよびヘッダーの検証を選択
  • URL クエリ文字列パラメータ に追加したいパラメータ文字を入力する(必須を選択することで、パラメータが存在しない場合はエラーにできる)

メソッドクエスト作成.PNG

統合リクエストで、パラメータをマッピングする

本文マッピングテンプレートを開き、

  • リクエスト本文のパススルーテンプレートが定義されていない場合(推奨)を選択
  • マッピングテンプレートの追加を選択
    • Content-Typeにapplication/jsonを入力
    • テンプレートを以下のように入力し、「保存」する
application/json*
{
  "Lambdaで受け取る値": "$input.params('URLパラメータ')",
  "foo": "$input.params('hoge')"
}

統合リクエスト作成.PNG

テストで文字列引数を流してみる

テスト実行前.PNG

テスト例
{
  "event": {
    "foo": "fuga"
  }
}

アクションからAPIのデプロイを実行することで公開される

以上です。
お疲れ様でした!!