初めての記事 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を表示します。
このリージョンでは初めてのためWelcomeに飛ばされました。
Get Startedで始めましょう。
いつのまにこんな画面が?
(注:普段手動で設定しないから驚いているだけ)
New APIを選んでみます。
- Endpoint Type
- Regional
今ログインしているリージョン(例ではTokyo)で作ってくれます。
今(2018年9月末現在)のデフォルトです。 - Edge Optimized
なんとCloudFrontで展開してくれます。
昔(2017年11月頃まで?)のデフォルトです。 - Private
VPC内からのみ呼び出せます。アプリ内部でしか使わない、などの理由で選べそうです。
- Regional
RegionalとEdge Optimized、どちらを選ぶべきなんでしょうか…?詳しい方、コメントをいただけたら嬉しいです。
今回はデフォルトのRegionalにしてみます。
できました。
ただ、まだ定義がないので空っぽです。
ここに、API定義を追加していきます。
APIの追加
上のActionsから、Create MethodやCreate Resourceが選べます。
これらの違いは…
- Create Method
リソースの下に、メソッド(GETやPOSTや)を作ります。 - Create Resource
さらに細かいリソースをつくれます。その下には、さらにリソースも作れますし、メソッドも作れます。
今回は一つリソースを作ってみて、そのしたにメソッドを作ってみます。
Create Resource
Actions -> Create Resourceをクリックします。
- Resource Name
ここは好きな名前で。 - Resource Path
URLになる部分です。 - Enable API Gateway CORS
これにチェックを入れておくと、自動でCORS(Cross-Origin Resource Sharing)用のOPTIONSメソッドも作ってくれます。
Webアプリから呼び出す際に便利です。
ではCreate Resourceをクリックします。
できました。
先程、Enable API Gateway CORSのチェックを入れていたので、自動でOPTIONSメソッドを作ってくれています。
(あれ、Resource Nameはどこへ…?)
では、今回はGETとPOSTの2つのメソッドを定義してみます。
Create Method
同じくActionsメニューから、Create Methodをクリック。
真ん中ペインのツリーに、コンボボックスが現れました。
ここでメソッド選んで、✔をクリックします。
なにやらオプションがいっぱい…
ここでは、Lambdaから呼び出したので、Integration typeはLambdaにします。
Use Lambda Proxy Integrationというオプションがありますが、オンにすることをおすすめします。
たくさんのイベントを取得できます。
(そのかわり、戻り値にもルールがあります)
Lambda Functionには、例で作った hello-world-py3
を入力します。
名前は補完してくれます。
Use Default Timeoutはオンにしておくと、最大の29秒(29000 milliseconds) で処理してくれます。
オフにすると、自分で選べます。短くすることはできますが、29秒より長くすることはできません。
何やらダイアログが出ますが、これは「指定したLambdaを呼び出すために、API Gatewayに権限を与えますよ。」ということなので、素直にOKします。
GETメソッドができました。
POSTメソッドも作る
次回予告
長くなりそうなので続きは別記事に書きます。
次回:Lambdaでお手軽サーバーレス入門(Lambdaのイベント from API Gateway編)