AWS
lambda
APIGateway

API GatewayとLambdaでAPI作成のチュートリアル

More than 1 year has passed since last update.

サーバーレスの第一歩といえばLambda。それをAPI Gatewayで公開する手順を書いてみました。


想定するAPI


API endpoint

# params

## path: ページのpath
https://YOUR_API_GATEWAY_DOMAIN/link_clicks?path=/111


Lambda関数

apiという名前のlambda functionを想定する。

参考: LambdaでRDSチュートリアル

# param

## {"path": "/11111"}

# result
#=> [{"clicks": 5555}]


1. API Gatewayの設定


1.1 API作成

Create APIからAPIを作成する

この名前はurlなどには含まれないのでなんでも良い

API作成.png

test API作成.png


1.2 Resourceを作成する

Actions > Create Resource からリソースを作成する

このリソース名がAPIのpathになる

create method.png

resource作成.png


1.3 ResourceにMethodを追加する

先ほど追加したResourceを選択した状態で、Actions > Create Method からメソッドを追加する

今回はGETを選択した。GETの横のチェックマークを押さないとsubmitされないので注意。

method追加(チェックマーク押さないといけない).png


1.4 MethodとLambdaを紐づける

追加したメソッドを選択すると以下のような画面になるので、Lambda Functionを選択する(今回はapiというファンクションを使用)

methodを選択して、lambdaを選択する.png

これで、エンドポイントの設定がほぼ完了。あとは、許可するパラメータなどの設定に入る。

途中経過.png


1.5 Method Requestで、許可するパラメータ、リクエストヘッダーを登録する

追加したメソッドを選択すると前項の画像のようになる。

その中からMethod Requestを選択して、

- Query String Parametersにpathを登録

- Request Header に Content-Typeを登録

する

pathをquery string parametersに登録(チェック押さないといけない).png

method requestのhttp request headerにContent-Type追加.png


1.6 Integration Requestで、APIから渡ってきた値をLambdaに渡せるように設定する

APIから渡ってきた値をLambdaに渡すために、リクエストテンプレートを設定する


  1. Body Mapping Template > Content-Type に application/json を登録

    integration requestでcontent-Type追加.png


  2. application/jsonを選択すると、リクエストテンプレートを登録できるので以下を登録する


#set($inputRoot=$input.path('$'))

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

query stringのpathを許可するようにtemplateを作成.png


1.7 testを行う

Method Exectionの画面に戻り、testをクリック。

path=/11111 , Content-Type=application/json を設定し、テストを実行する

Response Bodyがちゃんと帰ってきて入ればOK

execution test.png


1.8 APIをデプロイする

Actions > Deploy API からAPIをデプロイする

Stage Nameはエンドポイントのurlに含まれるので慎重に名前をつける

deploy api.png

deploy.png

すると、以下のようにエンドポイントが作成される

 https://xxxxx.execute-api.ap-northeast-1.amazonaws.com/testapi

apiエンドポイント作成.png

実際にアクセスすると、レスポンスが返ってくる

apiアクセス.png


最後に

Lambda以上にAPI Gatewayは設定項目が多くハマりポイント満載ですが、設定できるといろんなことをリソースによる制限を考えずに実行できるのでありがたいです。

サーバーレスアーキテクチャーの第一歩として挑戦していただければ幸いです。