演習 - Azure Resource Manager テンプレートにパラメーターと出力を追加する
この演習では、デプロイ時に Azure ストレージ アカウント名を定義するパラメーターを追加します。 次に、許可されるストレージ アカウント SKU を定義するパラメータを追加し、このデプロイにどれを使用するかを定義します。 また、デプロイ プロセスの後半で使用できる出力を追加して、Azure Resource Manager テンプレート (ARM テンプレート) の有用性を高めます。
ARM テンプレートのパラメーターを作成する
ここでは、実行時に設定できるパラメーターを追加することで、ARM テンプレートの柔軟性を高めます。 storageName
値のパラメーターを作成します。
Visual Studio Code の azuredeploy.json ファイルで、parameters 属性の中かっこ内にカーソルを置きます。 これは
"parameters":{},
のようになります。Enter を選択してから、「par」と入力します。 関連するスニペットの一覧が表示されます。 new-parameter を選択します。これは、テンプレートに汎用パラメータを追加します。 次の例のようになります。
"parameters": { "parameter1": { "type": "string", "metadata": { "description": "description" } } },
パラメータを parameter1 から storageName に変更し、型は文字列のままにします。 minLength 値 3 と maxLength 値 24 を追加します。 description 値 The name of the Azure storage resource を追加します。
これで、パラメーター ブロックは次の例のようになります。
"parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } },
name
とdisplayName
の両方の値のresources
ブロックで新しいパラメーターを使用します。 ファイル全体は、次のコード例のようになります。{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } }, "functions": [], "variables": {}, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-05-01", "name": "[parameters('storageName')]", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Standard_LRS" } } ], "outputs": {} }
ファイルを保存します。
パラメーター化された ARM テンプレートをデプロイする
ここでは、このデプロイの実行内容を適切に反映するようにデプロイの名前を変更して、新しいパラメーターの値を入力します。
ターミナルで、次の Azure CLI コマンドを入力します。 このスニペットは以前に使用したコードと同じですが、デプロイの名前が変更されています。 storageName
パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のユニットで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。
templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today
az deployment group create \
--name $DeploymentName \
--template-file $templateFile \
--parameters storageName={your-unique-name}
ターミナルで、次の Azure PowerShell コマンドを実行します。 このスニペットは以前に使用したコードと同じですが、デプロイの名前が変更されています。 storageName
パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のユニットで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。
$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
-Name $deploymentName `
-TemplateFile $templateFile `
-storageName {your-unique-name}
デプロイをチェックする
デプロイが完了したら、ブラウザーの Azure portal に戻ります。 リソース グループに移動して、3 件成功デプロイがあることを確認します。 このリンクを選択します。
3 つすべてのデプロイが一覧に表示されていることに注意してください。
前に行ったように、addnameparameter デプロイを探索します。
許可される値を制限する別のパラメーターを追加する
ここでは、パラメーターを使用して、1 つのパラメーターに使用できる値を制限します。
storageName
パラメーターの右中かっこの後にカーソルを置きます。 コンマを追加し、Enter を選択します。再び、「par」と入力し、新しいパラメーターを選択します。
新しいジェネリック パラメーターを次のコードのように変更します。
"storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] }
ここには、このパラメーターで許可されている値が一覧表示されます。 許可されていない値でテンプレートが実行された場合、デプロイは失敗します。
このパラメーターにコメントを追加します。
ARM テンプレートでは、
//
と/* */
のコメントがサポートされています。storageSKU
パラメーターを使用するようにリソースを更新します。 Visual Studio Code で IntelliSense を利用すると、この手順が簡単になります。"sku": { "name": "[parameters('storageSKU')]" }
ファイル全体は、次のコード例のようになります。
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } }, "storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] } }, "functions": [], "variables": {}, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-05-01", "name": "[parameters('storageName')]", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "[parameters('storageSKU')]" } } ], "outputs": {} }
ファイルを保存します。
ARM テンプレートをデプロイする
ここでは、許可リストに含まれる storageSKU
パラメーターを使用して、正常にデプロイします。 次に、許可リストに含まれていない storageSKU
パラメーターを使用して、テンプレートのデプロイを試みます。 2 番目のデプロイは、想定したとおりに失敗します。
次のコマンドを実行して、テンプレートをデプロイします。
storageName
パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addSkuParameter-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Standard_GRS storageName={your-unique-name}
このデプロイの完了を許可します。 このデプロイは、想定どおりに成功します。 許可される値のリストにより、テンプレートのユーザーは、リソースに対して機能しないパラメータ値を渡すことができなくなります。 無効な SKU を指定するとどうなるかを見てみましょう。
許可されていないパラメーターでテンプレートをデプロイするには、次のコマンドを実行します。 ここでは、
storageSKU
パラメーターを Basic に変更しました。storageName
パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addSkuParameter-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Basic storageName={your-unique-name}
このデプロイは失敗します。 エラーに注意してください。
次のコマンドを実行して、テンプレートをデプロイします。
storageName
パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_GRS
このデプロイの完了を許可します。 このデプロイは、想定どおりに成功します。 許可される値のリストにより、テンプレートのユーザーは、リソースに対して機能しないパラメータ値を渡すことができなくなります。 無効な SKU を指定するとどうなるかを見てみましょう。
許可されていないパラメーターでテンプレートをデプロイするには、次のコマンドを実行します。 ここでは、
storageSKU
パラメーターを Basic に変更しました。storageName
パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Basic
このデプロイは失敗します。 エラーに注意してください。
ARM テンプレートに出力を追加する
ここでは、ARM テンプレートの outputs
セクションにストレージ アカウント リソースのエンドポイントの出力を追加します。
Visual Studio Code の azuredeploy.json ファイルで、出力属性
"outputs":{},
の中かっこ内にカーソルを置きます。Enter キーを押し、「out」と入力します。関連するスニペットの一覧が表示されます。 [新しい出力] を選択します。 次の例のような一般的な出力がテンプレートに追加されます。
"outputs": { "output1": { "type": "string", "value": "value" }
"output1" を "storageEndpoint" に変更し、
type
の値を "object" に変更します。value
の値を "[reference(parameters('storageName')).primaryEndpoints]" に変更します。 この式は、前のユニットでエンドポイント データを取得する際に説明したものです。 型として "object" を指定したので、オブジェクトが JSON 形式で返されます。"outputs": { "storageEndpoint": { "type": "object", "value": "[reference(parameters('storageName')).primaryEndpoints]" }
ファイルを保存します。
出力を含む ARM テンプレートをデプロイする
ここでは、テンプレートをデプロイし、JSON として出力されたエンドポイントを確認します。 storageName
パラメーターの一意の名前を入力する必要があります。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。
次のコマンドを実行して、テンプレートをデプロイします。 {your-unique-name} を必ずご自分にとって一意の文字列に置き換えてください。
templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addoutputs-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Standard_LRS storageName={your-unique-name}
出力に注意してください。
次のコマンドを実行して、テンプレートをデプロイします。 {your-unique-name} を必ずご自分にとって一意の文字列に置き換えてください。
$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addOutputs-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_LRS
出力に注意してください。
出力のデプロイを確認する
Azure portal で、ご自分の addOutputs デプロイにアクセスします。 ここには出力もあります。