练习 - 使用 copy 减少重复

已完成

在此最终练习中,你将继续使用存储帐户。 这次,你将使用 copy 构造从单个定义预配多个存储帐户。

Copy 为你提供一个中心位置,需要在要求改变时进行更新。

创建 ARM 模板

在这里,你将创建用于定义存储帐户资源的 Azure 资源管理器 (ARM) 模板。 该模板按指定的次数使用 copy 创建同一资源的相似版本。

  1. 在 Visual Studio Code 中,在包含 azuredeploy.json 的同一目录中创建一个名为 copy.json 的文件。

  2. 将这些内容添加到 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 参数生成的副本数。

部署模板

在这里,你将像以前一样部署模板。 部署步骤预配两个相似的存储帐户。

  1. 创建保留存储帐户名称的 PowerShell 变量。

    $STORAGE_ACCT_NAME="tailwindsa" + (Get-Random -Count 1)
    
  2. 运行以下 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 创建同一资源的相似版本。

  1. 在 Visual Studio Code 中,在包含 azuredeploy.json 的同一目录中创建一个名为 copy.json 的文件。

  2. 将这些内容添加到 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 参数生成的副本数。

部署模板

在这里,你将像以前一样部署模板。 部署步骤预配两个相似的存储帐户。

  1. 创建保留存储帐户名称的 Bash 变量。

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    
  2. 运行以下 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”)是第二个存储帐户。

干得漂亮! 随着需求的变化(例如所需的性能层),你可以从单个位置修改资源定义。

清理

完成本模块后,沙盒会自动清理资源。

使用自己的订阅时,最好在项目结束时确定是否仍然需要所创建的资源。 让资源保持运行状态会耗费成本。 可以逐个删除资源,也可以删除资源组以删除整个资源集。