Top / AWS / Amazon API Gateway

API GatewayからAWS Lambdaを呼び出す。

AWS Lambdaは、サーバレスでロジックを記述できる関数型のフレームワークです。EC2などでサーバを立てて常駐させてたようなサービスを、関数として登録するだけで構築する事ができる仕組みです。

また API Gateway は、AWSのサービスをRESTで呼び出す事ができるフレームワークです。これらを用いて、API GatewayからLambdaを呼び出すことで、サーバレスなREST/API環境が構築できそうです。

具体的には

https://xxxx.execute-api.ap-northeast-1.amazonaws.com/dev?q_param=value1

などとクエリパラメタ付きのリクエストを送ると、

{
  "my_param1": "value1"
}

なんてJSONを echoするAPIを構築してみます。

Lambda関数の作成

まずはパラメタを受け取るLambda関数を定義

Lambdaサービスのトップにアクセスし、関数の作成 >> 一から作成を選択します

01.png

関数名を helloworld に、ロールは新しく作成(lambdaRole)し、関数の作成をクリック

02.png

helloworldという関数が作成され、関数を記述する画面が表示されます。今回はPythonを選択しました。

03.png

真ん中あたりの「ハンドラ」というテキストボックスに、lambda_function.lambda_handler とありますが、これはソースコードの lambda_function.pyのlambda_handlerメソッドを呼び出すことを意味しています。で、具体的なコードは 単純なオブジェクトを一つ、

return {
 "my_param1": event['param1']
}

と返すように記述しました。コード全体は以下の通り:

def lambda_handler(event, context):
    # TODO implement
    #return 'Hello from Lambda'
    return {
        "my_param1": event['param1']
    }

さて右上の「テスト」ボタンをクリックしてみると「テストイベントの設定」という、関数を呼び出した際にパラメタに渡ってくるオブジェクトを指定できる画面が表示されます。

04.png

図のように、JSONオブジェクトを指定したりできますが、ここでは"param1":"value1" というテストデータを指定しました。これは関数中の event['param1'] に渡ってくるようになっています。

テスト

つぎにこの画面下の「作成」をクリックすると、元の画面に戻ってきます。先のテストイベントが選択された状態になっているので、再度「テスト」をクリックすることで、関数が実行されます。

06.png

関数の戻り値は

return {
 "my_param1": event['param1']
}

と書きましたが、実行結果は

return {
 "my_param1": "value1"
}

となっていて、テストイベントの

{
  "key3": "value3",
  "key2": "value2",
  "param1": "value1"   ←ココ
}

この値が event['param1'] とやってアクセス出来ることが確認できました。

API Gatewayの作成

つぎにAPI Gatewayを定義

つぎにAPI Gatewayを定義して、定義したLambda関数を呼び出してみます。

API Gatewayのトップにアクセスし「APIの作成」をクリックすると、下記の画面が表示されます。API名に適当な名前をつけて、右下の「APIの作成」をクリックします。

02_01.png

下記のように アクション >> メソッドの作成 をクリックします。

02_02.png

唐突に空のプルダウンが表示されるので、開いてメソッドのGETを選択します。HTTP GETに対する処理を定義する画面になりますので、統合タイプは「Lambda関数」、また関数名は、先ほどLambdaで定義した関数「helloworld」を指定します。

02_03.png

ここまででAPI GatewayとLambdaが紐付いた事になります。

API Gateway のクエリパラメタの定義

つぎにAPI に クエリパラメタを定義します。ゴールは、

https://xxxx.execute-api.ap-northeast-1.amazonaws.com/dev?q_param=value1

とリクエストすると、Lambdaに

{
  "param1": "value1"
}

と渡されることなので、 API に q_param というクエリパラメータを定義したいと思います。

下記画面の「メソッドリクエスト」をクリックします。

02_04.png

下記のような画面が出てきました。「URLクエリ文字列パラメータ」に「q_param」と指定して右のチェックボタンを押します。以上でクエリパラメタとしてq_paramを定義することができました。

02_05.png

クエリパラメタと、Lambda関数のマッピング

つづいて、クエリパラメタと Lambda関数の引数をマッピングします。

メソッドの実行、画面で「統合リクエスト」を選択します。下記の「本文マッピングテンプレート」で「マッピングテンプレートの追加」をクリックします。

02_07.png

Content-Typeを application/json を選択。下記の「テンプレートの生成」の入力ボックスが表示されるので

{
 "param1" : "$input.params('q_param')" ,
 ...
 "paramN" : "$input.params('q_paramN')"
 }

と入力します。 Lambda 内で event['param1'] でアクセスする箇所に、"$input.params('q_param')" が渡されたことになり、ようするにAPI Gatewayのクエリパラメタが紐付いたことになりました。

02_08.png

この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / AWS / Amazon API Gateway

現在のアクセス:5622


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS