前の チュートリアルでは、 Azure ストレージ アカウント をテンプレートに追加してデプロイする方法を学習しました。 このチュートリアルでは、パラメーターを追加して Azure Resource Manager テンプレート (ARM テンプレート) を改善する方法について説明します。 この命令の完了には 14 分 かかります。
[前提条件]
リソースに関するチュートリアルを完了することをお勧めしますが、必須ではありません。
Visual Studio Code と、Azure PowerShell または Azure Command-Line インターフェイス (CLI) が必要です。 詳細については、 テンプレート ツールを参照してください。
テンプレートを確認する
前のチュートリアルの最後に、テンプレートには次の JSON ファイルがあります。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "{provide-unique-name}",
"___location": "eastus",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
このテンプレートに問題があることがわかります。 ストレージ アカウント名はハードコーディングされています。 このテンプレートは、毎回同じストレージ アカウントをデプロイする場合にのみ使用できます。 別の名前のストレージ アカウントをデプロイするには、新しいテンプレートを作成する必要があります。これは明らかに、デプロイを自動化する実用的な方法ではありません。
テンプレートを再利用できるようにする
テンプレートを再利用できるようにするには、ストレージ アカウント名を渡すために使用できるパラメーターを追加します。 次の例で強調表示されている JSON ファイルは、テンプレートの変更を示しています。
storageName パラメーターは文字列として識別されます。 ストレージ アカウント名は、すべて小文字または数字で、24 文字の制限があります。
ファイル全体をコピーし、テンプレートをその内容に置き換えます。
{
"$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
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[parameters('storageName')]",
"___location": "eastus",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
テンプレートのデプロイ
テンプレートをデプロイしましょう。 次の例では、Azure CLI または PowerShell を使用してテンプレートをデプロイします。 デプロイ コマンドの値の 1 つとしてストレージ アカウント名を指定していることに注意してください。 ストレージ アカウント名には、前のチュートリアルで使用したのと同じ名前を指定します。
リソース グループを作成していない場合は、「リソース グループの 作成」を参照してください。 この例では、templateFileに示すように、変数をテンプレート ファイルのパスに設定することを前提としています。
New-AzResourceGroupDeployment `
-Name addnameparameter `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}"
リソース更新の理解
前に使用したのと同じ名前のストレージ アカウントをデプロイした後、再デプロイがリソースにどのような影響を与えるか疑問に思うかもしれません。
リソースが既に存在し、プロパティに変更がない場合は、それ以上の操作は必要ありません。 リソースが存在し、プロパティが変更されると、更新されます。 リソースが存在しない場合は、作成されます。
この更新処理方法は、テンプレートに Azure ソリューションに必要なすべてのリソースを含めることができるということです。 テンプレートを安全に再デプロイし、リソースが変更されるか、必要な場合にのみ作成されることを知ることができます。 たとえば、ストレージ アカウントにファイルを追加する場合は、ファイルを失うことなくストレージ アカウントを再デプロイできます。
環境別にカスタマイズする
パラメーターを使用すると、特定の環境に合わせて調整された値を指定することで、デプロイをカスタマイズできます。 開発、テスト、運用環境のいずれにデプロイするかに基づいて、さまざまな値を渡すことができます。
前のテンプレートでは、常に標準のローカル冗長ストレージ (LRS) Standard_LRS アカウントが デプロイされます。 環境に応じて、さまざまな在庫保持ユニット (SKU) を柔軟にデプロイできます。 次の例は、SKU のパラメーターを追加する変更を示しています。 ファイル全体をコピーし、テンプレートに貼り付けます。
{
"$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
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Premium_ZRS",
"Standard_GZRS",
"Standard_RAGZRS"
]
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[parameters('storageName')]",
"___location": "eastus",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
storageSKU パラメーターには既定値があります。 デプロイで指定されていない場合は、この値を使用します。 また、許可される値の一覧も含まれています。 これらの値は、ストレージ アカウントの作成に必要な値と一致します。 テンプレート ユーザーに機能的な SKU を渡してもらいたいです。
テンプレートを再デプロイする
もう一度デプロイする準備ができました。 既定の SKU は Standard_LRS に設定されているため、パラメーター値は既に指定されています。
New-AzResourceGroupDeployment `
-Name addskuparameter `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}"
注
デプロイが失敗した場合は、 verbose スイッチを使用して、作成されているリソースに関する情報を取得します。 デバッグの詳細を取得するには、 debug スイッチを使用します。
テンプレートの柔軟性を確認するために、もう一度デプロイしましょう。 今回は、SKU パラメーターを標準の geo 冗長ストレージ (GRS) Standard_GRSに設定 します。 新しい名前を渡して別のストレージ アカウントを作成するか、同じ名前を使用して既存のストレージ アカウントを更新できます。 どちらのオプションも機能します。
New-AzResourceGroupDeployment `
-Name usenondefaultsku `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}" `
-storageSKU Standard_GRS
最後に、もう 1 つのテストを実行し、許可された値の 1 つではない SKU を渡すとどうなるかを確認しましょう。 この場合、テンプレート ユーザーが 基本 が SKU の 1 つであると考えるシナリオをテストします。
New-AzResourceGroupDeployment `
-Name testskuparameter `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}" `
-storageSKU basic
このコマンドは、許可された値を示すエラー メッセージで一度に失敗します。 ARM プロセッサは、デプロイが開始される前にエラーを検出します。
リソースをクリーンアップする
次のチュートリアルに進む場合は、リソース グループを削除する必要はありません。
ここで停止している場合は、リソース グループを削除して、デプロイされたリソースをクリーンアップできます。
- Azure portal で、左側のメニューから [リソース グループ ] を選択します。
- 任意のフィールドの [フィルター] テキスト フィールドにリソース グループ名を入力します。
- myResourceGroup の横にあるチェック ボックスをオンにし、 myResourceGroup またはリソース グループ名を選択します。
- トップ メニューから [リソース グループの削除] を選択します。
次のステップ
パラメーターを追加して、 最初のチュートリアル で作成したテンプレートを改善しました。 次のチュートリアルでは、テンプレート関数について説明します。