练习 - 使用 copy 减少重复
在此最终练习中,你将继续使用存储帐户。 这次,你将使用 copy
构造从单个定义预配多个存储帐户。
Copy
为你提供一个中心位置,需要在要求改变时进行更新。
创建 ARM 模板
在这里,你将创建用于定义存储帐户资源的 Azure 资源管理器 (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
参数生成的副本数。
部署模板
在这里,你将像以前一样部署模板。 部署步骤预配两个相似的存储帐户。
创建保留存储帐户名称的 PowerShell 变量。
$STORAGE_ACCT_NAME="tailwindsa" + (Get-Random -Count 1)
运行以下
New-AzResourceGroupDeployment
命令以部署模板:New-AzResourceGroupDeployment ` -TemplateFile "./copy.json" ` -storageAccountName $STORAGE_ACCT_NAME ` -storageCount 2
在这里,你会将
storageCount
设置为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”)是第一个存储帐户。
- tailwindsa1852777811(基名称加上“1”)是第二个存储帐户。
干得漂亮! 随着需求的变化(例如所需的性能层),你可以从单个位置修改资源定义。
清理
完成本模块后,沙盒会自动清理资源。
使用自己的订阅时,最好在项目结束时确定是否仍然需要所创建的资源。 让资源保持运行状态会耗费成本。 可以逐个删除资源,也可以删除资源组以删除整个资源集。
创建 ARM 模板
在这里,你将创建用于定义存储帐户资源的 Azure 资源管理器 (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
参数生成的副本数。
部署模板
在这里,你将像以前一样部署模板。 部署步骤预配两个相似的存储帐户。
创建保留存储帐户名称的 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
在这里,你会将
storageCount
设置为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”)是第一个存储帐户。
- tailwindsa9821(基名称加上“1”)是第二个存储帐户。
干得漂亮! 随着需求的变化(例如所需的性能层),你可以从单个位置修改资源定义。
清理
完成本模块后,沙盒会自动清理资源。
使用自己的订阅时,最好在项目结束时确定是否仍然需要所创建的资源。 让资源保持运行状态会耗费成本。 可以逐个删除资源,也可以删除资源组以删除整个资源集。