search
LoginSignup
86
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Amazon API GatewayでAWS Lambda関数にクエリ文字列をパラメータとして渡す

2015年7月にAWSより新たに発表されたサービス「Amazon API Gateway」(以下、API Gateway)。
同じくAWSのサービスである「AWS Lambda」(以下、Lambda)の関数を簡単にAPIとして公開することができますが、Lambda関数にパラメータを渡す方法で少し悩んだので、メモを残しておきます。

0. 結論

結論から述べると、「Integration Request」の「Input mapping」を設定することで、クエリ文字列をLambda関数のパラメータとして渡すことができます。クエリ文字列の「foo」パラメータを、Lambda関数の「foo」パラメータとして渡す例は以下の通り。

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

1. Lambda関数を準備する

結論は前述の通りですが、検証方法について以下に示します。

まず、検証用のLambda関数を作成します。今回は以下のコードを使用しました。パラメータが含まれるeventオブジェクトを、そのままレスポンスとして返すだけの簡単なコードです。

exports.handler = function(event, context) {
    console.log(JSON.stringify({event: event, context: context}, null, 2));
    context.succeed({event: event});
};

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

検証用に(API Gatewayで言うところの)API、メソッドを作成します。リソース、モデルについては、今回は不要です。
Lambda関数をAPIとして公開したいので「Integration Type」は「Lambda Function」を選択し、Lambda関数が配置されているリージョン、Lambda関数の名称を入力します。

3. パラメータのマッピングを設定する

3.1. 設定前のテスト

この段階でメソッドのテストを行うと、Lambda関数は以下のレスポンスを返します。パラメータを何も渡していないため、空のオブジェクトが返ります。

{
  "event": {}
}

3.2. 固定値を渡すテスト

クエリ文字列を渡す前に、固定値をパラメータとして渡すことができるかどうか確認しました。
メソッドの画面から「Integration Request」に遷移し、「Templates」の「Content-Type」に「application/json」を、「Input mapping」に以下のコードを入力します。

{
  "foo": "abc"
}

上記の設定を行ってからメソッドのテストを行うと、Lambda関数は以下のレスポンスを返します。


{
  "event": {
    "foo": "abc"
  }
}

無事、固定値がLambda関数のパラメータとして渡りました。

3.3. パラメータの追加

まずはメソッドにパラメータを追加します。メソッドの画面から「Method Request」に遷移し、「URL Query String Parameters」にてクエリ文字列として与えることができるパラメータを追加します。
今回は「foo」を追加しました。

この段階でメソッドのテストを行っても、テスト画面からは「foo」パラメータを入力することができますが、Lambda関数は相変わらず固定値を返します。

{
  "event": {
    "foo": "abc"
  }
}

3.4. パラメータのマッピングの設定

メソッドの画面から「Integration Request」に遷移し、「Input mapping」に以下のコードを入力します。

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

上記の設定後、メソッドのテストを行うと、テスト画面に入力した「foo」パラメータがLambda関数に渡ります。「foo」の値として「123」を入力した場合のレスポンスは以下の通り。

{
  "event": {
    "foo": "123"
  }
}

無事、Lambda関数にクエリ文字列のパラメータを渡すことができました。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
86
Help us understand the problem. What are the problem?