はじめに
Azure で VMを作成しようとした際に知らないエラーメッセージが発生して戸惑いました。対処方法は調べて分かったものの、対処が適当なのか理解するために背後の仕組みも調べたためメモとして残します。
遭遇した現象
Azure でVMを作成しようとしたところ、以下のようなエラーメッセージが出て、VMが作成できませんでした。
リソースプロバイダー Microsoft.Compute はサブスクリプション <サブスクリプション名> に登録されておらず、サブスクリプション <サブスクリプション名> のリソースプロバイダーを登録するためのアクセス許可がありません。
サブスクリプションは別担当の方にあらかじめ用意していただいていたものを使用しています。
原因調査
リソースプロバイダーとは?
Azure ではリソース管理に Azure Resource Manager (ARM) という共通レイヤーを提供しており、Azure PowerShellやAzure portalなどのクライアントは、ARMを通じてリソースの管理を行います。
ただしARM本体には直接リソースを管理する機能はなく、リソースプロバイダーによりリソースの管理を行います。
画像引用元: https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/get-started/how-azure-resource-manager-works
リソースプロバイダーはサービスごとに分けられており、例えば、仮想マシンリソースを提供するリソースプロバイダーは Microsoft.Compute
というネームスペースが与えられています。
各サービスに対応するリソースプロバイダーによりサブスクリプション内にリソースがデプロイされますが、そのためにはサブスクリプションにリソースプロバイダーを登録しておく必要があります。
なぜエラーが発生したのか?
サブスクリプションのリソースプロバイダーのページを見ると Microsoft.Compute
プロバイダーの状態が NotRegistered
になっており、サブスクリプションにVM作成に必要なリソースプロバイダーが登録されていませんでした。
MSのドキュメントには以下のように記載されており、通常はリソース作成時にリソースプロバイダーが自動登録されそうです。
ポータルを使用してリソースを作成すると、通常、リソース プロバイダーが自動的に登録されます。
実際 Microsoft.Compute
リソースプロバイダーが登録されていない、別のサブスクリプションでVMを作成しようとしたところ、今回のようなエラーは出ず、Microsoft.Compute
リソースプロバイダーが勝手に登録されました。
しかし今回の環境では、私のアカウントには当該のサブスクリプションに対して閲覧者ロールのみが付与されており、サブスクリプションを変更する権限がありません。
したがってVMを作成しようとした際に、権限不足によりサブスクリプションにリソースプロバイダーが自動的に登録されず、今回のエラーが発生したと思われます。
実施した対処
権限を持っている担当の方に Microsoft.Compute
リソースプロバイダーをサブスクリプション登録してもらったところ、上述のエラーが出なくなり、VMの作成ができました。
おわりに
研修では各Azureサービスの操作方法や概念などを学びましたが、まだまだ細かいところまで理解できていないなと感じました。どのリソース同士がどういった関係で、その背景には仕組みや設計思想があるのかまで理解できると良いなと思いました。