2023年6月6日

信頼性

Harness CDパイプラインのカオス試験

カオスエンジニアリングは、カオス試験を通常のCDパイプラインに自動化することで、開発者、開発チーム、そしてDevOps全体に素晴らしい利益をもたらします。このブログでは、HarnessのCDパイプラインにおけるカオス試験の利点と使用方法について説明します。

CD Pipelines.pngHarness CDのパイプラインにカオス試験を追加するのは簡単で、文字通り数クリックで完了します。必要なのは、デプロイステージにカオスステップを追加し、期待されるレジリエンススコアを選択することだけです。この記事では、Harness CDのパイプラインにカオス試験を追加する理由(ビジネスのパイプラインにカオス試験を追加するメリット)、何を(注入を検討する必要があるカオス試験のタイプ)、そしてどのように(エンドツーエンドの技術的詳細)カオス試験を実行するかについて詳細に説明します。

CDパイプラインでカオス試験を実行するメリット

組織がCDパイプラインでカオス試験を行う理由は次の通りです。

CD ROI対レジリエンスの未知数性

企業は、開発者の労力を軽減しながらより高い俊敏性を実現するために、CDパイプラインテクノロジーに投資してきました。このROIは、潜在的な信頼性の低下と相殺されているのでしょうか?偶然に任せるのではなく、想定されるカオスシナリオに対して出荷するコードのレジリエンスを検証するだけで、CDへの投資の最大限のROIを達成できます。

開発者の効率を向上する

開発者は、設計とアーキテクチャーの変更について最新の情報を入手していますか?パイプラインでの機能テストが成功しても、設計、アーキテクチャー、依存関係の変更の検証が成功することは保証されません。そして、全ての開発者がこれらの変更を深く理解しているわけではありません。うまく書かれたカオス試験は、パイプラインを壊すときに、これらの分野のギャップを開発者にすぐに知らせることができます。開発者は、設計のギャップや実装のギャップを、高いコストをかけて本番で行うのではなく、パイプラインの中で、最も早い段階で注意することになるのです。

レジリエンス負債を削減する

技術的な負債と同じように、本番サービスにも積み重なるレジリエンス負債があります。アラートやインシデントが本番環境に登録され、解決済みキューや監視済みキューに入ることがあります。これらのアラートやインシデントは、時にはホットフィックス/ホットコードパッチや設定変更につながることもあります。多くの場合、開発者はメモリーの増設、CPU の追加、ノードの追加などの回避策を追加するだけになってしまいます。どちらの場合も、製品チームはフィードバックを受けて、カオステストによる関連する検証テストをパイプラインに追加することで対応ができます。パイプラインのデプロイが承認される前に、関連するカオス試験を追加するよう、ポリシーを設定したり強制したりできます。例えば、コンポーネントの誤動作、(または)ネットワーク損失、(または)ネットワークの遅さ、(または)外部APIが期待通りに応答しない、(または)負荷の上昇などに起因する全てのインシデントとアラートは、そのようなインシデントやアラートから60日以内にパイプラインシミュレーションで対応するカオス試験を検証しなければならないというポリシーを設定できます。これにより、蓄積されつつあるレジリエンス負債をチェックする規律がもたらされることになるのです。開発者とQAチームは、新しい機能を量産に投入し続けることでレジリエンス負債を増やすのではなく、量産コードで修正する必要があるものに集中せざるを得なくなります。

CD Pipelinesのカオス試験のユースケース

CD Pipelinesは、新しいコード変更をデプロイするときに実行されます。機能テストと統合テストは、最近の変更が期待される機能を壊していないか、新しい機能が期待通りに動作しているかを確認するために実行されます。パイプラインの実行は、新しいコードの機能の検証に加えて、以下のレジリエンスシナリオを検証する機会を提供します。

Use cases for chaos engineering in CD pipelines.pngCD pipelinesにおけるカオスエンジニアリングのユースケース

デプロイを既存のレジリエンス条件と照らし合わせて検証する

パイプラインのレジリエンスカバレッジは常に低い数値から始まり、適切に自動化した場合にのみカバレッジを増やすことができます。パイプラインを通じてデプロイされる全ての変更は、既に知られているレジリエンス条件に対してテストされます。これは、レジリエンススコアがターゲット環境において安定していることを確認するためです。

新たに追加されたレジリエンス条件に対してデプロイを検証する

デプロイされるコード変更は1つの側面ですが、パイプラインに追加された新しいレジリエンステストやカオス試験は、パイプラインの実行の重要性を増加させます。これは、レジリエンスカバレッジを高めることです。もし、レジリエンスカバレッジを増やすことでレジリエンススコアが下がるのであれば、まだ本番で障害が発生するほどではないが、今見ておく価値のある潜在的な弱点(つまり、回避できるインシデント)を見つけたことになります。これには、開発者が失敗したカオス試験を調査し、パイプラインを止めるか、今は無視して、復旧シナリオの文書化、SREへのメモ、設定変更の提案など、並行して行動を起こすことを決めることも含まれます。

ターゲットデプロイが動作するプラットフォームの変更

Kubernetes バージョンなどの基盤となるプラットフォームが変更されると、パイプラインで行われるテストに大きな注目が集まります。レジリエンススコアが低下することがありますが、これはアップグレードされたプラットフォームで新たな潜在的弱点が見つかったことを示しています。このシナリオは、プラットフォームの所有者や、これらのプラットフォームにデプロイするアプリにとって、非常に重要です。多くの場合、企業はKubernetesのアップグレードを行うのが遅れ、一度に複数のバージョン更新を行うことになります。通常、新しいバージョンはあまり多くの変更を導入しませんが、プラットフォームが遅れている場合、将来的にアプリチームに影響を与える潜在的な問題が発生する可能性があります。このようなアプリのCDパイプラインに自動カオステストを導入できれば、インシデントの際、後になって明らかになるような影響を先取りできるのです。

本番環境のインシデントやアラートに対してデプロイを検証する

このユースケースでは、SRE/Ops チームとパイプライン ビルダーの間で調整を行い、最近見つかったインシデントまたはアラートに関連するレジリエンステストを追加する必要があります。各インシデントやアラートは、データベースにまだ追加されていない場合、新しいカオス試験につながる可能性があります。

構成の変更に対するデプロイを検証する

新しい変更がソフトウェア内またはターゲットインフラ内の構成変更に関するものである場合、レジリエンステストによって潜在的な弱点に関する新たな知識がもたらされる可能性があります。これは、ターゲット環境が上位または下位の構成によって変更されたために、以前に合格したレジリエンステストが失敗し始めるという別のシナリオです。

Harness CDパイプラインへのカオス試験導入のためのステップバイステップガイド

開発者はカオスプロジェクトでカオス試験を作成します。その後、カオス試験はステップとしてパイプラインに取り込まれます。カオスステップの各実行結果は、期待されるレジリエンススコアを満たすか、満たさないかのいずれかであり、その時点でパイプラインステージの設定された失敗戦略を呼び出すことができます。

Adding chaos experiments.pngカオス試験をステップとしてCI/CDパイプラインに追加する

ステップ1:

カオス試験を作成して実行し、最後まで実行されることを確認します。関連するプローブは、レジリエンススコアに関する偽陽性または偽陰性のシナリオを回避するために追加されます。

Create a chaos experiment in Harness CE.pngHarness CEでカオス試験を作成する

ステップ2:

このカオス試験をカオスステップとしてパイプラインに追加します。

Adding Chaos Experiment as a step into Harness CD deployment stage.pngHarness CDのデプロイステージにChaos Experimentを追加する

ステップ3:

失敗戦略を選択してください。失敗戦略はCDステージ レベルで計画されます。これは、各カオス試験に対して構成することも、全てのカオス試験の実行終了時にシェル スクリプト ステップを通じて構成することもできます。

例1:パイプラインにカオス試験1つしかない場合の失敗戦略の設定

Setting Rollback as the failure strategy for a chaos experiment.pngカオス試験の失敗戦略としてRollbackを設定する

例2:複数のカオス試験をパイプラインに追加する場合

この場合、各カオスステップの予想レジリエンススコアを追加しますが、各試験の失敗ストラテジーを設定することはしません。代わりに、全てのカオスステップが実行された後に、別の条件付き失敗ステップ(シェルスクリプトベースのステップ)が追加されます。

Adding multiple experiments to a Harness CD pipeline.pngHarness CDパイプラインに複数の試験を追加する

シェルスクリプトは、全てのカオス試験のステップ結果(レジリエンススコア)にアクセスでき、状況に応じてカスタムロジックを記述できます。この条件付き失敗ステップのゼロでない戻り値は、ステージの失敗戦略を開始することか可能です。

まとめ

パイプラインにカオス試験を導入すると、ビジネスクリティカルなサービスの信頼性に大きなメリットがもたらされ、開発者の生産性が向上し、未知の要素を処理できないリスクが大幅に軽減されます。Harness CDとHarness CEを併用すると、パイプラインのデプロイ段階にレジリエンステストをシームレスに導入できます。

Harness Chaos Engineeringを始めましょう

Harness Chaos Engineeringは、カオスエンジニアリングのContinuous ResilienceTMアプローチをデプロイするために必要な、上記の構成要素で構築されています。これには、すぐに使える多くの障害、セキュリティーガバナンス、カオスハブ、CDパイプラインやFeature Flagsと統合する機能などが付属しています。

Harness the Chaos.pngHarness Chaos Engineering無料プラン


この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。

Harnessに関するお問い合わせはお気軽にお寄せください。

お問い合わせ