LoginSignup
153
154

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-04-28

サーバーレスの第一歩といえば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は設定項目が多くハマりポイント満載ですが、設定できるといろんなことをリソースによる制限を考えずに実行できるのでありがたいです。
サーバーレスアーキテクチャーの第一歩として挑戦していただければ幸いです。

153
154
0

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
  3. You can use dark theme
What you can do with signing up
153
154