銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Azure Chaos Studio を試してみる サービス直接ターゲット編

f:id:tanaka733:20220118233433p:plain 先日、カオスエンジニアリングをマネージドサービスとして提供するAzure Chaos Studioが発表され、プレビューとして利用できるようになっています。

azure.microsoft.com

docs.microsoft.com

せっかくなので試してみようと思い、いろいろやった結果をまとめておきます。

Chaos Studioの概念

ドキュメントでいうとここからのセクションに説明されています。

docs.microsoft.com

一番大きな単位が「カオス実験」で、どんな障害をどんなリソースに実行するかが記述されています。 どんな障害を「ロジック」として定義し、どんなリソースにを「セレクター」として定義します。この2つがカオス実験を構成する単位です。 ロジックは1つずつ逐次実行する「ステップ」から構成され、ステップは同時に実行される「分岐(Branch)」から構成されます。 分岐は対象となるリソースをさらに定義するセレクターと、なにを実行するかの「アクション」で構成されます。 アクションは、障害もしくは待機の2種類があります。 これらの組み合わせで1つの実験を定義し、実行することになります。

現在利用できる障害は以下の3種類にわけられるようです。

  • サービス直接ターゲット: Azureのサービスに直接作用する
  • エージェントベース: OSにインストールしたエージェントが作用する
  • Chaos Mesh: AKSクラスター上のkubernetesリソースにChaos Meshを利用して作用する

まず、サービス直接ターゲットを使ったものを試してみました。

CosmosDBにサービス直接ターゲットを設定して障害を起こす

試したアクションはCosmosDBをFailoverさせるものです。基本的にはこのドキュメントに沿って設定すればOKです。が、いくつかはまったところがあるのと、実は最終的に実験の結果がFailedになってしまい未解決です。

docs.microsoft.com

まずはCosmosDBを用意します。Failoverさせることから、読み取りリージョンを1つ以上追加しておかないとあとで設定できなくなります。 f:id:tanaka733:20220118232721p:plain f:id:tanaka733:20220118191744p:plain

空だとさみしいので、コンテナとアイテムを用意しておきました。実験を実行するだけの場合、なくてもかまいません。

f:id:tanaka733:20220118185203p:plain

まず、Azure Chaos Studioのページから対象となるリソースを選択します。そして、大事なことですが、ポータルの言語を英語にしておきます。Previewのせいなのか、日本語だとロジックがうまく実行できませんでした。最初日本語で作成していたので画面キャプチャは日本語になっています。

f:id:tanaka733:20220118185259p:plain

実験を作成します。このときのリソースグループとリージョンは対象と一致していなくてもよいはずですが、今回は同じものを選んでいます。

f:id:tanaka733:20220118185748p:plain

実験を作成したら、ロジックを作成します。ステップとブランチ1つの中に、障害アクションを1つ作成します。

f:id:tanaka733:20220118185839p:plain

翻訳の表記ゆれをしていますが、フォールトの選択で障害の種類を選びます。CosmosDB Failverを選びます。

f:id:tanaka733:20220118185903p:plain

どのリージョンにFailoverさせるかを選択します。ここで注意しないといけないのは、Failover先は対象のCosmosDBの読み取りリージョンとして追加されたものでないといけません。そして、ポータルの言語が日本語のときの問題はここで発生しました。例えばここで「英国西部」を選択していますが、すると「英国西部」という値がアクションに設定されてしまい、実験の実行時に「英国西部」なんていうリージョンはないとエラーになります。正しくは「UK West」ですが、これを設定するためにはポータルを英語表示にする必要がありました*1

f:id:tanaka733:20220118192036p:plain

どのCosmosDBを対象にするかを選びます。

f:id:tanaka733:20220118190102p:plain

これで実験は作成できました。この後、セキュリティーのため、対象となるCosmosDBにこの実験を操作してもよいという許可設定をする必要があります。カオス実験はマネージドIDを利用しているので、CosmosDBのIAMの設定でロールを追加します。「Cosmos DB 演算子」というロールを選びます。Cosmos DB Operatorの訳のようです。

f:id:tanaka733:20220118190416p:plain

マネージドIDを選びます。カオス実験につけた名前でIDが作られています。

f:id:tanaka733:20220118190507p:plain

実験の実行はChaos Studioのページから行います。実行履歴も確認できます。

f:id:tanaka733:20220118233010p:plain

実行すると、実際にフェールオーバーが起きたことを確認できます。

f:id:tanaka733:20220118193006p:plain

10分経過後、フェールバックして元のリージョンに戻ったところまで確認できたのですが、なぜか実験はFailedになっており、詳細メッセージもありません。

f:id:tanaka733:20220118233149p:plain

まだプレビューということもあり、動作が不安定なのでフィードバックしています。次回はエージェント方式の障害を試してみようと思います。

*1:実際に設定されている内容はJSONビューで確認できます。

Azure CLIを使ってaz aks createでOperation failed with status: 'Bad Request'.と出たときの対処

Azure CLIでログインはできていて他のコマンドはうまく動くのにaz aks createだけ次のようなエラーが出ることがあります。

Operation failed with status: 'Bad Request'. Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details. (Details: adal: Refresh request failed. Status Code = '401'. Response body: {"error":"invalid_client","error_description":"AADSTS7000222: The provided client secret keys are expired. Visit the Azure Portal to create new keys for your app, or consider using certificate credentials for added security: https://docs.microsoft.com/azure/active-directory/develop/active-directory-certificate-credentials\r\nTrace ID: <UUID>\r\nCorrelation ID: <UUID>\r\nTimestamp: 2021-05-27 14:19:46Z","error_codes":[7000222],"timestamp":"2021-05-27 14:19:46Z","trace_id":"<UUID>","correlation_id":"<UUID>","error_uri":"https://login.microsoftonline.com/error?code=7000222"} Endpoint https://login.microsoftonline.com/<UUID>/oauth2/token?api-version=1.0)

ここにあります。

docs.microsoft.com

AKS クラスターのサービス プリンシパルの資格情報は、Azure CLI によってキャッシュされます。 これらの資格情報が期限切れになると、AKS クラスターのデプロイ中にエラーが発生します。

ただ、この手順で確認するコマンドといっているls -laは最終更新日なのでどうもこれを見ても確認できなさそうです。とりあえず$HOME/.azure/aksServicePrincipal.jsonファイルを削除してaz aks createコマンドを再実行したところうまく動きました。

AZ-301に合格して、Azure Solutions Architect Expertを取得しました

先日、AZ-300に合格しました。

tech.tanaka733.net

かなりぎりぎりで合格したので、もっと準備してからAZ-301を受けるつもりだったのですが、AZ-300と301がAZ-303と304に更新されるニュースがありその時点ではAZ-300とAZ-304の組み合わせでOKか不明だったので早めにAZ-301を受験することにしました。結果は今回もかなりぎりぎりですが合格し、無事にAzure Solutions Architect Expertを取得しました。

なお、AZ-303と304の変更については、そのあと更新があり、AZ-300と304のような組み合わせでもAzure Solutions Architect Expertを取得できるとのことです。こちらのブログの最後にある「Updates to Azure certification exams announced in January 2020」のリンクからみられるPDFの「7. Do exams AZ-300 and AZ-301 and new exams AZ-303 and AZ-304 need to be a matched set in order to achieve the Azure Solutions Architect Expert certification?」をご確認ください。

www.microsoft.com

AZ-301のために行った勉強ですが、基本的にAZ-300のときと同じです。資格試験のページに対応するMicrosoft Learnのラーニングパスが載っていますが、AZ-300と同じです。

docs.microsoft.com

AZ-300のときに一通りやっていたので、今回はもう一度おさらいしました。ハンズオン部分は、時間がなかったこともあり実際にはやらず手順を読んで確認するにとどめました。

AADやExpress Route、Azure Site Recoveryなどは仕事でそういう要件を求められないとなかなか使わない*1ので、念入りに勉強しました。

最上位資格を取れたので、いったんAzure系の資格はこれで止める予定です。

*1:実際AADは基本機能だけ、それ以外はまったく使ったことがない