やりたいこと
クエリ文字列(get値)付きのURLをキーにLambdaを実行させたい。
そして、必須のクエリ文字列がない場合はエラーで弾きたい。
先にまとめ
-
LambdaのトリガーにAPI Gatewayを設定 -
API GatewayでGetメソッドを作成 - Getメソッドの
メソッドリクエストを開く
-
リクエストの検証-> クエリ文字列パラメータおよびヘッダーの検証に変更 -
URL クエリ文字列パラメータにクエリ文字列を追加で、必要なgetのkeyを追加(必要に応じて、必須にチェックを付ける)
- 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名のメッソドをのリソースを開く
- 総合タイプは
Lambda関数を選択する
メソッドリクエストで、必須の値をURL クエリ文字列を指定
- リクエストの検証で、クエリ文字列パラメータおよびヘッダーの検証を選択
- URL クエリ文字列パラメータ に追加したいパラメータ文字を入力する(必須を選択することで、パラメータが存在しない場合はエラーにできる)
統合リクエストで、パラメータをマッピングする
本文マッピングテンプレート を開き、
-
リクエスト本文のパススルーで**テンプレートが定義されていない場合(推奨)**を選択 -
マッピングテンプレートの追加を選択
- Content-Typeにapplication/jsonを入力
- テンプレートを以下のように入力し、「保存」する
application/json*
{
"Lambdaで受け取る値": "$input.params('URLパラメータ')",
"foo": "$input.params('hoge')"
}
テストで文字列引数を流してみる
テスト例
{
"event": {
"foo": "fuga"
}
}
アクションからAPIのデプロイを実行することで公開される
以上です。
お疲れ様でした!!



