PRESSMAN*Tech

HTML5, CSS3からWordPress, AWS, Docker, Node.jsまで。プレスマンのスタッフが綴る技術ブログ。

【AWS API Gateway】リクエストのマッピングについて

スクリーンショット 2015-07-15 15.08.54

ドキュメントをざっと読んだところ$inputについての記述が見つからなかったのでまとめ。

リクエスト時の$inputはクエリ、ヘッダ、POSTのbody等々色々と入っているよく分からない変数です。
API GatewayのIntegration Requestでinput mappingをするとlambda関数の一つ目の引数に渡されるようになります。

パス、クエリ、ヘッダから値をlambdaへ渡す場合

$input.params(‘[名前]’)で取得出来ます。

パスはResourceを /test/{xxxxx} の様に作成します。
クエリはMethod Executionの画面->Method Request->URL Query String Parameters->Add query stringで追加します。
ヘッダはクエリ追加と同じ画面でHTTP Requery Headers->Add headerで追加します。

POSTしたbodyから渡す場合

$input.path(‘$’)にbodyのJSONがパースされて入ります。

Resourceを /test/{user_id}, MethodをPOSTでつくってLambda関数に紐付けます。
紐付けるLambda関数は渡された引数を表示するだけの簡単なものです。

exports.handler = function(event, context) {
context.succeed(event);
};

画像の様にクエリ、ヘッダを設定します。
apigateway01

Integration Requestのinput mappingで下記のとおり記述します。
その際にContent-Typeの項目にはapplication/jsonと入力下さい。placeholderでapplication/jsonと設定されていますが、ちゃんと入力しないとダメです。
それと、オブジェクトの値の方はダブルクォーテーションで囲まないと実行時にパースエラーが出ます。

{
"user_id": "$input.params('user_id')",
"user_name": "$input.params('user_name')",
"x-test": "$input.params('X-TEST')",
"path": "$input.path('$')",
"hoge": "$input.path('$').hoge"
}

その後テスト実行です。色々とパラメーターを入れて実行してみて下さい。
スクリーンショット 2015-07-15 11.44.26

“path”: “$input.path(‘$’)” はRequest Bodyをパースしてオブジェクトとして入ると思いましたが、そうはいかないようですね。イコールでくっつけたテキストになってしまいました。マッピングするのも面倒なのでヘッダ、クエリ、Request body全部まとめて渡してくれると嬉しいですね。

投稿者:taichi

taichi の紹介

何でもやりますが、一応プログラマです。
このエントリーをはてなブックマークに追加

私たちと一緒に働きませんか?

株式会社プレスマンでは、AWSが大好きな方、仕事を通してさらにスキルを磨きたい方を募集しています。まずは募集職種をご覧の上、お気軽にお問い合わせください。あなたとお会いできるのを楽しみにしています。

プレスマンの採用情報を見る →

コメントは受け付けていません。

▲ 先頭へ戻る