azure

【図解】初心者向けリソースマネージャーとリソースプロバイダー

リソースとは

Azure では様々なコンポーネントが『リソース』として管理されています。

例えば Azure の初期状態で VM を 1 台作るにしても、以下のようなリソースが一緒に必要であったり、もしくはオプションとして利用することができます。

  • VM 本体 (CPU やメモリ含む)
  • ディスク
  • 仮想ネットワーク (その中にさらに『サブネット』という概念がある)
  • NIC (サブネットに所属させる必要がある)
  • パブリック IP (インターネットからのアクセスを受け付けるグローバル IP)
  • Network Security Group (VM やサブネットで機能する FW)

この他にも『ストレージアカウント (ストレージサービス)』や『ロードバランサー』、『コンテナインスタンス』といった CPU/Memory/Disk/NW を消費するものだけでなく、『NetworkWatcher』や『Azure Bastion』等の監視/管理目的のリソースもあったりします。

以下に Azure リソースの例を示します。赤字が「リソース」になります。

NIC は VM 起動時に DHCP によりプライベート IP を取得します。パブリック IP を付与すると、NIC に割り当たるわけではなく、Azure NW 内部にて NAT 設定が為され、プライベート IP と 1 対 1 で変換されます。

パブリック IP 無しの場合、インターネットからの通信 (インバウンド通信) が行えません。ただし、VM からインターネットにはデフォルトで NAPT が有効化されており、アウトバウンド通信は可能です。パブリック IP 無しに RDP 接続したい場合は、Azure Bastion を使うか、VPN や ExpressRoute 等でオンプレ環境と接続し、プライベート IP でアクセスする必要があります。

リソースは必ず 1 つのリソースグループに所属します。

リソースマネージャーとは

最近の Azure では全体的なアーキテクトとして、『リソースマネージャー』と呼ばれる Microsoft が管理する『Azure 運用管理者向け機能』を提供しています。

例えば Azure を導入した企業 A の運用者が VM を作りたい、というとき、Azure Portal から VM 作成の操作を行います。すると、その VM 作成のリクエストをリソースマネージャーが受け取り、Azure 基盤上で VM やその他リクエストのあった各種リソース (前述のディスクや NIC, パブリック IP 等) を作ります。

リソースマネージャーは Azure Portal だけを操作する分には、ユーザーからは意識されません。ですが、REST API も公開されていますので、これを利用してユーザーが直接リソースマネージャーへリクエストを投げることもできます。

例えばリソースを取得したい場合の例が以下に示されています。

Resources - Get - REST API (Azure Resource Management)
リソース管理サービスの詳細 - リソースを取得します。

リソースプロバイダーとは

リソースプロバイダーとは、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 だと

Resources - Get - REST API (Azure Resource Management)
リソース管理サービスの詳細 - リソースを取得します。
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 はリソースタイプを意味する)

リソースプロバイダーとサービスの対応関係

リソースプロバイダーとサービスの対応関係は以下で確認できます。

Azure サービス別のリソース プロバイダーを見つける - Azure Resource Manager
Azure Resource Manager のすべてのリソース プロバイダー名...

コメント

タイトルとURLをコピーしました