ARM テンプレートの作成
ストレージ アカウントと VM をデプロイするパラメーター化された ARM テンプレートを JSON で作成し、テンプレート関数と変数を使ってテンプレートを再利用可能にします。
「ARM テンプレートの作成」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
ARM テンプレートを使用する理由
ARM テンプレートを使用すると、Azure インフラストラクチャを JSON 形式のコードとして定義できます。これにより、アプリケーション コードとともにバージョン管理できる、再現性と一貫性のあるデプロイが可能になります。テンプレートはべき等であるため、同じテンプレートを複数回実行しても同じ結果になり、変更後も安全に再適用できます。
テンプレートの骨格とスキーマ
すべての ARM テンプレートは、テンプレート スキーマの URL を指す $schema プロパティと、それに続く contentVersion 文字列から始まります。スキーマによって、Azure portal とエディター拡張機能はテンプレートを検証し、IntelliSense を提供できます。続く 5 つの主要セクションは、parameters、variables、functions、resources、outputs です。
{
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#',
'contentVersion': '1.0.0.0',
'parameters': {},
'variables': {},
'functions': [],
'resources': [],
'outputs': {}
}パラメーターの定義
パラメーターを使用すると、デプロイ時に入力値を受け取れるため、テンプレートを再利用できます。各パラメーターには type(string、int、bool、object、array、secureString)、省略可能な defaultValue、検証に使用する省略可能な allowedValues があります。パスワードに secureString を使用すると、その値がデプロイ履歴に記録されることを防げます。
"parameters": {
"storageAccountName": {
"type": "string",
"minLength": 3,
"maxLength": 24,
"metadata": { "description": "Globally unique storage account name" }
},
"sku": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": ["Standard_LRS", "Standard_GRS", "Premium_LRS"]
}
}計算値に変数を使用する
変数には、パラメーターやテンプレート関数から計算された値を格納します。これにより、重複を減らし、テンプレートを保守しやすくできます。変数は一度評価され、[variables('name')] 式を使用して resources セクション全体から参照されます。よくあるパターンは、パラメーターと一意のサフィックスを連結してリソース名を作成することです。
"variables": {
"uniqueStorageName": "[concat(parameters('storageAccountName'), uniqueString(resourceGroup().id))]",
"location": "[resourceGroup().location]"
}リソースの定義
resources 配列は、ARM テンプレートの中心となる部分です。各要素は、type、apiVersion、name、location という必須フィールドを使用して、1 つの Azure リソースを記述します。apiVersion によってリソース プロバイダーのスキーマ バージョンが固定されます。最新の機能を利用し、非推奨のプロパティを避けるため、常に新しい安定版を使用してください。
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"name": "[variables('uniqueStorageName')]",
"location": "[variables('location')]",
"sku": { "name": "[parameters('sku')]" },
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true,
"minimumTlsVersion": "TLS1_2"
}
}
]テンプレート関数と式
ARM テンプレートの式は角かっこ [...] で囲み、文字列、配列、オブジェクト、リソース ID 用の組み込み関数を使用できます。よく使われる関数には、concat()、resourceGroup()、resourceId()、uniqueString()、parameters() があります。これらの関数はローカルではなく、デプロイ時に ARM によってサーバー側で評価されます。
// Reference a resource ID inside a template
"subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'myVNet', 'mySubnet')]"
// Build a unique, deterministic name
"name": "[concat('storage', uniqueString(resourceGroup().id))]"
// Conditionally include a resource
"condition": "[equals(parameters('deployStorage'), true)]"Outputs: 値を返す
outputs セクションでは、デプロイが成功した後に ARM が返す値を定義します。Outputs はテンプレートを連携させるうえで重要です。たとえば、ネットワーク テンプレートをデプロイしてサブネットのリソース ID を出力し、その値を VM テンプレートのパラメーターとして渡せます。Outputs では、デプロイされたリソースのプロパティを含め、任意の式を参照できます。
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('uniqueStorageName')]"
},
"blobEndpoint": {
"type": "string",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints.blob]"
}
}リンクされたテンプレートと入れ子になったテンプレート
複雑なアーキテクチャ向けに、ARM はリンクされたテンプレート(外部テンプレート URL を参照)と入れ子になったテンプレート(Microsoft.Resources/deployments 型を使用して resources 配列内にテンプレートを埋め込む)をサポートしています。これにより、大規模なインフラストラクチャのデプロイを、モジュール化された再利用可能な単位に分割しながら、単一のオーケストレーション テンプレートをエントリ ポイントとして維持できます。
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "networkDeploy",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "https://raw.githubusercontent.com/contoso/templates/main/network.json",
"contentVersion": "1.0.0.0"
},
"parameters": {
"vnetName": { "value": "[parameters('vnetName')]" }
}
}
}パラメーター ファイル
コマンド ラインでパラメーターを渡す代わりに、別のパラメーター ファイルに保存できます。これは、名前と値のペアを含む parameters オブジェクトを持つ JSON ファイルです。パラメーター ファイルは環境ごとに用意でき(例: dev.parameters.json、prod.parameters.json)、ソース管理にコミットできます。機密性の高い値はプレーンテキストではなく、Azure Key Vault の参照として保持できます。
// dev.parameters.json
{
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#',
'contentVersion': '1.0.0.0',
'parameters': {
'storageAccountName': { 'value': 'devstorageacct' },
'sku': { 'value': 'Standard_LRS' }
}
}
// Deploy with parameters file
// az deployment group create -g MyRG -f azuredeploy.json -p dev.parameters.jsonテンプレートのデプロイと検証
Azure CLI コマンド az deployment group create を使用して、テンプレートをリソース グループにデプロイします。本番環境にデプロイする前に、az deployment group validate を実行してスキーマとロジックのエラーを検出し、az deployment group what-if を実行してリソースの変更をプレビューしてください。この 3 つのコマンドで、安全なデプロイ パイプラインを構成できます。検証、プレビュー、デプロイの順に実行します。
# Step 1: Validate the template syntax
az deployment group validate \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.json
# Step 2: Preview changes
az deployment group what-if \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.json
# Step 3: Deploy
az deployment group create \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.jsonARM テンプレートのベスト プラクティス
次の ARM テンプレートのベスト プラクティスに従ってください。環境固有の値にはパラメーターを使用し、重複を避けるために変数を使用し、API バージョンは安定版に固定し、パスワードにはsecureString を使用し、パラメーターにメタデータの説明を追加し、大規模なテンプレートはリンクされたモジュールに分割します。テンプレートは Git リポジトリに保存し、監査可能性を確保するため CI/CD パイプラインを通じてデプロイしてください。
理解度チェック
このレッスンで学んだ Microsoft Azure Fundamentals(AZ-900)の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、ARM テンプレートが Azure インフラストラクチャを宣言的に定義する JSON ドキュメントであること、パラメーターと変数によってテンプレートを再利用しやすく保守しやすくできること、そしてvalidate、what-if、deployのワークフローによって安全で再現性のあるデプロイが可能になることを学びました。次は、ARM JSON を現代的に抽象化した Bicep について学びます。
よくある質問
「ARM テンプレートの作成」レッスンは無料ですか?
はい。「ARM テンプレートの作成」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「ARM テンプレートの作成」で何を学びますか?
ストレージ アカウントと VM をデプロイするパラメーター化された ARM テンプレートを JSON で作成し、テンプレート関数と変数を使ってテンプレートを再利用可能にします。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「ARM テンプレートの作成」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。