Azureリソースの単体試験は予め設計していたプロパティに適切に値が設定されていることを確認するというものです。 作成するリソースの数に比例して単体試験の負担が増えますが、こんなことに労力をかけたくはありません。 クラウドサービスですので、ポータルの画面がプロジェクト期間の中で変更され、単体試験の手順見直しなんてこともあります。
AzureはAzure Resource Managerというデプロイモデルで管理されており、その実態はリソースプロバイダーという名前空間が、 リソースタイプのプロパティや振る舞いをAPIとして定義しています。 リソースタイプに関する更新はAPIバージョンの更新であり、プロジェクト期間中同じAPIバージョンを叩いているのであれば、 ポータル画面の変化に囚われず常に一貫した単体試験結果を得ることができます。
本ツールでは、単体試験の対象とするリソースタイプと、それで用いるAPIバージョンをコンフィグファイルとして定義します。 コンフィグの情報に基づいてサブスクリプション上のリソースのプロパティを抜き出すことを目的に作成しました。
また単体試験はパラメータシートとの比較となりますが、パラメータシートはExcelで作成する機会が多いです。 ExcelではJSONを取り扱いづらいので、リソースの情報はJSON構造をドット記法に変換してCSVファイルとして出力します。 それをExcelで読み込み、リソースIDとドット記法の組み合わせをキーとしてデータを探索することで、 目的のプロパティの値を簡単に取得することを実現します。
またリソースのプロパティを取得した際に、パラメータシートで定義していない項目がたくさん取れるかと思います。 例えばProvisioningStateやTimeCreationなどです。 不要なデータは予めフィルターすることで処理時間の短縮につながるため、フィルター機能を付けています。
- ツールによるAzureへの接続にはサービスプリンシパルを用います
- サービスプリンシパルの認証方式はシークレットにのみ対応します ※証明書認証方式はBearerトークンを取得するための、REST本文の作成が難解で断念しました
- Powershellのバージョンは7.0以上で動作します。必要に応じて以下からダウンロードしてください。download
コンフィグファイルにおいて、リソースタイプそれぞれに「visible」という項目が存在します。 ここに記載されているドット記法のみを最終的にはCSVファイルとして出力するように実装しています。 ※なおvisibleが存在しない、存在するが何も値が入っていないという場合には、何もフィルターせずに全てを出力します。 ※何も出力するものがないということであれば、リソースタイプごとコンフィグファイルから削除してください
ドット記法には配列も含まれます。例えばNSGのセキュリティルールにおいては、securityRulesというオブジェクトの配列があり、 その配列の要素として受信/送信の規則が存在しています。(securityRules[0].priority、securityRules[0].nameといった形で) 配列のドット記法を記載する際には[]内のインデックスの数字を削除して記載してください
リソースタイプ毎にどのAPIバージョンを用いるか、どのプロパティを出力させるかを決めて作成するのは意外とハードルが高いので、コンフィグファイル作成の補助ツールを用意しています。 これは選択したリソースタイプの最新のAPIバージョンをセットするとともに、選択したリソースタイプのリソースをサブスクリプションから適当に取得してきてそのリソースのドット記法の全てをvisibleにセットするというものです。 サービスプリンシパルを作成した後に、この補助ツールを元にコンフィグファイルを作成して、APIバージョンやvisibleを手動で修正することをお勧めします。
コンフィグファイルは「.\config\GetAzureResourceDotProperty.config.json」というファイルです。 JSONの構造を以下に示します。
| 項目名 | 説明 |
|---|---|
| authentication.tenantId | Microsoft Entra IDのテナントID |
| authentication.clientId | サービスプリンシパルのクライアントID |
| authentication.clientSecret | サービスプリンシパルのシークレット |
| subscriptionId | サブスクリプションID |
| resourcesProperty.type | リソースタイプ |
| resourcesProperty.apiVersion | プロパティ取得に用いるAPIのバージョン |
| resourcesProperty.visible | 結果を出力する際のプロパティの一覧 |

