この記事のポイント
- Azure Resource Managerの主要な機能と役割について詳しく解説
- ARMを使えばリソースグループによる一括管理と効率的な運用が可能
- ARMテンプレートでインフラをコード化し、デプロイを自動化できる
- ロックやタグ付けなどの機能で安全で効率的なリソース管理を実現
- 階層構造による管理で、複雑なリソース構成も整理しやすく運用が容易
監修者プロフィール
坂本 将磨
Microsoft AIパートナー、LinkX Japan代表。東京工業大学大学院で技術経営修士取得、研究領域:自然言語処理、金融工学。NHK放送技術研究所でAI、ブロックチェーン研究に従事。学会発表、国際ジャーナル投稿、経営情報学会全国研究発表大会にて優秀賞受賞。シンガポールでのIT、Web3事業の創業と経営を経て、LinkX Japan株式会社を創業。
クラウド環境でのリソース管理は、多くの企業にとって重要な課題となっています。特にAzureのような大規模なクラウドプラットフォームでは、効率的なリソース管理の仕組みが不可欠です。
そんな中で注目を集めているのが、Azure Resource Manager (ARM)です。
本記事では、ARMの基本的な概念から実践的な活用方法まで、詳しく解説します。リソースグループを使った効率的な管理手法や、ARMテンプレートによるインフラのコード化、自動デプロイの方法など、具体的な例を交えて紹介します。
特に、階層構造によるリソース管理やロック機能、タグ付けといった重要な機能について、その特徴と活用方法を詳しく説明していきます。また、ARMテンプレートを使ったインフラのバージョン管理や、効率的なデプロイ方法についても触れていきます。
Azure環境の管理効率化を目指す方々に、本記事がARMの理解と効果的な活用の一助となれば幸いです。
目次
Azure Resource Managerの主な機能と特徴
ARMテンプレートを用いたインフラのコード化(Infrastructure as Code)
Azure Resource Managerで使用される主要な用語
Azure Resource Managerとは
Azure Resource Manager (ARM) は、Microsoft Azureのリソース管理サービスの中核を成す基盤技術です。このサービスは、Azureプラットフォーム上のすべてのリソースの作成、管理、編成などの要求を受け付ける窓口のような役割をしています。
Azureのリソース管理サービスの構成イメージ
まずは、ユーザーがリソース作成、管理、編成を行うとき、Azure内で何が行われているか説明します。
- ユーザーはAzure portal(GUIベースのツール)、Azure CLI・Azure PowerShell(コマンドラインツール)を用いてリソース作成、管理、編成の要求を行います。
- これらの要求はAzure Resource Manager(ARM)へ伝えられ、Microsoft Entra IDと連携し認証を行います。
- ARMで解釈できる形式であるARMテンプレートに変換されます。
- リソースがデプロイされます。
このように、ARM を通じてユーザーは Azure 環境全体を効率的に管理し、インフラストラクチャのライフサイクル全体を制御することができます。
Azure Resource Managerの主な機能と特徴
複数のリソースを効率的に一括管理
Azure Resource Manager (ARM) を使うことで、Azureのリソースを一元的に管理し、複雑な操作もシンプルに行えます。
-
グループ化: リソースグループを使って、関連するリソースを論理的にまとめることができます。これにより、管理対象を整理しやすくなり、操作も効率化できます。
-
一括操作: ARMでは、リソースのデプロイ、更新、削除などを一括で行うことができます。たとえば、アプリケーションのすべてのリソースを一度にデプロイしたり、環境全体をまとめて削除することが可能です。
-
タグ付け: タグを使うと、リソースにメタデータを追加できます。これにより、異なるリソースを分類したり、後から検索しやすくなります。タグは特にコスト管理やアクセス管理の整理に有効です。
例:タグを使用したコスト管理
以下のPowerShellスクリプトでは、すべてのリソースに「Department」というタグを追加し、部門ごとのコストを集計する方法を示します。
# すべてのリソースに部門タグを追加
Get-AzResource -ResourceGroupName "MyRG" | ForEach-Object {
Set-AzResource -ResourceId $_.ResourceId -Tag @{"Department"="Finance"} -Force
}
# 部門別のコスト集計
Get-AzConsumptionUsageDetail |
Where-Object {$_.Tags.Department -eq "Finance"} |
Measure-Object -Property PretaxCost -Sum
-
タグの追加: 上記の例では、リソースグループ内のすべてのリソースに「Finance」という部門タグを一括で追加しています。
-
コスト集計: 部門別にタグを使ってフィルタリングし、その部門に関連するすべてのリソースのコストを合計しています。これにより、部門ごとのコスト管理が効率化されます。
タグは、運用の一元管理やコストの詳細な分析に役立ち、リソースをより効果的に管理するための強力なツールです。
ARMテンプレートを用いたインフラのコード化(Infrastructure as Code)
ARMテンプレートは、Azure環境の構成をJSON形式で定義するためのツールです。
- 環境の一貫性を保証
- バージョン管理とコード化されたインフラストラクチャ
- パラメータ化による再利用性の向上
もちろんこれを1から書くこともできますが、実はAzureポータルで勝手に作成してくれています。
実際にAzure AI servicesのリソースを作成して確認
Azure portalよりリソースの種類を選択し必要事項を入力するとこのような画面になります。
この画面の「Automation のテンプレートをダウンロードする」を押します。
するとこのように、自動で作成されたARMテンプレートを見ることができます。
ちなみに、自分で1から書いたARMテンプレートを使ってデプロイする場合は「カスタムテンプレートのデプロイ」を使います。
一貫性のある出力を提供
Azure Resource Manager (ARM) は、Azureのリソース操作を様々なツールやインターフェースから統一的に処理できる仕組みを提供します。これにより、どのツールを使っても一貫した結果が得られるため、使いやすく、柔軟性の高い操作が可能です。
- ツールの選択肢
ARMを使ってAzureのリソースを管理する際、Azure Portal、Azure CLI、Azure PowerShell、REST APIなど、さまざまなツールから操作が可能です。好みに応じて、どのツールでも同じ作業が行えます。
- 一貫性
どのツールを使って操作しても、結果は常に同じです。例えば、CLIで行った操作は、ポータルやPowerShellで確認した場合も正しく反映されます。
- スキル移行
一度Azureのリソース管理の概念を理解すれば、そのスキルは他のツールにも適用できます。例えば、CLIでリソースグループの作成方法を学べば、PowerShellやREST APIでも簡単に同じ操作が行えます。
例:異なるツールでのリソースグループ作成方法
以下は、Azure CLI、Azure PowerShell、REST APIを使ってリソースグループを作成する例です。それぞれのツールで同じ結果が得られます。
# Azure CLI
az group create --name myResourceGroup --location eastus
# Azure PowerShell
New-AzResourceGroup -Name myResourceGroup -Location eastus
# REST API
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}?api-version=2021-04-01
Content-Type: application/json
{
"location": "eastus"
}
- Azure CLI: コマンドラインから簡単にリソースグループを作成できます。
- Azure PowerShell: PowerShellを使って、同じくリソースグループを作成可能です。
- REST API: APIを使ったプログラム経由でも同様にリソースグループを作成できます。
これらのツールを使用することで、ユーザーは自分に合った方法で効率的にAzureリソースを管理でき、どのツールを使っても一貫した結果が得られます。
ARM は Azure環境の管理を大幅に簡素化し、効率化します。次のセクションでは、ARM で使用される主要な用語について詳しく説明します。
Azure Resource Managerで使用される主要な用語
リソース(仮想マシン、ストレージ、Webアプリなど)
リソースとは、Azure上で管理される個々のサービスやコンポーネントのことを指します。これらのリソースは、Azureでのさまざまな作業の基本的な単位です。
-
種類
Azureには多くのリソースタイプがあります。代表的なものには、仮想マシン、ストレージアカウント、SQLデータベース、App Service(Webアプリケーション)などがあります。これらは、様々な用途に応じて使用されます。
-
属性
各リソースには、名前、リソースタイプ、場所(リージョン)、SKU(サービスレベル)などの特定の属性があります。これらの情報を使ってリソースを管理し、必要に応じて設定を変更できます。
-
一意の識別子
すべてのリソースにはリソースIDという一意の識別子が割り当てられています。リソースIDを使うことで、Azure上で特定のリソースを簡単に参照したり操作したりできます。
Azureのリソース
例:仮想マシンのリソース識別子
仮想マシンの一意のリソースIDは次のように表されます。
/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Compute/virtualMachines/{vm-name}
- {subscription-id}: AzureサブスクリプションのID。
- {resource-group}: リソースが属するリソースグループの名前。
- {vm-name}: 仮想マシンの名前。
これにより、リソースは他のリソースと区別され、正確に管理されます。どのリソースも、このような一意のIDで識別されるため、リソースの追跡や管理がしやすくなります。
リソースグループ
リソースグループは、関連するリソースを論理的にまとめて管理するための「コンテナ」のようなものです。これにより、同じ目的を持つリソースを一括で管理することができ、運用が効率的になります。
- 目的
リソースグループは、共通のライフサイクル(作成、更新、削除)を持つリソースをまとめて管理するために使用されます。
例えば、同じアプリケーションに関連する仮想マシンやデータベースなどを一つのリソースグループにまとめることができます。
- 特徴
リソースグループ内のリソースは、必ずしも同じリージョン(地理的な場所)に配置される必要はありません。
例えば、仮想マシンは「East US」に、ストレージアカウントは「West US」に配置することも可能です。
- 管理
リソースグループ単位でアクセス制御を設定したり、タグを付けて整理したり、コスト管理を行うことができます。
リソースグループ管理画面
例:Webアプリケーションのリソースグループ構成
リソースグループ: WebAppRG
|- 仮想マシン: WebServer (East US)
|- ストレージアカウント: WebAppStorage (West US)
|- SQLデータベース: WebAppDB (East US)
|- AppService: WebApp (East US)
この例では、Webアプリケーションに関連するリソース(仮想マシン、ストレージ、データベース、アプリケーションサービス)が異なるリージョンに配置されていますが、すべてが「WebAppRG」というリソースグループでまとめて管理されています。
リソースプロバイダー(Azureリソースを提供するサービス)
リソースプロバイダーは、Azure上で特定のタイプのリソースを作成・管理するサービスです。Azureのさまざまなリソース(仮想マシンやストレージなど)は、これらのプロバイダーを通じて提供されています。
-
種類: 代表的なリソースプロバイダーには、以下のようなものがあります。
- Microsoft.Compute: 仮想マシンなどを提供
- Microsoft.Storage: ストレージアカウントやファイルサービスを提供
- Microsoft.Web: WebアプリやApp Serviceプランを提供
-
機能: リソースプロバイダーは、リソースの作成、更新、削除などの操作を処理します。Azureのリソースを操作する際は、プロバイダーがそれらの処理を管理します。
-
登録: 特定のリソースプロバイダーを利用するには、そのプロバイダーをサブスクリプションに登録して有効化する必要があります。これにより、そのプロバイダーが提供するリソースを使えるようになります。
このように、リソースプロバイダーごとに提供されるリソースは異なり、これらを利用してAzureでのサービスを構成・運用できます。
これらの用語を理解することで、Azure Resource Managerを通じたリソース管理の基本的な概念が明確になります。次のセクションでは、ARMテンプレートについてより詳しく説明します。
ARMテンプレートの役割と特徴
インフラをコードとして管理するためのJSON形式
ARMテンプレートは、Azureのインフラ構成をJSON形式で定義する「インフラのコード(Infrastructure as Code)」の一つです。これを使うことで、Azure環境の設定をコードとして保存、共有、再利用ができるようになります。
-
可読性
ARMテンプレートは、機械にも人間にもわかりやすいJSON形式で書かれているため、簡単に理解・編集することができます。
-
構造化
ネストされたオブジェクトや配列(アレイ)を使って、複雑な構成や複数のリソースを一つのテンプレートで定義できます。 -
拡張性
ARMテンプレートは、カスタム関数や他のテンプレートをリンクして使用することもでき、柔軟で強力なインフラの定義が可能です。
例:基本的なARMテンプレートの構造
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [],
"outputs": {}
}
- $schema: テンプレートが従うべきスキーマのURLです。
- contentVersion: テンプレートのバージョン管理に使われます。
- parameters: 外部から受け取る入力値を定義します(例:リソース名や場所)。
- variables: テンプレート内で使う変数を定義します。
- resources: 作成するAzureリソースをここに記述します(例:仮想マシンやストレージアカウント)。
- outputs: デプロイ後に出力する情報を定義します。
この構造に基づいて、テンプレートにAzureリソースの設定を追加し、簡単に環境を構築・管理することができます。
ARMテンプレートによるデプロイの自動化と効率化
また、ARMテンプレートを使用すると、Azure環境のデプロイを自動化できます。これにより、複雑なリソース構成も簡単に再現でき、運用の効率が大幅に向上します。
-
再現性
ARMテンプレートを使うことで、同じインフラ構成を何度でも正確に再現できます。これにより、異なる環境間(開発、テスト、本番など)の設定を統一しやすくなります。 -
バージョン管理
テンプレートはコードとして扱えるため、Gitなどのバージョン管理システムでインフラの変更履歴を追跡できます。これにより、過去の変更を簡単に確認したり、特定のバージョンに戻すことが可能です。 -
CI/CD統合
ARMテンプレートは、Azure DevOpsなどのCI/CD(継続的インテグレーション/継続的デリバリー)パイプラインに組み込むことができ、コードの変更に応じた自動デプロイを実現できます。
例:Azure DevOpsを使用したARMテンプレートのデプロイ
以下は、Azure DevOpsでARMテンプレートを使用してAzureリソースをデプロイする際の設定例です。
trigger:
- main # mainブランチで変更があると自動的に実行
pool:
vmImage: 'ubuntu-latest' # 実行する仮想マシンのイメージ
steps:
- task: AzureResourceManagerTemplateDeployment@3 # ARMテンプレートのデプロイタスク
inputs:
deploymentScope: 'Resource Group' # リソースグループ単位でデプロイ
azureResourceManagerConnection: 'My Azure Connection' # Azureへの接続設定
subscriptionId: '$(subscriptionId)' # デプロイするサブスクリプションID
resourceGroupName: '$(resourceGroupName)' # リソースグループ名
location: 'East US' # デプロイするリージョン
templateLocation: 'Linked artifact' # テンプレートの場所
csmFile: '$(System.DefaultWorkingDirectory)/templates/main.json' # ARMテンプレートファイル
csmParametersFile: '$(System.DefaultWorkingDirectory)/parameters/prod.parameters.json' # パラメータファイル
deploymentMode: 'Incremental' # インクリメンタルモード(既存リソースはそのままに、必要な部分のみ変更)
- 自動トリガー:
main
ブランチに変更があると、自動的にこのパイプラインが実行されます。 - ARMテンプレートのデプロイ:
AzureResourceManagerTemplateDeployment@3
タスクを使って、ARMテンプレートを指定したリソースグループにデプロイします。 - デプロイモード:
Incremental
モードを使用することで、既存のリソースを壊さずに新しい変更のみを適用します。
この設定により、Azureリソースを自動化し、継続的にデプロイするプロセスが簡単に実現できます。
バージョン管理や差分管理が容易
ARMテンプレートはコードとして扱えるため、ソフトウェア開発と同様の方法でインフラの管理が可能です。これにより、チーム全体で効率的に構成の変更を追跡し、品質を保ちながらインフラ管理を行うことができます。
-
バージョン管理
Gitなどのバージョン管理システムを使って、ARMテンプレートの変更履歴を追跡できます。これにより、過去のバージョンに戻したり、誰がどの変更を行ったか確認できます。 -
差分管理
環境(開発、テスト、本番)ごとの構成の違いや、過去と現在のテンプレートの差分を簡単に比較することができます。これにより、インフラの変更が正しく適用されているかを確認できます。 -
コードレビュー
テンプレートの変更は、ソースコードのようにチームでレビューできます。これにより、誤った設定や潜在的な問題を早期に発見し、インフラの品質を向上させます。
例:GitHubでのARMテンプレート管理
/AzureInfrastructure
/templates
- storageAccount.json # ストレージアカウント用のテンプレート
- virtualMachine.json # 仮想マシン用のテンプレート
/parameters
- dev.parameters.json # 開発環境用のパラメータファイル
- prod.parameters.json # 本番環境用のパラメータファイル
- main.json # メインのARMテンプレート
- README.md # プロジェクトの説明書
このようにARMテンプレートをGitHubや他のバージョン管理システムで管理することで、インフラストラクチャのコード化(Infrastructure as Code, IaC)を実現し、以下のような利点を得られます:
- 一貫性: どの環境でも同じ構成を簡単に再現できるため、環境間の違いによるトラブルを防ぎます。
- 再現性: 必要に応じて同じテンプレートを使ってインフラを再構築できます。
- 管理性: チームでの共同作業がしやすくなり、インフラの変更もシステマチックに管理できます。
これにより、インフラ管理がより効率的かつ信頼性の高いものになります。
ARMを効率よく管理する上で覚えておくべき仕組み
Azure Resource Manager(ARM)には、複数のリソースを効率的に管理するための便利な機能がいくつか備わっています。これらの機能を活用することで、リソースの整理、保護、管理が簡単になり、運用の効率が大幅に向上します。
ぜひ、覚えておきましょう!
1. 階層構造でリソースを管理(グループ化)
リソースを階層的に管理することで、関連するリソースを論理的にまとめ、運用やメンテナンスが容易になります。リソースグループを使って、リソースを共通の目的やライフサイクルに基づいてグループ化し、まとめて管理できる仕組みです。これにより、デプロイ、更新、削除などの操作が効率的に行えます。
2. リソースの削除防止(ロック)
重要なリソースに対して、誤って削除や変更されないようにするためのロック機能を利用できます。リソースグループやリソース単位で「削除防止」や「読み取り専用」のロックを設定し、誤操作によるシステムトラブルを防ぐことが可能です。
3. リソースにラベル付け(タグ)
リソースにタグ付けを行うことで、管理やコスト分析が簡単になります。タグはリソースにメタデータを付与するためのもので、例えば「部門」や「環境」などの情報を追加してリソースを整理することができます。これにより、特定のグループに属するリソースを簡単に検索したり、コストを分析することができます。
これらの仕組みを活用することで、ARMを通じたリソースの管理がより効率的で安全なものとなります。
まとめ
本記事では、Azure Resource Manager (ARM) の概要とその主な機能について解説しました。ARMは、Azureリソースの管理において中心的な役割を果たし、リソースグループによる効率的な管理や、ARMテンプレートを使ったインフラのコード化と一貫したデプロイを実現します。リソース、リソースグループ、リソースプロバイダーといった主要な用語の理解は、Azure環境を効果的に管理する上で重要です。ARMテンプレートはJSON形式でインフラを定義し、自動デプロイやバージョン管理を可能にします。これにより、ARMはリソースの一括管理と自動化をサポートし、組織のクラウド運用を大幅に効率化します。ARMを活用することで、より管理しやすく、効率的なAzure環境を構築し、クラウドの利点を最大化できるでしょう。