Azure環境のパラメータシートの管理どうしていますか?
PXTの内田です。今回はAzureのパラメータシートについて私なりの考えがありまして、自社でAzureを運用している方や、AzureのSIに携わっている方向けに記事を書いています。
Azureの仕組みについて
本題に入る前に、前提となる知識について共有させてください。
Azure Resource Manager(以降ARM)というデプロイ モデルがあり、これがAzure上のクラウド サービスのリクエストを受け付ける入口になっています。
例えば「仮想マシン」を作成するという場合、私たちはARMに仮想マシン作成のリクエストを送ります。ARMは仮想マシンサービスを管理しているMicrosoft.Computeリソースプロバイダーに対して、そのリクエストを渡すことで、最終的にリソースプロバイダーがリソースを作成してくれます。
リソースプロバイダーは名前の通りリソース提供者であり、特定のAzureサービスの機能を有効化するREST操作のセットを管理しています。具体的には以下の2つです。
- リソースの構成情報(ARMテンプレート)
リソースがどのようなプロパティを持っているか
Azure resource reference – Bicep, ARM template & Terraform AzAPI reference | Microsoft Learn - リソースの操作(REST API)
どのようなユーザ操作が可能なのか
Azure REST API reference documentation | Microsoft Learn
Azureを触っているといつの間にか機能が追加されていることがありますが、これはリソースプロバイダーが自身が提供しているリソースのAPIバージョンを更新しているという感じです。ここまでの内容を図示すると以下になります。
ARMの下にリソースプロバイダーがいて、リソースプロバイダーがクラウドサービスの管理をしており、具体的にはクラウドサービスの設計書を管理しているという感じです。クラウドサービスに更新がある場合は、APIのバージョンをあげています。
パラメータシートをどのように作るべきか
それでは本題に入っていきます。最初に個人的に非推奨なパラメータシートの作り方を以下に示します。
- Azure Portalの画面に寄せて設定値を羅列すること
Azure Portalの画面は頻繁に更新されます。Portalの表示をイメージしてパラメータシートを作る場合、画面の更新に合わせてパラメータシートの体裁を修正しなくてはなりません。 - リソース作成時のコマンド、ポータルに対する入力値を羅列すること
CLIで作るときでも、GUIで作るときでも同じです。あそこで入力している内容というのは、ARMテンプレートのparam句に値をセットしていることを指し、それによって適当なARMテンプレートを作成しているだけにすぎません。
単体試験がやりづらいという理由もあります。作成した時のスクリーンショットを証跡にするしか、単体試験ができません。またリソースを作成した後で設定変更した時に、上記のような管理をしている場合どこの項目を修正するべきなのかわかりづらいです。
以上のような理由で、私は上記にあげたようなパラメータシートの管理が嫌いです。何より柔軟に設定変更ができるAzureのクラウドサービスとしての良さを打ち消してしまうのが嫌でたまらないです。
そういうわけであるべき姿を考えました。
Azureの根幹はARMが握っていますので、ARMに則した形でパラメータシートを作成するべきです。
実際に作成して活用した経験から、メリットを以下に示します。
- Azure Portalの画面の更新に影響を受けない
- 冪等性に準じていることがわかりやすい
- ARMテンプレートやBicepを作成しやすくなる
- 単体試験の実施が効率化できる
ARMに則したパラメータシートとは
結論から言うと、JSON形式のパラメータシートです。
Azureリソースの概要画面の右上の方に「JSONビュー」があります。以下の画像は実際に弊社のAzure環境で仮想マシンリソースのJSONビューを押した際の画面です。
これは冪等性を保証することができます。なぜならリソースプロバイダーがそのリソースタイプのAPIバージョンを指定した上で、その結果を表示しているからです。
とはいえ、JSONファイルをパラメータシートとして管理することを受け入れてくれる会社はまずないでしょう。私たちSIerは、このJSONファイルを視覚的にわかりやすいExcelに落とし込んであげる必要があります。
ツール作りました
というわけでツールを作成しました。
コンフィグファイルにサブスクリプションの情報や、リソースプロバイダーが提供しているリソースの種類のAPIバージョンを指定して実行するだけです。
そのAPIバージョンに準じたリソースの設定値をJSONで抜き出した上で、Excelで取り扱いやすいようにそれを整形してデータファイルとして出力します。そのファイルをExcelで読み込めば完成です。
完成したパラメータシートのサンプルを示します。弊社の検証環境の値が入ってしまっているので、ぼかしています。リソースの種類を選択すれば、それに該当するリソースの設定値が、ぼかしている箇所に表示されるという感じです。
ツールはGitHubで公開しています。バグがあっても責任は負えないので悪しからず。
hogeda/AzureUnitTestTool
終わりに
Azureを利用しているけど、パラメータシートの追随が追い付かなくて大変。
BicepとかARMテンプレートを使ってリソースのデプロイを管理してるけど、扱える人が少ない。
こういったことに活用していけるのではないかと考えています。
弊社はAzureのSIをしていますので、Azureをよりよく活用していきたいという場合にはお気軽にご連絡ください。