Azure ARMテンプレート作成入門|JSON形式のリソース定義とデプロイ基本
生徒
「Azure(アジュール)でサーバーやネットワークを効率よく構築したいのですが、毎回ポータルからポチポチ操作するのは大変そうです。何か良い方法はありますか?」
先生
「それは良い視点ですね。AzureにはIaC(アイエーシー)という考え方があります。Infrastructure as Code(インフラストラクチャ・アズ・コード)の略で、インフラ構成をコードで管理する方法です。その中心となるのがARM(アーム)テンプレートですよ。」
生徒
「コードでインフラを作るんですか!難しそうですが、初心者でも理解できるでしょうか?」
先生
「大丈夫です。基本はJSON(ジェイソン)という形式のテキストファイルを書くだけです。最近はより書きやすいBicep(バイセップ)という言語も人気ですが、まずは基本となるARMテンプレートの仕組みから学んでいきましょう!」
1. ARMテンプレートとは?IaCの基本概念
Azure Resource Manager(アジュール・リソース・マネージャー)、略してARMテンプレートとは、Azure上に作成したいリソース(仮想マシンやストレージなど)の構成を、JSON形式で記述した設計図のようなものです。通常、Azureポータルでマウスを使って操作する内容を、テキストファイルとして保存しておくことができます。
この手法はIaC(インフラのコード化)と呼ばれ、一度作成したテンプレートを使えば、何度でも全く同じ環境を自動で構築できるという大きなメリットがあります。手動操作による設定ミスを防ぎ、構築時間を大幅に短縮できるため、現代のシステム開発では必須の技術となっています。初心者の方は、まずは「クラウド上の資源を文字で定義する仕組み」だと捉えておけば間違いありません。
2. JSON形式によるリソース定義の構造
ARMテンプレートはJSON(JavaScript Object Notation:ジェイソン)というデータ形式で記述されます。JSONは人間にもコンピュータにも読みやすい形式で、波括弧や角括弧を使ってデータを整理します。ARMテンプレートには、主に以下の4つのセクションがあります。
- Parameters(パラメーター):デプロイ時にユーザーが入力する値(サーバー名など)。
- Variables(バリアブル):テンプレート内で使い回す固定値や計算結果。
- Resources(リソース):実際に作成するAzureサービスの定義。
- Outputs(アウトプット):デプロイ完了後に表示される情報(割り当てられたIPアドレスなど)。
最も重要なのは「Resources」セクションです。ここに、どのような種類のサービスを、どの地域(リージョン)に作成するかを詳しく記述していきます。以下に、最もシンプルなストレージアカウントを作成するためのテンプレート例を示します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "mystorageaccount001",
"location": "japaneast",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {}
}
]
}
3. パラメーターを使って柔軟なテンプレートを作る
先ほどの例では、ストレージアカウントの名前が固定されていました。しかし、実際の運用では環境(本番用やテスト用など)に合わせて名前を変えたい場面が多いです。そこで活躍するのがParameters(パラメーター)です。
パラメーターを定義することで、実行時に「今回のサーバー名は何にする?」といった入力を受け付けることができます。これにより、一つのテンプレートを使い回して、異なる名前やスペックのリソースを量産できるようになります。IT現場では、環境ごとに設定値を変えるのが一般的なので、この書き方をマスターしておくことは非常に重要です。以下のコードでは、ストレージの名前と種類を外から指定できるように改良しています。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageName": {
"type": "string",
"metadata": {
"description": "ストレージアカウントの名前を入力してください"
}
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS"
]
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[parameters('storageName')]",
"location": "japaneast",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2"
}
]
}
4. Bicep言語の登場とARMテンプレートとの違い
JSON形式のARMテンプレートは非常に強力ですが、記述が冗長になりがちで、波括弧の閉じ忘れなどのミスが起きやすいという弱点がありました。そこで登場したのがBicep(バイセップ)です。Bicepは「二頭筋」を意味する単語で、ARMテンプレートの機能をより強力に、かつ簡潔に扱うために開発されました。
BicepはJSONよりも人間にとって読みやすく、直感的にインフラを定義できる専用言語です。最終的にはBicepファイルからJSONのARMテンプレートへと変換(ビルド)されて実行されるため、中身の仕組みは同じです。初心者の場合、まずはJSONの構造を理解してからBicepに移行すると、Azure内部でどのような処理が行われているか把握しやすくなります。現在、Microsoftは新規のプロジェクトにおいてBicepの使用を強く推奨しています。
param storageName string
param location string = 'japaneast'
resource storageAcct 'Microsoft.Storage/storageAccounts@2021-09-01' = {
name: storageName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
5. PowerShellやAzure CLIを使ったデプロイ方法
作成したテンプレートファイルをAzureに適用して、実際にリソースを作成することをデプロイと呼びます。デプロイには主に「Azure CLI(アジュール・シーエルアイ)」や「Azure PowerShell(パワーシェル)」を使用します。コマンドラインから操作することで、自動化ツールやCI/CDパイプラインとの連携がスムーズになります。
デプロイコマンドを実行すると、Azure Resource Managerがテンプレートの内容を解析し、依存関係(例えば、仮想ネットワークを作ってから仮想マシンを作る、といった順番)を考慮しながら順次リソースを作成してくれます。以下に、Azure CLIを使用してリソースグループへデプロイを行う際の基本的なコマンドを紹介します。
az deployment group create \
--resource-group MyResourceGroup \
--template-file azuredeploy.json \
--parameters storageName=myuniquestorage2026
{"id": "/subscriptions/.../deployments/azuredeploy", "properties": {"provisioningState": "Succeeded"}}
6. テンプレートの検証とデバッグのコツ
テンプレートを本番環境に適用する前に、構文エラーや設定の不備がないかを確認することが重要です。これを検証(バリデーション)と呼びます。Azure CLIには、実際にリソースを作成せずにチェックだけを行う機能や、実行した場合にどのような変更が発生するかを表示する「What-if(ホワットイフ)」操作があります。
「What-if」機能を使うと、新しく追加されるリソース、削除されるリソース、変更される設定値が色分けして表示されるため、意図しない破壊的な変更を未然に防ぐことができます。初心者のうちは、いきなりデプロイするのではなく、まずは検証コマンドで自分の書いたコードが正しいか確認する癖をつけましょう。これにより、エラー解決のスキルも飛躍的に向上します。
az deployment group what-if \
--resource-group MyResourceGroup \
--template-file azuredeploy.json
Resource modification icons: + Create, ~ Modify, - Delete
+ Microsoft.Storage/storageAccounts/mystorage001
7. クイックスタートテンプレートを活用しよう
ゼロから全ての定義を書くのは非常に大変です。そこで活用したいのが、Microsoftやコミュニティが公開している「Azureクイックスタートテンプレート」です。これは、よく使われる構成(Webサーバーとデータベースのセットなど)をテンプレート化したもので、GitHub上で数千ものサンプルが公開されています。
初心者の学習ステップとしては、まず自分のやりたい構成に近いサンプルを探し、それをダウンロードして中身を読み解くことから始めるのが近道です。パラメーターの名前を変えたり、リソースのスペックを微調整したりしながら動かしてみることで、各項目の意味がより深く理解できるようになります。公式ドキュメントとサンプルコードを往復することが、上達への一番の宝の地図と言えるでしょう。
8. テンプレート管理で注意すべきベストプラクティス
実務でARMテンプレートを運用する際には、いくつか守るべきルールがあります。まず、パスワードや接続文字列などの機密情報をテンプレートファイルに直接書き込まない(ハードコーディングしない)ことです。これらの情報は「Azure Key Vault(アジュール・キー・ヴォルト)」という安全な保管庫に預け、デプロイ時にそこから参照するように設定します。
また、テンプレートファイルは必ずGitなどのバージョン管理システムで管理しましょう。「いつ、誰が、なぜこの設定を変えたのか」という履歴を残すことで、トラブルが発生した際に元の正常な状態へすぐに戻す(ロールバック)ことが可能になります。コードとしてインフラを扱う以上、アプリケーション開発と同じように丁寧なコード管理が求められます。これらの習慣を身につけることで、プロフェッショナルなクラウドエンジニアへの道が開けます。
まとめ
今回の記事では、Azureのインフラ構築を自動化するための強力なツールであるARMテンプレートと、その進化形であるBicepについて詳しく解説しました。クラウドのリソース管理をプログラムコードで行うIaC(Infrastructure as Code)の概念を理解することは、現代のエンジニアにとって避けては通れない道です。JSON形式で記述される設計図としてのARMテンプレートは、一度作成すれば何度でも同じ構成を再現できるため、手動操作によるミスを減らし、運用の効率を劇的に向上させます。
学習の要点振り返り
ARMテンプレートの基本構造であるParameters、Variables、Resources、Outputsの4つのセクションを正しく使い分けることが、柔軟なインフラ定義の第一歩です。特に、環境ごとに異なる値を設定できるパラメーターの活用は、本番環境やテスト環境の構築をスムーズにします。また、より簡潔で人間に読みやすいBicep言語の登場により、コードの可読性が向上し、保守性も高まりました。デプロイ時にはAzure CLIやPowerShellを駆使し、事前にWhat-if操作で変更内容を検証する習慣をつけることが大切です。
さらに、セキュリティ面ではAzure Key Vaultとの連携による機密情報の保護、運用面ではGitによるバージョン管理といったベストプラクティスを遵守することが、プロフェッショナルなクラウド管理には欠かせません。クイックスタートテンプレートなどの既存のリソースを参考にしながら、まずは小さなリソースからコード化に挑戦してみましょう。
実践的な設定例の確認
例えば、データベースのアクセス制御を管理するSQLサーバーの設定をテンプレートで定義する場合、以下のような構造を意識します。ここでは、テーブル情報の管理とあわせて、どのようにコードで表現されるかをイメージしてみましょう。
管理対象のサンプルデータ(デプロイ履歴テーブル)
id | resource_name | status | deployed_by
---+---------------+-----------+-------------------
1 | storage001 | Succeeded | admin_user
2 | vnet-prod | Succeeded | system_auth
3 | sql-server-db | Running | dev_manager
4 | web-app-asia | Failed | test_user
リソース定義の記述例(C#による管理ツール想定)
Azure SDKを使用して、プログラムからテンプレートのデプロイ状態を確認する際のコード例です。
var deploymentStatus = "Succeeded";
if (deploymentStatus == "Succeeded")
{
Console.WriteLine("Azureリソースのデプロイが正常に完了しました。");
}
else
{
Console.WriteLine("デプロイに失敗しました。ログを確認してください。");
}
デプロイ実行後のステータス確認コマンド
az deployment group show --name azuredeploy --resource-group MyResourceGroup --query properties.provisioningState
"Succeeded"
生徒
「先生、まとめを読んでARMテンプレートの重要性がよく分かりました!JSONで書くのは少し複雑そうに見えましたが、構造を分解してみると意外とシンプルなんですね。」
先生
「その通りです。最初は難しく感じるかもしれませんが、要は『何を、どこに、どんな設定で作るか』を順番に書いているだけですよ。特にResourcesセクションが心臓部だと意識すれば大丈夫です。」
生徒
「最近はBicepが推奨されているとのことですが、初心者はどちらから触れるのが良いでしょうか?」
先生
「実務で書くならBicepの方が記述量が少なくて楽ですが、ARMテンプレートのJSON構造を知っておくと、Azureが内部でどうリソースを解釈しているかが深く理解できます。まずはJSONのサンプルを読んで、それからBicepに移行するのが理想的な学習ステップですね。」
生徒
「なるほど。デプロイ前にWhat-ifで確認するのも、本番環境を壊さないために絶対必要ですね。コマンド操作にも慣れていこうと思います!」
先生
「素晴らしい意気込みです。機密情報をAzure Key Vaultで管理したり、Gitで履歴を残したりする習慣も今のうちに身につけておきましょう。これらはインフラエンジニアとしての信頼に直結しますよ。」
生徒
「はい!テンプレートを使いこなして、効率的にAzureを操作できるよう頑張ります。ありがとうございました!」