サーバーレスの第一歩といえば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などには含まれないのでなんでも良い
1.2 Resourceを作成する
Actions > Create Resource からリソースを作成する
このリソース名がAPIのpathになる
1.3 ResourceにMethodを追加する
先ほど追加したResourceを選択した状態で、Actions > Create Method からメソッドを追加する
今回はGETを選択した。GETの横のチェックマークを押さないとsubmitされないので注意。
1.4 MethodとLambdaを紐づける
追加したメソッドを選択すると以下のような画面になるので、Lambda Functionを選択する(今回はapiというファンクションを使用)
これで、エンドポイントの設定がほぼ完了。あとは、許可するパラメータなどの設定に入る。
1.5 Method Requestで、許可するパラメータ、リクエストヘッダーを登録する
追加したメソッドを選択すると前項の画像のようになる。
その中からMethod Requestを選択して、
- Query String Parametersにpathを登録
- Request Header に Content-Typeを登録
する
1.6 Integration Requestで、APIから渡ってきた値をLambdaに渡せるように設定する
APIから渡ってきた値をLambdaに渡すために、リクエストテンプレートを設定する
-
application/jsonを選択すると、リクエストテンプレートを登録できるので以下を登録する
#set($inputRoot=$input.path('$'))
{
"path": "$input.params('path')"
}
1.7 testを行う
Method Exectionの画面に戻り、testをクリック。
path=/11111
, Content-Type=application/json
を設定し、テストを実行する
Response Bodyがちゃんと帰ってきて入ればOK
1.8 APIをデプロイする
Actions > Deploy API からAPIをデプロイする
Stage Nameはエンドポイントのurlに含まれるので慎重に名前をつける
すると、以下のようにエンドポイントが作成される
https://xxxxx.execute-api.ap-northeast-1.amazonaws.com/testapi
最後に
Lambda以上にAPI Gatewayは設定項目が多くハマりポイント満載ですが、設定できるといろんなことをリソースによる制限を考えずに実行できるのでありがたいです。
サーバーレスアーキテクチャーの第一歩として挑戦していただければ幸いです。