先月、WEB+DB PRESS vol.105の特集「サーバレス」にJX通信社のメンバーとして寄稿いたしました。
紙面の都合上、泣く泣く削った部分もあったりして、伝えきれなかったところがあります。Twitter 上でもらった質問などもあるので、いくつか補足します。
紙面では「サーバレス」という表記で統一したのですが、以降は「サーバーレス」という表記を取ります。
サーバーレス特集の意図
サーバーレス特集で特に意識したのは、次の2つです。
- 「実務」としてはどうあるべきか
- 「サーバーレス」というものに共通する本質
「実務でどうあるべきか」というのは、「サーバーレスで作る」といっても結局は「システム開発」である、ということです。システム開発であれば、当然チーム開発になりますし、ユニットテストだったり、ローカル環境の整備だったり、監視やCI/CDだったりが担保されている必要があります。そして、システムとしては特定の環境に依存するべきではないです。サーバーレス特集は、そのあたりの観点を重要視して構成しています。(特に後半の章が関係してきます!)
そして、Firebase特集がかぶってるという事情もありLambdaを題材にしてはいるのですが、「サーバーレスそのものの本質」というところを意識しています。「AWS Lambda」でもなく「Firebase Cloud Functions」でもなく、「クラウド」ですらなく、「サーバーレスそのもの」の話です。そのため、第一章では、クラウドではないオープンソースなサーバーレスについて触れています。
「実務でどうするか」と「サーバーレス自体の本質」というのは、既存の入門書・入門記事にはないメリットを目指しています。そのため「すべてのユースケースに対応する1冊」ではないかもしれません。
サーバーレスの本質とは何か
「サーバーレスとは何か」を説明するのは、毎回悩むのですが、理論上は常駐プロセスが存在せず、リクエストに応じたキャパシティを必要なだけ柔軟に確保するものという定義が一番近いと考えています。クラウドである必要はなく、ただ、そういうアーキテクチャーで作ってればクラウドベンダーがPaaSを用意するのが必然的であるというだけです。そして環境としては「ただの使い捨てのLinux*1」です。
しかし、実際のところは、サーバーレスには関連する技術領域があります。安価にシステムを作れるものであり、スケーラビリティの救世主であり、クラウドに依存するものであり、マネージドサービスの玉突きによってアーキテクチャーを作るものであり、マイクロサービスを突き詰めたものであり、Twelve Factor AppやIaaS->PaaS->BaaSの進化の果てでもあります。しかし、このあたりは話題として広くなってしまうため、深掘りできていない部分でした。
サーバーレスやLambdaは具体的に何に使えるのか
こちらはTwitterで質問をいただいたものです。
答えとしては、処理が短時間で完了するものであれば、何でもできるとなります。「ただの使い捨てのLinux」だからです。
例えば、Lambdaを使って機械学習することもできるし、Lambda上で(対応してない)ScalaやRustを動かすこともできます。APIだけじゃなくHTMLを返したりもできますし、ニュースの解析エンジンだったり、特集に書いたようなログ基盤もできます。
ただし現実的には、次の3つの用途が多いでしょう。
cron 的なバッチ処理や AWS との連携に関しては、Engineer Hub に寄稿した「ウェブサイトやデータベースの監視」というのが参考になると思います。
ログ基盤の可視化
こちらはさらっっっっっとだけ触れたのですが、Redashを使っています。
ECS に作った Docker クラスター上にデプロイしています。
そして、Slack 上で KPI の変動を監視しています。(参考:Gunosyデータ分析ブログ)
Redash やログ基盤周りは永遠に語れる気がするので、語りたいですw (ちなみに、すでに収まらなかったのでこの章は増ページしています)
おわりに
サーバーレス特集で伝えきれなかったところを書きました。
すでに読んでいただいた方で質問があったら、 @yamitzky までお願いします。
もしまだ読んでない方がいたら、お買い上げいただけたら幸いです。
*1:とかのOS