AWS Lambda + Amazon API Gateway の使い道

読了まで:約5分


僕個人と​しては、

  • [[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 が​向く​使い道

と​して​僕が​思い付いている​使い方は、

  1. Node.js (Lambda) での​ Server-Side Rendering Frontend と​しての​利用
  2. ランタイムを​問わず、​Web hook の​ callback 先と​しての​利用
  3. 簡易フォームなどの、​VM の​ インスタンスを​立てるまでもない​処理

辺りです。

それで、​2 番と​ 3 番に​関して​言えば、​これは​ CGI 代わりに​使う、と​いう​感じの​イメージですが、​1 番に​ついて​もう​少し​説明と​言うか​アイディアの​詳細を​書くと、

  1. Lambda では​ Node.js v4 を​ Runtime と​する
  2. API Gateway は​ Routing に​用いる
  3. 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]] を​載せたり、​あるいは、​ [[フロントエンドサーバ]] を​ [[コスト削減]] しつつ用意する、と​いう​用途には​かなり​向くのでは?と​僕は​感じているので、​もし案件等に​合えば、​使ってみるのも​手じゃないかなーと​思います。

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。