Azure Resource Manager とは

完了

ここまではチームと共に時間をかけて、コードとしてのインフラストラクチャの利点と、利用できるさまざまなアプローチについて学習してきました。 会社が急速に拡大する中で、あなたのチームは、今後かなりの数のリソースが Azure にデプロイされることがわかっています。 チームがリソースのプロビジョニングに適したアプローチと判断したのは、宣言型のコードとしてのインフラストラクチャです。 チームは、すべてのデプロイ ステップが一覧表示されているスクリプトを維持したくありません。 最初のテンプレートを構築するプロセスを開始する前に、Azure Resource Manager のしくみを理解する必要があります。 Azure で使用できるテンプレートの種類を調査すると、コードとしてのインフラストラクチャ戦略における次のステップを決定するのに役立ちます。

このユニットでは、Resource Manager と、2 種類の Resource Manager テンプレートについて学習します。

Azure Resource Manager の概念

Azure Resource Manager は、Azure 内でリソースをデプロイおよび管理するときに使用されるサービスです。 Azure サブスクリプション内で Resource Manager を使用して、リソースを作成、更新、削除することができます。 Resource Manager は、Azure portal など、多くのツールを使って操作できます。 また、Resource Manager には、アクセス制御、監査、タグ付けなど、デプロイ後のリソース管理に役立つ一連の機能も用意されています。

用語

Resource Manager を使ったクラウド体験を開始するにあたり、用語や概念をいくつか理解しておくことが重要です。

  • Resource:Azure プラットフォーム上で使用できる管理可能なアイテム。 リソースの例としては、仮想ネットワーク、仮想マシン、ストレージ アカウント、Web アプリ、データベースなどがあります。

  • リソース グループ - Azure ソリューションの関連リソースを保持する論理コンテナー。 リソース グループには、グループとして管理するリソースが含まれます。 Azure リソースのほとんどが、リソース グループに含まれています。 リソース グループにどのリソースを含めるかは、ご自身のソリューションにとって何が最も重要であるかに基づいて決めます。

    注意

    リソース グループに含まれないリソースも少しですが存在します。 このようなリソースの種類は、アクセス制御の管理やポリシーの適用など、特定の目的のために使用されます。 これらのリソースについては、後のモジュールで詳しく学習します。

  • サブスクリプション: リソースとリソース グループの論理コンテナーと課金の境界。 各Azure リソースとリソース グループが、1 つのサブスクリプションにのみ関連付けられています。

  • 管理グループ: 複数のサブスクリプションを管理するときに使用する論理コンテナー。 管理グループ、サブスクリプション、リソース グループ、リソースからなる階層を定義し、アクセス、ポリシー、コンプライアンスを継承によって効率よく管理できます。

  • Azure Resource Manager テンプレート (ARM テンプレート) - リソース グループ、サブスクリプション、管理グループ、テナントのいずれかにデプロイする、1 つ以上のリソースを定義するテンプレート ファイル。 テンプレートを使用すると、一貫性のある反復可能な方法でリソースをデプロイできます。 ARM テンプレート ファイルには JSON と Bicep の 2 種類があります。 このモジュールでは、Bicep に焦点を当てます。

メリット

Resource Manager には、コードとしてのインフラストラクチャのリソース プロビジョニングに関連する利点と機能が多数あります。

  • ソリューション内でリソースをグループとしてデプロイ、管理、監視できます。個別に行う必要はありません。
  • ソリューションを開発のライフサイクル全体で再デプロイできます。リソースは、必ず一貫した状態でデプロイされます。
  • スクリプトではなく宣言型テンプレートを使用して、インフラストラクチャを管理できます。
  • リソースの依存関係を指定して、リソースを正しい順序で確実にデプロイできます。

操作: コントロール プレーンとデータ プレーン

Azure で実行できるのは、コントロール プレーンとデータ プレーンの 2 種類の操作です。 コントロール プレーンは、サブスクリプション内でリソースを管理するときに使用します。 データ プレーンは、リソースによって公開されている機能にアクセスするときに使用します。

たとえば、仮想マシンの作成にはコントロール プレーン操作を使用しますが、リモート デスクトップ プロトコル (RDP) を使って仮想マシンに接続するときは、データ プレーン操作を使用します。

コントロール プレーン

Azure ツール、API、SDK のいずれかから要求を送信すると、Resource Manager は要求を受信、認証、承認します。 その後、その要求を Azure リソース プロバイダーに送信し、要求されたアクションはそこで実行されます。 すべての要求が同じ API を介して処理されるため、Azure で利用できるさまざまなツールで一貫した結果と機能が得られます。

次の図は、Azure 要求の処理において Resource Manager が果たす役割を示しています。

Diagram that shows how Azure Resource Manager accepts requests from all Azure clients and libraries.

すべてのコントロール プレーン操作要求が Resource Manager の URL に送信されます。 たとえば、仮想マシンの作成または更新操作はコントロール プレーン操作です。 この操作の要求 URL は次のとおりです。

PUT https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}?api-version=2022-08-01

コントロール プレーンは、どのリソースを作成する必要があるか、また、どのリソースが既に存在するかを認識します。 これらの要求の違いは Resource Manager によって認識され、同じリソースが作成されたり、既存のリソースが削除されたりすることはありません。しかし、この動作をオーバーライドする方法はあります。

データ プレーン

データ プレーン操作が開始すると、Azure サブスクリプション内の特定のエンドポイントに要求が送信されます。 たとえば、Azure AI サービスの言語の検出操作は、要求 URL が次のようになっているため、データ プレーン操作です。

POST https://eastus.api.cognitive.microsoft.com/text/analytics/v2.0/languages

アクセス制御やロックなどの Resource Manager の機能が、必ずしもデータ プレーン操作に適用されるとは限りません。 たとえば、コントロール プレーンを使用して仮想マシンを管理するアクセス許可が付与されていない可能性があるユーザーでも、オペレーティング システムにはサインインできます。

ARM テンプレートとは

Azure Resource Manager テンプレートは、デプロイのためのインフラストラクチャと構成を定義するファイルです。 ARM テンプレートを作成する場合は、宣言型アプローチをリソースのプロビジョニングに採用します。 これらのテンプレートにはデプロイ内の各リソースが記述されていますが、リソースのデプロイ方法は記述されていません。 デプロイのためにテンプレートを Resource Manager に送信すると、コントロール プレーンによって、定義されたリソースが、一貫性のある整理された方法でデプロイされます。 前のユニットでは、命令型コードと宣言型コードの違いについて学習しました。

ARM テンプレートを使用する理由

リソースのプロビジョニングに (JSON と Bicep のどちらであれ) ARM テンプレートを使用する利点は多数あります。

  • 反復可能な結果: ARM テンプレートはべき等です。つまり、同じテンプレートを繰り返しデプロイし、同じ結果を取得できます。 このテンプレートではリソースが重複しません。

  • オーケストレーション: テンプレートのデプロイが Resource Manager に送信されると、テンプレート内のリソースが並行してデプロイされます。 このプロセスにより、デプロイがより早く終了します。 あるリソースが別のリソースに依存している場合、これらのデプロイは、Resource Manager によって正しい順序で調整されます。

  • プレビュー: Azure PowerShell や Azure CLI で利用できる what-if ツールを使用すると、テンプレートをデプロイする前に、環境に対する変更をプレビューできます。 このツールにより、テンプレートによって行われる作成、変更、削除すべての内容が詳しく示されます。

  • テストと検証: Bicep リンターのようなツールを使用して、テンプレートの品質をデプロイする前に確認できます。 Resource Manager に送信された ARM テンプレートが、デプロイ プロセスの前に検証されます。 この検証により、リソースのプロビジョニング前に、テンプレート内のエラーが通知されます。

  • モジュール性: テンプレートをコンポーネントに細分化し、デプロイ時にリンクさせることができます。

  • CI/CD 統合: ARM テンプレートは複数の CI/CD ツール (Azure DevOps や GitHub Actions など) に統合できます。 これらのツールを使用すると、ソース管理およびビルド リリース パイプラインによってテンプレートをバージョン管理できます。

  • 拡張性: デプロイ スクリプトを使用すると、ARM テンプレート内から Bash または PowerShell スクリプトを実行できます。 これらのスクリプトは、デプロイ時にデータ プレーン操作などのタスクを実行します。 拡張性があるため、1 つの ARM テンプレートを使用して、完全なソリューションをデプロイすることができます。

JSON テンプレートと Bicep テンプレート

現時点で使用できる ARM テンプレートは、JSON テンプレートと Bicep テンプレートの 2 種類です。 JavaScript Object Notation (JSON) は、複数の言語で使用できるオープン標準ファイル形式です。 Bicep は新しいドメイン固有言語で、より簡単な構文を使用して ARM テンプレートを作成するために最近開発されました。 いずれかのテンプレート形式を、ARM テンプレートとリソースのデプロイに使用できます。