AWS Lambdaのようなサーバーレスコンピューティングサービスの良いところは、サーバーそのものを抽象化してしまうことだ。それによってデベロッパーは、下層にあるインフラストラクチャのことを気にせずにアプリケーションを作れるが、しかしいくつかの問題も生じている。静的なサーバーが目の前になければ、プログラムをどうやって実動状態でデバッグするのか? イスラエルのRookoutは、その最新のリリースでこの問題を解決した。
同社はこれを、サーバーレスのコードに“ブレークポイント”をマークすることによって実現した。それによりRookoutは、サーバーレスのコードに関するデベロッパーが定義した情報を集めることができ、アプリケーションがサーバーレスの環境で実際に動いているときでも、問題を調べることができる。
こういう‘トレース’と呼ばれる機能は、従来のアプリケーションのデバッグでよく使われるが、サーバーレスのアプリケーションではかなり難しい。それは、アプリケーションがその上で動いている恒久的なマシンがそこにないからだ、とRookoutのCEO Or Weisは語る。
“すなわちサーバーレスでは、ソフトウェアが新しい環境ではどう動くかを予測するのがきわめて難しい。そもそも、ソフトウェアが実際にどこで動いているのかわからないし、だからプロダクションの段階でどう動くかも、ほとんど予測できない”、とWeisは述べる。
彼によると、これまでの唯一の方法は、コード中にログライン(ログ出力行)とSDKの呼び出しをたくさん書くことだったが、そうするとそれらの管理がまた難作業になるので、Rookoutとしては最初からそれは避けたかった。むしろ同社は、コード中で起きていることが分かる/見られるためのインタフェイスを提供することによって、デベロッパーがサーバーレスの環境で動いているライブのコードを、従来のアプリケーションのデバッグと同じやり方でデバッグできるようにした。
そのインタフェイスから得られる情報は、既存のアプリケーションパフォーマンス管理ツール(New Relicなど)や、Splunkのようなログ管理ツール、PageDutyのようなアラートツールなどと共有できる。あるいはそれらの情報から直接、コードの問題を発見してフィックスすることが、できる場合もある。
サーバーレスコンピューティングはサーバーがないという意味ではないが、アプリケーションを動かす専用のサーバーはない。ベンダーが提供するのはサーバーではなく、アプリケーションが発するイベントトリガーに対応する、必要なだけのサーバーリソースだ。イベントが起きるとそのコードが動き、それに対し顧客は課金される。サーバー本体を割り当ててその上でアプリケーションを動かし(動かさなくても!)料金を払う、という従来の開発方式とは、極端に対照的だ。サーバーレスでもコードを動かすのはサーバーだが、それはベンダーのものなのでユーザーは課金されない。ユーザー(デベロッパー)が課金されるのは、起きたイベントに対して実際にコードを動かしたぶんだけだ。
__
Rookout Lambdaデバッガーのデモビデオ: