僕個人としては、
- [[AWS Lambda]] + [[Amazon API Gateway]]
という組合せは、現代に黄泉返った [[CGI]] みたいなモノだと認識しているのですが、この [[AWS Lambda]] + [[Amazon API Gateway]] 、上手く使えば Web サービスの質を向上させたり、あるいは、経費削減とかも可能になるのでないか (未検証) と思っています。
しかしながら、 [[AWS Lambda]] + [[Amazon API Gateway]] と言う組み合わせは、ひとクセもふたクセも有る代物なので、今回はその辺りも含め、ザックリと [[AWS Lambda]] + [[Amazon API Gateway]] の使い道について書いてみます。
※ ただし、僕の視点は、あくまで Web 開発者としてのモノです
1. この組合せで出来るコト・出来ないコト
基本的に、
- [[AWS Lambda]] + [[Amazon API Gateway]] という組合せ
の、出来るコト出来ないコトは、それぞれのサービスの制約の集合になります。
これは例えば、
- [[Amazon API Gateway]] は UTF-8 なレスポンスしか返せない
- [[AWS Lambda]] は、特別なコトをしなげれば、特定の言語しか動かせない
- [[AWS Lambda]] は、処理時間に制約が有る
という辺りなんですが、逆に言えば、これらの制約が問題と成らなければ、基本的に何にでも利用できます。
2. Lambda + API Gateway の使い道
今の所、
- AWS Lambda + API Gateway が向く使い道
として僕が思い付いている使い方は、
- Node.js (Lambda) での Server-Side Rendering Frontend としての利用
- ランタイムを問わず、Web hook の callback 先としての利用
- 簡易フォームなどの、VM の インスタンスを立てるまでもない処理
辺りです。
それで、2 番と 3 番に関して言えば、これは CGI 代わりに使う、という感じのイメージですが、1 番についてもう少し説明と言うかアイディアの詳細を書くと、
- Lambda では Node.js v4 を Runtime とする
- API Gateway は Routing に用いる
- Lambda + API Gateway からの Backend の問合せには GraphQL 辺りを使う
という感じです。
そして、なぜ
- Lambda (Node.js v4) + API Gateway を Server-Side rendering の Frontend
とするのが良いのかと言うと、理由としては、AWS にインフラを集約している場合、 Node.js での Server-Side Rendering を行うためだけに VM のインタンスを用意する必要がない 、と言うのと、あとは、 [[GraphQL]] などの、API 用の Interface を間に挟む事によって、Backend 側の更新などが行いやすくなる、という辺りです。
まあ基本的には、
- [[Frontend]] と [[Backend]] が疎結合となり、 [[コスト削減]] にも繋がる
という辺りがメリットだ、と僕は思っています。
ただまあ、最近開発とか出来てない影響で、これについては未だに検証出来てないので、実際のサービス運営でそれが通じるかどうか、については、未知数ですが。
まあでも、基本的には Lambda + API Gateway は、あんまりコストが掛らない、という認識なので、まあ多少はなんとかなると思いますけども。
3. ただし、やり過ぎには注意
ただまあ、いくら Lambda + API Gateway がコストが抑えられて気楽に使えるから、と言っても、それですべてを完結させる CGI-like な 環境として使うのは、ちょっとどうかなーって思っています。
と言うのも、特に僕にとっては、
- AWS Lambda + Amazon API Gateway + 何かのデータストア
で完結させられるサービスを作るのは、楽だしコスト安いし、マネーを投下し続ければ無限にスケールするし、で、良い事づくめな印象なんですが、いかんせん AWS に強く依存してしまうので、インフラを乗り換えにくくなる、と考えられますし、また、AWS のインフラがなんらかの事情で止まってしまうと、そのサービスも無論死にます。
そのため、ミッションクリティカルと言うか、完全なサービス停止が要件上出来ないサービスに、この組合せを用いるのは、ちょっと止めといた方が良いんじゃないかな、と僕は思います。
ただ、そうは言っても、ちょっとした Web Application で、Heroku とかでもオーバースペックな用途だと、
- AWS Lambda + API Gateway を CGI-like に使う
と言うのは、結構良い選択肢なんじゃないかなー、と僕は思います。
と言う事で以上です
まあ、 [[AWS Lambda]] + [[Amazon API Gateway]] という組合せは、簡単な [[Web Application]] を載せたり、あるいは、 [[フロントエンドサーバ]] を [[コスト削減]] しつつ用意する、という用途にはかなり向くのでは?と僕は感じているので、もし案件等に合えば、使ってみるのも手じゃないかなーと思います。