AmazonのCTOであり、AWSクラウドの生みの親とも言えるヴァーナー・ボーガス(Werner Volges)博士はモダンなシステムアーキテクチャに関連していくつもの名言を残していますが、その中でも10年以上前からことあるごとに繰り返している有名なフレーズに「Everything fails all the time.」があります。すべてのハードウェア、すべてのアプリケーションはいつか必ず壊れ、落ちるものであり、ビルダーはそのことを前提にしてシステムを設計する必要がある ―12月15日(米国時間)、オランダ・アムステルダムから行われたヴァーナー博士による「AWS re:Invent 2020」のキーノートでは、このフレーズに込められたクラウドアーキテクチャの基本に立ち返った、かつ非常にイノベーティブなサービスが発表されました。それが「AWS Fault Injection Simulator(FIS)」です。
AWS FISはNetflixによって確立された可用性向上のアプローチ「ケイオスエンジニアリング(chaos engineering)」をフルマネージドで提供するサービスです。ケイオスエンジニアリングとは、AWSの長年のパートナーであり、世界をリードする先進的なクラウド事例をいくつも発表してきたNetflixによって確立されたクラウドの耐障害性を向上させるアプローチです。ケイオスエンジニアリングは、Amazon EC2やAmazon ECS/EKSで実行中のワークロードに対してさまざまな障害を人為的/実験的に発生させ、障害に対するシステムの挙動を観察し、障害対策を強化していくことを目的にしています。AWSはNetflixとともに培ってきたケイオスエンジニアリングのノウハウをフルマネージドサービスとして、2021年から提供する予定となっています。
“混沌”を自ら起こしノウハウを蓄積する意義
AWS FISではサーバの遅延やデータベースエラーなど、システムの中断(Fault)を引き起こす"実験"テンプレートを事前に作成し、それをテスト環境などに障害注入(Injection)してシミュレーションを実行します。ここで重要なポイントは障害を発生させることではなく、障害に対してシステムがどうふるまうかを観察し、アプリケーションの弱点や監視の盲点をあぶり出すという点です。
ボーガスCTOはキーノートで「障害が起こったとき把握すべきは"何が壊れたのか"と"なぜ壊れたのか"、この2つだ」と語っていましたが、数百のマイクロサービスで構成される分散システムの場合、サービスどうしが予期しない相互作用(インスタンス障害後にAPIの呼び出し回数にスロットリングがかかる、CPU使用率が急激に上がる、など)を引き起こすことも稀ではありません。そして予測し得なかったふるまいや相互作用はときに、ビジネスに壊滅的な打撃を与える障害へと変わります。こうした危機的な事態を回避し、障害の影響を最小限にとどめ、よりレジリエンスのあるシステムへと変化していくためにも、想定できない挙動を明らかにするケイオスエンジニアリングは非常に有効であることは間違いありません。
AWSによれば、FISの対象となるサービスは現時点でAmazon EC2、Amazon ECS/EKS、Amazon RDSとなっていますが、ニーズに応じて対象サービスを拡大する予定だとしています。ユースケースとしてはテスト環境での利用がもっとも一般的ですが、ユーザが構築済みのCI/CDパイプラインと連携し、本番環境でケイオスエンジニアリングを実行することも可能となっています。
なお、2017年のre:Inventでケイオスエンジニアリングのデモを行ったNetflixのシニアケイオスエンジニア ノラ・ジョーンズ(Nora Jones)氏は「(Netflixにおいて)ケイオスエンジニアリングはテストを置き換えるものではなく、本番環境で日常的に障害や遅延をインジェクションし、レジリエンスを確かめるための手段」と語っており、本番環境で使ってこそケイオスエンジニアリングの本質が発揮されると強調していました。
NetflixやAmazonといった巨大な企業でのブラッシュアップを重ね、すべての企業が利用できる"実験"として提供されるAWS FIS。わざと障害を起こしてシステムに一定の負荷をかけ、より弾力性のあるシステムへと変化させるケイオスエンジニアリングが、どんなユースケースを一般企業にもたらすのか、非常に興味深いところです。