演習 - copy を使用して繰り返しを減らす
この最後の演習では、引き続きストレージ アカウントを使用します。 ここでは、copy
コンストラクトを使用して、1 つの定義から複数のストレージ アカウントをプロビジョニングします。
Copy
を使用すると、要件が変更されたときに、中央の 1 か所を更新するだけで済みます。
ARM テンプレートを作成する
ここでは、ストレージ アカウント リソースを定義する Azure Resource Manager (ARM) テンプレートを作成します。 テンプレートで copy
を使用して、同じリソースの類似バージョンを指定された回数だけ作成します。
Visual Studio Code で、azuredeploy.json が格納されているディレクトリに、copy.json という名前のファイルを作成します。
次の内容を copy.json に追加します。
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageCount": { "type": "int", "defaultValue": 1, "metadata": { "description": "the number of storage accounts copies being deployed" } }, "storageAccountName": { "type": "string", "defaultValue": "storage", "metadata": { "description": "the name of the storage account" } } }, "functions": [], "variables": {}, "resources": [ { "name": "[concat(parameters('storageAccountName'), copyIndex())]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "tags": { "displayName": "storageaccount1" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" }, "copy": { "name": "storagecopy", "count": "[parameters('storageCount')]" } } ], "outputs": {} }
storageCount
パラメーターを使用して、作成するコピーの数を定義します。
resources
で、ストレージ アカウント リソースを指定します。 ストレージ アカウント名を一意にするには、テンプレートで copyIndex()
を使用して、現在のインデックスをストレージ アカウント名に追加します。
copy
セクションにより、storageCount
パラメーターから作成するコピーの数が読み取られます。
テンプレートのデプロイ
ここでは、前と同じようにテンプレートをデプロイします。 デプロイ ステップにより、2 つの似たストレージ アカウントがプロビジョニングされます。
ストレージ アカウントの名前を保持する PowerShell 変数を作成します。
$STORAGE_ACCT_NAME="tailwindsa" + (Get-Random -Count 1)
次の
New-AzResourceGroupDeployment
コマンドを実行して、テンプレートをデプロイします。New-AzResourceGroupDeployment ` -TemplateFile "./copy.json" ` -storageAccountName $STORAGE_ACCT_NAME ` -storageCount 2
ここでは、2 つのストレージ アカウントをプロビジョニングするため、
storageCount
を2
に設定します。
デプロイを検証する
出力には 2 つのストレージ アカウントが作成されたことが示されますが、ここでは、Get-AzResource
コマンドを実行して出力リソースに注目します。
次の Get-AzResource
コマンドを実行して、リソースがデプロイされたことを確認します。
Get-AzResource -Name tailwindsa* -ResourceGroupName <rgn>resource group name</rgn> | Select-Object -Property Name,ResourceId
tailwindsa*
引数を使用して、リソースに指定した名前のプレフィックスと一致する識別子だけを表示するように指定します。
次のような内容が出力されます。
Name ResourceId
---- ----------
tailwindsa1852777810 /subscriptions/11112222-3333-4444-5555-1111222233334444/resourceGroups/<rgn>resoure group</rgn>/providers/Microsoft.Storage/storageAccount…
tailwindsa1852777811 /subscriptions/11112222-3333-4444-5555-1111222233334444/resourceGroups/<rgn>resoure group</rgn>/providers/Microsoft.Storage/storageAccount…
この例では、次のように記述されています。
- tailwindsa185277781 は、ストレージ アカウントに対して生成されたベース名です (
"tailwindsa" + Get-Random -Count 1
)。 - tailwindsa1852777810 (ベース名と "0") は、1 番目のストレージ アカウントです。
- tailwindsa1852777811 (ベース名と "1") は、2 番目のストレージ アカウントです。
上出来 必要なパフォーマンス レベルなど、ニーズが変化したら、リソース定義を 1 つの場所から変更できます。
クリーンアップ
このモジュールを完了したら、サンド ボックスは、リソースを自動的にクリーンアップします。
独自のサブスクリプションを使用している場合は、プロジェクトの最後に、作成したリソースがまだ必要かどうかを確認してください。 リソースを実行したままにすると、コストが発生する可能性があります。 リソースは個別に削除することも、リソース グループを削除してリソースのセット全体を削除することもできます。
ARM テンプレートを作成する
ここでは、ストレージ アカウント リソースを定義する Azure Resource Manager (ARM) テンプレートを作成します。 テンプレートで copy
を使用して、同じリソースの類似バージョンを指定された回数だけ作成します。
Visual Studio Code で、azuredeploy.json が格納されているディレクトリに、copy.json という名前のファイルを作成します。
次の内容を copy.json に追加します。
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageCount": { "type": "int", "defaultValue": 1, "metadata": { "description": "the number of storage accounts being deployed" } }, "storageAccountName": { "type": "string", "defaultValue": "storage", "metadata": { "description": "the name of the storage account" } } }, "functions": [], "variables": {}, "resources": [ { "name": "[concat(parameters('storageAccountName'), copyIndex())]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "tags": { "displayName": "storageaccount1" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" }, "copy": { "name": "storagecopy", "count": "[parameters('storageCount')]" } } ], "outputs": {} }
storageCount
パラメーターを使用して、作成するコピーの数を定義します。
resources
で、ストレージ アカウント リソースを指定します。 ストレージ アカウント名を一意にするには、テンプレートで copyIndex()
を使用して、現在のインデックスをストレージ アカウント名に追加します。
copy
セクションにより、storageCount
パラメーターから作成するコピーの数が読み取られます。
テンプレートのデプロイ
ここでは、前と同じようにテンプレートをデプロイします。 デプロイ ステップにより、2 つの似たストレージ アカウントがプロビジョニングされます。
ストレージ アカウントの名前を保持する Bash 変数を作成します。
STORAGE_ACCT_NAME=tailwindsa$RANDOM
次の
az deployment group create
コマンドを実行して、テンプレートをデプロイします。az deployment group create \ --template-file copy.json \ --parameters storageAccountName=$STORAGE_ACCT_NAME storageCount=2
ここでは、2 つのストレージ アカウントをプロビジョニングするため、
storageCount
を2
に設定します。
デプロイを検証する
出力には 2 つのストレージ アカウントが作成されたことが示されますが、ここでは、az deployment group show
コマンドを実行して出力リソースに注目します。
次の az deployment group show
コマンドを実行して、デプロイについての詳細を表示します。
az deployment group show \
--name copy \
--query "properties.outputResources[].id" \
--output tsv
--query
引数で、出力リソースから識別子だけを表示するように指定します。
次のような内容が出力されます。
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>resource group name</rgn>/providers/Microsoft.Storage/storageAccounts/tailwindsa9820
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>resource group name</rgn>/providers/Microsoft.Storage/storageAccounts/tailwindsa9821
この例では、次のように記述されています。
- tailwindsa982 は、ストレージ アカウントに対して生成されたベース名です (
tailwindsa$RANDOM
)。 - tailwindsa9820 (ベース名と "0") は、1 番目のストレージ アカウントです。
- tailwindsa9821 (ベース名と "1") は、2 番目のストレージ アカウントです。
上出来 必要なパフォーマンス レベルなど、ニーズが変化したら、リソース定義を 1 つの場所から変更できます。
クリーンアップ
このモジュールを完了したら、サンド ボックスは、リソースを自動的にクリーンアップします。
独自のサブスクリプションを使用している場合は、プロジェクトの最後に、作成したリソースがまだ必要かどうかを確認してください。 リソースを実行したままにすると、コストが発生する可能性があります。 リソースは個別に削除することも、リソース グループを削除してリソースのセット全体を削除することもできます。