はじめに
株式会社ネクストスケープ、ソリューションビジネス部所属の小野塚です。
今回は去年の11月頃にGAになった「Azure Chaos Studio」を紹介しようと思います。
そもそも「Chaos Studio」が何ぞやというところからですが、これを知ったのが、さかのぼること2022年の6月頃にAzureの標準ガイドラインというものを読んだことがきっかけでした。
標準化ガイドラインの説明は割愛しますが、ここで「Chaos Studio」が簡単に触れられており、このChaos Studioを使うことでカオスエンジニアリングが実行できる、というものでした。
そうなるとカオスエンジニアリングとは何ぞや、になるのですが、上記標準ガイドラインの言葉を引用させていただきますと「アプリケーションやサービスに現実世界のストレスや障害を与え、信頼性の低い状態や依存性の欠落に対する回復力を構築し、検証すること」です。
つまりはAzureであればAzureの各リソースに対して「意図的に」障害を発生させ、それに対してどのように対処するか・対処できるかを確認するというもので、具体的にはサーバーに対してCPU負荷を与えて、それでも正しくサイトが表示できるか確認するといったことが挙げられます。
NetflixでもAWSでこのカオスエンジニアリングを行い、改善を行ったという話が以下のURLで説明されています。
テスト準備 VM作成
では、このChaos Studioを使ってAzure VMに対してCPU負荷をかけてみるところまで試してみたいと思います。
先ほどお話しした通り、Azureの各リソースに対して意図的にエラーといいますか、異常な状態を発生させるので、まずはそのリソースを作成する必要があります。
今回はUbuntuを載せたVMに対してCPU負荷をかけてみましょう。
今回はCPU負荷をかけて一旦良しとしますので、VM作成時の注意点は特にありません。
また、今回試す内容においては特に必要はないのですが、SSH接続を作成し、NGINX Webサーバーのインストールまで実施しておきます。
パブリックIPアドレスでWebサーバーが起動されていることを確認しておきます(わかりにくいですが、以下がブラウザでパブリックIPを叩いたときの画面です)。
テスト準備 ユーザ割り当てマネージドID
次にまたまた繰り返しとなってしまいますが、Chaos StudioはAzureのリソースに対して異常を発生させるものですので、それをするための権限設定の準備が必要になります。
今回はテスト対象となるVMに対して異常を発生させるために「ユーザ割り当てマネージドID」を作成します。
作ったことが無い方もいらっしゃるかもなので作成についても簡単に触れておきます。
まずはAzureポータル上部の検索欄に「マネージドID」と入力します。
そうするとマネージドIDが表示されると思うのでそれをクリックするといつものAzureのリソース作成画面に進みます。
作成にあたっては以下のようにあまり入力欄も無く、特に注意点も無かったかと思います。
ロールの割り当て
もう少し準備が続きます。
そして次の作業が今回の肝になりますので頑張りましょう。
VMに対してChaos Studioが操作を行うための権限付与作業となります。
先に目指すべき結果を共有しておきますと、VMで以下のように先ほど作成したユーザー割り当てマネージドIDに対してロールの割り当てを追加します。
必要なロールとしては以下の2つです。
・マネージド アプリケーションのオペレーター ロール
・仮想マシン共同作成者
これも簡単に手順を説明しておきますと、以下の画面のように「追加」ー>「ロールの割り当ての追加」を選択します。
以下のような画面になりますので、検索欄に上記2つのロールいずれかを選択して、「次へ」を押します。
次に「アクセスの割り当て先」で「マネージドID」を選択し、その下の「メンバーを選択する」を押し、画面右側に「マネージドIDの選択」ウィンドウが出てきますので「マネージドID」のプルダウンで先ほど作成したマネージドIDを選択し、更にその下に表示されたマネージドID(今回はUAI1という名前で作成しています)を選択します。
そのあとの操作は割愛しますが、このような手順で2つのロールをユーザー割り当てマネージドIDに割り当てます。
そしていよいよ最後の準備、ユーザー割り当てマネージドIDを開き、「アクセス制御(IAM)」から「追加」ー>「ロールの割り当ての追加」で閲覧者のロールを割り当てます。
以下がその実行結果となります。
実はこの「閲覧者」のロールがどのように影響するのかがちょっとわからないのですが、これを設定しておかないとテスト時にエラーとなりますので忘れずに設定しておきましょう。
テスト作成
では、いよいよテストを作成してみたいと思います。
Chaos Studioの画面に遷移し、「実験の管理」で「対象」を選びます。
そして最初に作成したVMを選択し、「ターゲットを有効にする」で有効にしておきます。
次にChaos Studioの左側のメニューから今度は「実験」を選択し、「作成」ー>「新しい実験」を選択します。
以下の画面でサブスクリプションとリソースグループ、テストの名前を入力します。
更に「Permissions」ではマネージドIDに作成したマネージドIDを設定します。
そして以下の「実験デザイナー」の画面、こちらで「アクションの追加」ー>「障害の追加」を選択します。
以下のような「フォールトの追加」ウィンドウが右側に表示されますので、フォールト、つまり発生したいエラーを選択します。
以下がプルダウンメニューを選択した状態です。
ここで「CPU Pressure」を選択します。
他にも「Cloud Serivce Shutdown」とか、「DiskIO Pressure」とか面白そうなものが色々ありますね。
こういったエラーをChaos Studioで発生させることができます。
そして、作成したテストの画面に遷移して、「開始」ボタンでテスト開始します。
そうすると「履歴」に実行した結果が表示されます。
詳細で実行中のテストの状態が見えるのですが、「詳細」というほど詳細ではないですね。。
これだけですと本当にCPU負荷がかかっているかどうかがさっぱりわかりませんので、VMの画面に遷移してメトリックを見てみます。
すると以下の様にちゃんとCPU負荷がかかっていることが確認できます。
このように非常に簡単に負荷テストを実行することができるわけです。
便利ですね。
最後に
以上が、Chaos Studioによるテスト作成とその実行結果となります。
今までであればJMeterでも負荷テストが行えましたが、Chaos Studioであればより簡単に、そしてリソースのシャットダウンや更には自動スケーリングの無効化といったAzureの機能に対するエラー(正しくは「フォールト」なので残りわずかですが、以下「フォールト」でいきます)も発生させることができます。
現時点でのフォールトの種類・内容が以下のページに記載されていますので参考にしていただければと思います。
GAされただけあって、私が以前プレビュー版を眺めたときよりも非常に種類が増えていますし、恐らく今後も更に増えていくかと思います。
機会があればまた別のフォールトを発生させ、更にそれに対してテストされる側が単にエラーにならず、回避・対応できるかどうかまで実行してみたいと思いますが、今回はここまでとしたいと思います。
弊社はMicrosoftのパートナーとしてこのようなAzureのさまざまなリソース・機能を利用したWebサイト、ツール開発を得意としており、更にはスマホアプリやHoloLensと多岐に渡って開発を行っております。
もしお困りの方がいらっしゃいましたら、是非お気軽にお問い合わせください。