レガシーサーバーレスアプリケーションという負債
AWSによるサーバーレスソリューションの登場から早くも10年近くが経過した。この間、サーバーレスソリューションは数多くの企業やプロジェクトで採用されてきただろう。当初、開発の迅速化や運用の簡易化を約束したサーバーレスアプリケーションだが、その初期に構築されたものの多くが今やレガシー化してる。このレガシー化は、現代のアプリケーション開発と運用における一大課題へと変貌しているように思う。
https://cdn.pixabay.com/photo/2015/10/27/12/27/fire-1008926_1280.jpg
サーバーレスアプリケーションの魅力は、その簡便性にあった。しかし、簡単に作れるがゆえ、属人化が激しくなりがちで、多くのケースで開発者はもはやその場にないケースも多いだろう。さらに、サーバーレスなマイクロサービス間のネットワークトポロジーが不透明であったり、可観測性を確保するためのサイドカーの導入など、現代のサーバーアプリケーションの運用プラクティスを取り入れることも困難なのだ。
問題はこれだけに留まらない。サーバーレスアプリケーションは、ランタイムのEOL対応に追われることが多く、関数を更新しようとすると、すでにランタイムがEOLに達しているケースが頻出する。これは、アプリケーション開発のサステナビリティを大きく損なう要因となっているだろう。
さらに深刻なのは、AWS LambdaなどでWebアプリケーションを構築する際、FunctionのHandlerがProprietaryであるため、多くの場合Webフレームワークが使用されておらず、Web開発者にとってはメンテナンスが困難になりがちなのである。こうしたアプリケーションは、一般的なWeb開発の流儀に則っていないため、長期間にわたる運用が地獄と化している。
さらに、サーバーレスアプリケーションの開発が「サーバーアプリケーション開発経験がない人でも簡単にできる」という宣伝文句の影響で、素人が開発したような構成のアプリケーションが乱立し、運用がサステナブルではないケースも多いだろう。このように、簡易に開発できることが、かえって複雑で維持困難なシステムを生んでしまっているのである。
この問題を解決するためには、サーバーレスアプリケーションの開発と運用において、より厳密なガイドとベストプラクティスの遵守が必要である。既存のレガシーサーバーレスアプリケーションに対しては、徐々に改修を進めるか、時には大胆なリプレースが必要になるかもしれない。これらの課題に対応することで、サーバーレスアプリケーションの持つ本来の潜在力を最大限に引き出すことができる。
一般的なサーバーレスアプリケーションの運用が難しいとされる他の理由には、コールドスタートの問題、限定されたローカルテスト環境、依存関係の管理問題、セキュリティの懸念などが挙げられる。これらの問題にも適切に対応することが、サーバーレスアプリケーションの運用をよりスムーズにし、長期的な価値を提供する鍵となるのだ。