Help us understand the problem. What is going on with this article?

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

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

vankobe
リンクアンドモチベーションで、モチベーションクラウドを作っています。 現環境はAWS+Rails+Vueです。 個人的に業務改善やマーケティングも好きなのでSpreadSheetやRedash、BigQueryも実は結構投稿してます
lmi-inc
リンクアンドモチベーションはこれまでコンサルティング事業で培ったノウハウをテクノロジー(モチベーションクラウド)にのせる第2創業期です。
http://www.lmi.ne.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした