リソースとは
Azure では様々なコンポーネントが『リソース』として管理されています。
例えば Azure の初期状態で VM を 1 台作るにしても、以下のようなリソースが一緒に必要であったり、もしくはオプションとして利用することができます。
- VM 本体 (CPU やメモリ含む)
- ディスク
- 仮想ネットワーク (その中にさらに『サブネット』という概念がある)
- NIC (サブネットに所属させる必要がある)
- パブリック IP (インターネットからのアクセスを受け付けるグローバル IP)
- Network Security Group (VM やサブネットで機能する FW)
この他にも『ストレージアカウント (ストレージサービス)』や『ロードバランサー』、『コンテナインスタンス』といった CPU/Memory/Disk/NW を消費するものだけでなく、『NetworkWatcher』や『Azure Bastion』等の監視/管理目的のリソースもあったりします。
以下に Azure リソースの例を示します。赤字が「リソース」になります。
リソースは必ず 1 つのリソースグループに所属します。
リソースマネージャーとは
最近の Azure では全体的なアーキテクトとして、『リソースマネージャー』と呼ばれる Microsoft が管理する『Azure 運用管理者向け機能』を提供しています。
例えば Azure を導入した企業 A の運用者が VM を作りたい、というとき、Azure Portal から VM 作成の操作を行います。すると、その VM 作成のリクエストをリソースマネージャーが受け取り、Azure 基盤上で VM やその他リクエストのあった各種リソース (前述のディスクや NIC, パブリック IP 等) を作ります。
リソースマネージャーは Azure Portal だけを操作する分には、ユーザーからは意識されません。ですが、REST API も公開されていますので、これを利用してユーザーが直接リソースマネージャーへリクエストを投げることもできます。
例えばリソースを取得したい場合の例が以下に示されています。
リソースプロバイダーとは
リソースプロバイダーとは、Azure で管理されている各種リソースを提供する機能を指します。各種リソースはこのリソースプロバイダーから払い出され、管理されます。
リソースマネージャーの API へリクエストを出す際には、リソースプロバイダーを指定しますが、API リクエストを受け取ったリソースマネージャーがリソースプロバイダーに対して操作を依頼します。
なので先ほどの図ではリソースマネージャーが VM を操作しているように見えますが、実際には間にリソースプロバイダーが挟まっています。
リソースプロバイダーとして例えば以下のものがあります。
- [Microsoft.Compute] : VM およびスケールセット機能を提供
- [Microsoft.Network] : 仮想ネットワーク機能を提供
- [Microsoft.Storage] : ストレージ機能を提供
リソースプロバイダーの一覧は Azure Portal 上にて「サブスクリプション」⇒「リソースプロバイダー」から確認できます。右端で「Registered」となっている場合、その機能が使える、ということになります。
リソースプロバイダーは上記の通り、サブスクリプション単位で「有効 (Registered)」「無効 (Not Registered)」が設定できます。
一部はデフォルトでは有効になっていますが、デフォルトで無効になっているものもあります。
前述の { Compute, Network, Storage } 等はデフォルトで有効です。一方、デフォルトで無効なものとしては
- [Microsoft.Insights] : Insights (Azure Monitor にて深く監視するためのサービス)
- [Microsoft.Kubernetes] : AKS (Azure Kubernetes Service)
等があります。なのでこれらの機能を使いたいときはそのサブスクリプション内で有効化 (Registered) する必要があります。
このリソースプロバイダーの名前空間 (Microsoft.***) は色々な場面で使われます。
例えば先ほど以下 URL で紹介したリソースマネージャーのリソースを取得する API だと
GET https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{parentResourcePath}/{resourceType}/{resourceName}?api-version=2021-04-01
となっていますが、{resourceProviderNamespace} のところに Microsoft.Kubernetes 等の文字列が入ります。
また、Azure ポリシーや Azure RBAC のスコープ指定時などにも使われます。例えば Azure ポリシーの組み込みポリシー「ディザスターリカバリーを構成されていない仮想マシンの監査」の中身を見てみると、仮想マシンというリソースの指定が [Microsoft.Compute/virtualMachines] という記述になっています。(virtualMachines はリソースタイプを意味する)
リソースプロバイダーとサービスの対応関係
リソースプロバイダーとサービスの対応関係は以下で確認できます。
コメント