LoginSignup
6
6

More than 5 years have passed since last update.

Lambdaでお手軽サーバーレス入門(API Gateway設定編)

Last updated at Posted at 2018-09-29

初めての記事 Lambdaでお手軽サーバーレス入門(とりあえず作ってみる編)で作った関数を、API Gateway経由で呼び出してみます。
これで、Webアプリなり、モバイルアプリなり、好きなところから呼び出しができます。

一番気をつけたい制約事項

制約事項があるのはお決まりですが、API Gatewayの一番大きな制約事項は個人的にはこれだと思ってます。

29秒勝負!

前回触れなかったですが、Lambdaには実行時間の設定ができます。
範囲は1秒〜300秒(5分)の間で好きなように選べます。
これによって、少し時間がかかる処理もなんとかなるのですが…

API Gatewayはせっかち!

例えば、最大300秒の設定をしているある関数の実行に60秒かかったとします。
Lanbdaとしては、時間制限目いっぱいまでは頑張ってくれます。
なので、この関数も実行は完了します。

ただし、API Gatewayはせっかちなので(2回目)、API呼び出し後29秒が過ぎると、関数がまだ動いていても、強制的にAPI Gatewayの応答を返してしまいます。
なので、クライアント側としては「あれ?なんでタイムアウト?」ってなるかもしれません。
なので、時間がかかりそうな処理のときは、工夫しなければいけません。
(いろいろやり方はありそうですが、私のアイデアは別記事で書きます)

これだけ抑えてもらって、ではAPI Gatewayの設定をしてみましょう。

API Gateway management console

こちらよりAPI Gatewayを表示します。
apigw01.png

このリージョンでは初めてのためWelcomeに飛ばされました。
Get Startedで始めましょう。

apigw02.png

いつのまにこんな画面が?
(注:普段手動で設定しないから驚いているだけ)

New APIを選んでみます。

  • Endpoint Type
    • Regional
      今ログインしているリージョン(例ではTokyo)で作ってくれます。
      今(2018年9月末現在)のデフォルトです。
    • Edge Optimized
      なんとCloudFrontで展開してくれます。
      昔(2017年11月頃まで?)のデフォルトです。
    • Private
      VPC内からのみ呼び出せます。アプリ内部でしか使わない、などの理由で選べそうです。

RegionalとEdge Optimized、どちらを選ぶべきなんでしょうか…?詳しい方、コメントをいただけたら嬉しいです。
今回はデフォルトのRegionalにしてみます。

apigw03.png

右下のCreate APIを押すと作成できます。
apigw04.png

できました。
ただ、まだ定義がないので空っぽです。
ここに、API定義を追加していきます。

APIの追加

上のActionsから、Create MethodやCreate Resourceが選べます。
これらの違いは…

  • Create Method
    リソースの下に、メソッド(GETやPOSTや)を作ります。
  • Create Resource
    さらに細かいリソースをつくれます。その下には、さらにリソースも作れますし、メソッドも作れます。

今回は一つリソースを作ってみて、そのしたにメソッドを作ってみます。

Create Resource

Actions -> Create Resourceをクリックします。

apigw05.png

  • Resource Name
    ここは好きな名前で。
  • Resource Path
    URLになる部分です。
  • Enable API Gateway CORS
    これにチェックを入れておくと、自動でCORS(Cross-Origin Resource Sharing)用のOPTIONSメソッドも作ってくれます。
    Webアプリから呼び出す際に便利です。

ではCreate Resourceをクリックします。

apigw06.png

できました。
先程、Enable API Gateway CORSのチェックを入れていたので、自動でOPTIONSメソッドを作ってくれています。
(あれ、Resource Nameはどこへ…?)

では、今回はGETとPOSTの2つのメソッドを定義してみます。

Create Method

同じくActionsメニューから、Create Methodをクリック。

apigw07.png

真ん中ペインのツリーに、コンボボックスが現れました。
ここでメソッド選んで、✔をクリックします。

apigw08.png

なにやらオプションがいっぱい…
ここでは、Lambdaから呼び出したので、Integration typeはLambdaにします。

Use Lambda Proxy Integrationというオプションがありますが、オンにすることをおすすめします。
たくさんのイベントを取得できます。
(そのかわり、戻り値にもルールがあります)

Lambda Functionには、例で作った hello-world-py3 を入力します。
名前は補完してくれます。

Use Default Timeoutはオンにしておくと、最大の29秒(29000 milliseconds) で処理してくれます。
オフにすると、自分で選べます。短くすることはできますが、29秒より長くすることはできません。

apigw09.png

Saveで保存します。
apigw10.png

何やらダイアログが出ますが、これは「指定したLambdaを呼び出すために、API Gatewayに権限を与えますよ。」ということなので、素直にOKします。

apigw11.png

GETメソッドができました。

POSTメソッドも作る

同じノリでPOSTも作れます。
apigw12.png

次回予告

長くなりそうなので続きは別記事に書きます。
次回:Lambdaでお手軽サーバーレス入門(Lambdaのイベント from API Gateway編)

6
6
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
6
6