Azure Resource Manager / Bicep
インフラをコードで宣言的に記述し、同じ構成を何度でも確実に展開。Azure の制御基盤 ARM と IaC 言語 Bicep をやさしく解説。AWS の CloudFormation 相当。
- ARM は Azure のコントロールプレーン操作を受け付ける統一基盤である。
- Bicep は ARM テンプレートを簡潔に書ける宣言的 IaC 言語である。
- 通常は増分デプロイを使い、管理対象の削除と保護にはDeployment Stacksを使う。
解決する課題
クラウド インフラを手作業のポータル操作で構築すると、環境差異・設定漏れ・再現性の欠如が避けられません。Azure Resource Manager(ARM)と Bicep は、インフラをコードとして宣言的に記述し、繰り返し同じ結果で展開できるようにします。
- 開発・検証・本番で同一構成を再現したい(環境ドリフトの排除)
- リソース作成を手順書ではなくコードで残し、レビュー・履歴管理したい
- 複数リソースの依存関係と作成順序を自動で解決したい
- 権限・タグ・ポリシーを統一の制御プレーンから一貫して適用したい
主要概念と用語
- Azure Resource Manager(ARM): ポータル・CLI・PowerShell・SDK からのコントロールプレーン操作を受け付ける統一基盤。認証、RBAC、Policy、ロック、タグ、デプロイの依存関係を扱う。ストレージ内データなどのデータプレーン操作は各サービスの入口を通る
- ARM テンプレート: リソースを宣言する JSON ファイル。ARM がネイティブに解釈する原形式
- Bicep: ARM テンプレートを簡潔に書くためのドメイン固有言語(DSL)。デプロイ時に ARM テンプレート(JSON)へ変換(トランスパイル)される。JSON より可読性が高く、AWS の CloudFormation に対する CDK に近い立ち位置だが、命令的言語ではなく宣言的
- リソース プロバイダー: Microsoft.Compute や Microsoft.Storage など、リソース種別ごとの操作を実装する名前空間。利用には登録が必要
- デプロイ(Deployment): テンプレートを適用する操作。同じ入力なら結果が同じになるべき等性を持つ
- スコープ: デプロイの適用範囲。リソース グループ/サブスクリプション/管理グループ/テナントの4階層
- モジュール(Bicep module): 再利用可能な Bicep の部品。テンプレートを分割・共有する単位
- パラメータ/変数/出力: 入力値・中間値・他テンプレートへ渡す戻り値を表す要素
- What-if 操作: 適用前に変更内容(作成・変更・削除)を事前確認する機能(CloudFormation の変更セットに相当)
仕様・制限・クォータ
- 宣言的かつべき等: テンプレートは「あるべき状態」を記述し、ARM が現状との差分を適用します。同じテンプレートを再実行しても結果は変わりません
- デプロイ モード: 増分(Incremental)は既存リソースを保持しテンプレート記載分を追加・更新します。記載外を削除する完全(Complete)は段階的に非推奨化されるため、新規設計では増分と Deployment Stacks を使います
- 依存関係: ARM はリソース間参照から依存を自動推論し、可能なものは並列に展開します。明示指定も可能です
- スコープ単位の上限: 1 回のデプロイで扱えるリソース数や、テンプレートのサイズ・パラメータ数などに上限があります。大規模構成はモジュール分割やネスト デプロイで回避します
- Bicep から ARM テンプレート(JSON) へ変換できる。既存 JSON の
decompileは移行の起点にできるが、最善努力の逆変換であり、生成後の警告確認と手直しが必要 - 具体的な上限値は時期やリソース種別で変わり得るため、設計時は最新の公式ドキュメントで確認します
内部の仕組み
横にスクロール
ARM は Azure のコントロールプレーン操作の入口です。ポータル・az CLI・PowerShell・管理用 REST API の操作を受け、認証、RBAC、ポリシー、ロックを評価して各リソース プロバイダーへ処理を委譲します。作成後のアプリ通信やデータ読み書きは、ARM ではなく各サービスのデータプレーンを通ります。
Bicep ファイルはデプロイ時にまず ARM テンプレート(JSON)へトランスパイルされ、テンプレートとパラメータがデプロイとして ARM に投入されます。ARM はテンプレート内のリソース間参照から依存グラフを構築し、依存のないリソースは並列に、依存のあるものは順序を守って各プロバイダーに展開を指示します。各リソースの作成・更新はべき等で、既に望ましい状態にあるものは再作成されません。
Bicep は新しい実行エンジンではなく、ARM テンプレートを生成するための言語です。ランタイムは従来どおり ARM なので、Bicep を採用しても機能差はなく、可読性と保守性が上がるだけと理解すると整理しやすいです。
設計パターン / ベストプラクティス
- モジュール化: ネットワーク・ストレージ・アプリ層などを Bicep モジュールに分割し、環境ごとにパラメータで差し替える
- 環境分離: 同一テンプレート+環境別パラメータ ファイル(dev/staging/prod)で構成差異をパラメータに閉じ込める
- What-if で事前確認: 本番適用前に必ず what-if を実行し、想定外の削除・変更を検出する
- CI/CD 連携: テンプレートを Git で管理し、GitHub Actions や Azure Pipelines から自動デプロイ(PR レビュー → what-if → 適用)
- 削除は Deployment Stacks で管理: 既定の増分モードを基本とし、テンプレート管理外になったリソースの削除や一括ライフサイクル管理には Deployment Stacks を使う
- タグとネーミング規約を変数・モジュールで一元化し、コスト配賦と運用を容易にする
運用・監視
- デプロイ履歴: リソース グループ単位でデプロイ履歴と各操作の成否・エラー詳細が記録され、失敗時の原因追跡に使える
- アクティビティ ログ: ARM 経由のすべてのコントロール プレーン操作(作成・変更・削除)が証跡として残る(AWS の CloudTrail 相当)
- 失敗の切り分け: プロバイダー未登録、クォータ超過、RBAC 権限不足、依存関係の記述漏れが典型的な失敗要因
- ドリフト対策: ポータルでの手動変更がテンプレートと乖離する「ドリフト」を、what-if や定期的な再デプロイで検出・是正する
- Azure Policy 連携: 命名・リージョン・SKU 制限などをポリシーで強制し、テンプレート外の逸脱も防ぐ
コスト
ARM と Bicep によるデプロイ操作自体は無償です。課金が発生するのは、テンプレートが作成した個々のリソース(仮想マシン・ストレージなど)であり、IaC レイヤーには直接の利用料金はありません。コスト最適化の観点では、テンプレートで SKU・サイズ・冗長性をパラメータ化し、環境ごとに過剰なリソースを作らないことが重要です。
| 項目 | 課金有無 | 補足 |
|---|---|---|
| ARM のデプロイ操作 | 無償 | テンプレート適用や what-if に料金は発生しない |
| 作成されたリソース | 従量課金 | VM・ストレージ等それぞれの料金で課金される |
| タグ付与 | 無償 | コスト配賦・集計のためにテンプレートで一元管理 |
セキュリティ
- 認可は RBAC: ARM は操作ごとに Microsoft Entra ID + Azure RBAC で認可します。デプロイ実行者やパイプラインのサービス プリンシパルには最小権限を割り当てます
- シークレットを直書きしない: 接続文字列やパスワードはテンプレートにハードコードせず、Azure Key Vault 参照でデプロイ時に注入します
- マネージド ID をパイプラインに使い、長期資格情報の保存を避けます
- Azure Policy で許可リージョン・SKU・命名規約などを強制し、テンプレートの逸脱や手動変更を防ぎます
- Deployment Stacks による削除は破壊的影響を持つため、誰がどのスコープで実行できるかを RBAC で厳格に制御します
完全モードはテンプレートに無いリソースを削除しますが、Microsoft はこのモードを段階的に非推奨化する方針です。通常は増分モードを使い、管理外リソースの削除は Deployment Stacks で明示的に設計し、事前に what-if と削除対象を確認します。
Well-Architected の観点
- 運用上の優秀性(operational): インフラをコード化し、レビュー・バージョン管理・自動デプロイの対象にできます。手作業を排し、再現性と監査性を高めます
- 信頼性(reliability): べき等なデプロイと環境別パラメータにより、本番と同一構成を確実に再現でき、災害復旧時の再構築も自動化できます。what-if による事前検証で変更リスクを下げます
試験で問われるポイント
- ARM = Azure の統一制御プレーンで、ポータル・CLI・PowerShell・管理 API のコントロールプレーン操作がここを通り、データプレーン操作は別経路であること
- Bicep は ARM テンプレート(JSON)にトランスパイルされる宣言的 DSL であり、新しいランタイムではない点
- デプロイは増分が既定で、完全モードは段階的に非推奨化されるため、記載外リソースの削除には Deployment Stacks を使うこと
- デプロイ スコープはリソース グループ/サブスクリプション/管理グループ/テナントの4階層
- ARM は依存関係を自動推論し可能な範囲で並列展開、デプロイはべき等である点
- 適用前のwhat-ifで変更内容を事前確認できること(AWS の変更セット相当)
- シークレットはKey Vault 参照で注入し、テンプレートに直書きしないこと
- AWS の相当サービスは CloudFormation
関連サービス・比較
| 観点 | Azure Resource Manager / Bicep | AWS CloudFormation |
|---|---|---|
| 位置づけ | Azure の統一制御プレーンと IaC | AWS の宣言的 IaC サービス |
| 記述言語 | Bicep(DSL)または ARM テンプレート(JSON) | テンプレート(YAML / JSON) |
| 展開単位 | デプロイ | スタック |
| 事前確認 | what-if 操作 | 変更セット |
| 適用範囲 | リソース グループ/サブスクリプション/管理グループ/テナント | リージョン内のスタック(StackSets で横断) |
| 再利用部品 | Bicep モジュール | ネストスタック / モジュール |
| 操作の監査 | アクティビティ ログ | CloudTrail |
ハンズオン / CLI例
# リソース グループを作成
az group create --name demo-rg --location japaneast
# Bicep ファイルの適用前に変更内容を事前確認(what-if)
az deployment group what-if \
--resource-group demo-rg \
--template-file main.bicep \
--parameters env=dev
# Bicep ファイルをリソース グループ スコープにデプロイ(既定は増分モード)
az deployment group create \
--resource-group demo-rg \
--name infra-deploy \
--template-file main.bicep \
--parameters @dev.parameters.json
# デプロイ結果(出力値)を確認
az deployment group show \
--resource-group demo-rg \
--name infra-deploy \
--query properties.outputs
# 既存 ARM テンプレート(JSON)を Bicep へ逆変換
az bicep decompile --file azuredeploy.json
Azure Service
Azure Resource Manager / Bicepを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
管理・ガバナンス
比較で見る軸
クラウド: Azure / カテゴリ: 管理・ガバナンス / 難易度: intermediate
導入後に効く点
Bicep は ARM テンプレートを簡潔に書ける宣言的 IaC 言語である。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Azure
- カテゴリ
- 管理・ガバナンス
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational / reliability
判断チェックリスト
- 自社の用途が「管理・ガバナンス / operational」に近いか確認する。
- 強みである「ARM は Azure のコントロールプレーン操作を受け付ける統一基盤である。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。