やりたいこと
クエリ文字列(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のデプロイを実行することで公開される
以上です。
お疲れ様でした!!