练习 - 使用 Azure 资源管理器函数创建表达式

已完成

在本练习中,你将使用 Azure 资源管理器 (ARM) 模板函数创建表达式。 该表达式通过组合前缀输入与资源组 ID 的哈希,为每个资源组创建唯一的名称。 这将生成 dev2hu6sbtr5staging5his8hgr67 等 Azure 存储帐户名称。

在本练习中,你将使用 适用于 Visual Studio Code 的 Azure 资源管理器工具。 请务必在 Visual Studio Code 中安装此扩展。

注意

本练习可选做。 若要完成本练习,则需要在开始之前创建 Azure 订阅。 如果没有 Azure 帐户或不想暂时创建一个帐户,可以通读说明,以便了解所显示的信息。

注意

在本单元中,你将使用 Azure Cloud Shell 作为终端。 可以通过 Azure 门户Cloud Shell 登录访问 Cloud Shell。 无需在电脑或笔记本电脑上安装任何内容即可使用它。

注意

需要使用资源组来完成本练习中的步骤。 可以使用已创建的资源组,也可以专门为此练习创建新的资源组。 如果选择创建新的资源组,这样就可以更轻松地清理完成练习时创建的任何资源。 如果没有现有资源组或想要为此练习创建新的资源组,可以按照 使用 Azure 门户和 Azure 资源管理器 中的步骤管理资源组,使用 Azure 门户创建资源组,或者可以使用 Azure CLI 通过 Azure CLI 创建资源组,按照 “管理 Azure 资源组 ”中的步骤作。

注意

在本练习中,请将示例中的 myResourceGroupName 替换为现有资源组的名称或为此练习创建的资源组的名称。

创建 ARM 模板文件

在上一个模块中,你创建了一个已部署存储帐户的 ARM 模板。 并向此文件添加了参数和输出。 现在,你将从此文件开始操作,但输出已被移除,以减少开销。

  1. 打开 Visual Studio Code 并创建名为 azuredeploy.json 的文件。 如果在上一个模块中有此文件,则可使用该文件。

  2. 将文件的内容替换为以下代码:

    {
        "$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"
                ]
            }
       },
        "functions": [],
        "variables": {},
        "resources": [{
            "name": "[parameters('storageName')]",
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-06-01",
            "tags": {
                "displayName": "[parameters('storageName')]"
            },
            "location": "[resourceGroup().location]",
            "kind": "StorageV2",
            "sku": {
             "name": "[parameters('storageSKU')]"
           }
        }],
         "outputs": {}
    }
    
  3. 如果未完成上一个模块,请花点时间查看此文件。 请注意 storageName 参数。 此参数用于传入存储帐户的唯一名称。

创建表达式以设置唯一的存储帐户名称

更改参数以使用存储帐户名称的前缀,而不传入存储帐户的名称。 此参数会传递给表达式中的 concat 函数。

  1. parameters 部分,将 storageName 更改为 storagePrefix

  2. storagePrefix 参数的 maxLength: 特性的值更改为 11。 存储帐户名称的最大长度为 24 个字符,需要确保从你创建的函数中添加的哈希不会导致名称长于 24。

  3. 创建表达式来设置唯一的存储帐户名称。 在 resources 部分,将 name:displayName: 特性的值从 "[parameters('storageName')]" 更改为 "[toLower(concat(parameters('storagePrefix'),uniqueString(resourceGroup().id)))]"。 你在上一个单元中了解过该表达式。 该文件现在应如下所示:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
           "storagePrefix": {
               "type": "string",
               "minLength": 3,
               "maxLength": 11
           },
            "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": [{
            "name": "[toLower(concat(parameters('storagePrefix'),uniqueString(resourceGroup().id)))]",
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-06-01",
            "tags": {
                "displayName": "[toLower(concat(parameters('storagePrefix'),uniqueString(resourceGroup().id)))]"
            },
            "location": "[resourceGroup().location]",
            "kind": "StorageV2",
            "sku": {
             "name": "[parameters('storageSKU')]"
           }
        }],
        "outputs": {}
    }
    

将 ARM 模板部署到 Azure

若要将此模板部署到 Azure,你需要从 Visual Studio Code 终端登录到 Azure 帐户。 请确保已安装 Azure CLI 工具。

  1. 使用“终端”菜单打开终端窗口

  2. 如果终端窗口右侧的下拉菜单显示“bash”,即表示你有了要使用的正确 shell。 可以跳到下一节继续进行操作。

    显示下拉菜单中带有 bash 的 Visual Studio Code 终端窗口的屏幕截图。

  3. 如果没有正确的 shell,请选择下拉菜单中的“选择默认 Shell”

  4. 选择“bash”

    显示 Visual Studio Code 终端窗口中选择 shell 列表的屏幕截图。

  5. 选择终端中的 +,以 bash 作为 shell 创建一个新的终端。

登录到 Azure

  1. 从 Visual Studio Code 中的终端运行以下命令以登录到 Azure。 运行此命令时,会打开一个浏览器,使你能够登录到你的帐户:

    az login
    
  2. 登录后,将在终端中看到与帐户关联的订阅的列表。

  3. 为在此会话中运行的所有 Azure CLI 命令设置默认订阅。 将 “我的订阅 ”替换为要用于本练习的 Azure 订阅的名称。

    az account set --subscription "My Subscription"
    

设置默认资源组

运行 az configure 以设置默认资源组名称。 这使你能够在本练习的其余 Azure CLI 命令中省略该参数。 将 myResourceGroupName 替换为现有资源组的名称或为此练习创建的资源组的名称。

```azurecli
az configure --defaults group="myResourceGroupName"
```

将模板部署到 Azure

你已在上一模块中了解了部署命令。 此处,我们将使用 Azure CLI az deployment group create 命令。

  • 在 Visual Studio Code 终端中使用 Azure CLI 命令部署模板。 请记住将 {your-prefix} 替换为其他字符串。 例如,可使用“storage”

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addfunction-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storagePrefix={your-prefix}
    

    在这段代码的最前面部分,为要部署的模板文件的路径设置了 Azure CLI 变量,并且设置了此部署的名称。 然后使用 az deployment group create 命令将模板部署到 Azure。

    你应会在终端中看到消息 Running...

若要将此模板部署到 Azure,你需要从 Visual Studio Code 终端登录到 Azure 帐户。 请确保已安装 Azure PowerShell 工具。

  1. 使用“终端”菜单打开终端窗口

  2. 如果终端窗口右侧的下拉菜单显示“pwsh”,即表示你有了要使用的正确 shell。 可以跳到下一节继续进行操作。

    显示下拉菜单中带有 pwsh 的 Visual Studio Code 终端窗口的屏幕截图。

  3. 如果没有正确的 shell,请选择下拉菜单中的“选择默认 Shell”

  4. 选择“pwsh”

    显示 Visual Studio Code 终端窗口中选择 shell 列表的屏幕截图。

  5. + 终端中选择,以 pwsh 为 shell 创建一个新终端。

使用 Azure PowerShell 登录到 Azure

  1. 从 Visual Studio Code 中的终端运行以下命令以登录到 Azure。 运行此命令时,系统会提示你打开一个浏览器以转至一个 URL,可以通过此 URL 来登录到你的帐户。 使用此提示中的代码。

    Connect-AzAccount
    
  2. 登录后,将在终端中看到与帐户关联的订阅的列表。

    为在此会话中运行的所有 Azure CLI 命令设置默认订阅。

  3. 获取订阅 ID。 该命令会列出你的订阅及其 ID。 订阅 ID 位于第二列。 查找您打算使用的特定订阅,并复制第二列。 如下所示:aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e

    Get-AzSubscription
    
  4. 将活动订阅更改为在上一步中选择的订阅。 请确保将 {Your subscription ID} 替换为你复制的 ID。

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    
  5. 设置默认资源组。 这使你能够在本练习的其余 Azure PowerShell 命令中省略该参数。

    Set-AzDefault -ResourceGroupName myResourceGroupName
    

将模板部署到 Azure

你已在上一模块中了解了部署命令。 此处,我们将使用 Azure PowerShell New-AzResourceGroupDeployment 命令。

  • 在 Visual Studio Code 终端中使用 Azure PowerShell 命令部署模板。 请记住将 {your-prefix} 替换为其他字符串。 例如,可使用“storage”

    $templateFile = "azuredeploy.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addfunction-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storagePrefix {your-prefix}
    

在这段代码的最前面部分,为要部署的模板文件的路径设置了 Azure PowerShell 变量,并且设置了此部署的名称。 然后使用 New-AzResourceGroupDeployment 命令将模板部署到 Azure。

检查你的部署

部署完成后,转到 Azure 门户 ,确保你位于正确的订阅中。 若要查看订阅,请选择页面右上角的头像。 选择“切换目录”。 在列表中,选择相应的目录。

  1. 在左窗格中,选择“资源组”

  2. 选择 myResourceGroupName

  3. 在“概述”部分中,你会看到一个成功的部署

    显示资源组概述的 Azure 门户的屏幕截图。“部署”部分显示一个部署成功。

  4. 选择“1 个已成功”以查看部署的详细信息

    显示部署的 Azure 门户的屏幕截图。列出了一个部署,状态为“成功”。

  5. 选择“addfunction”以查看部署了哪些资源

    显示已部署存储帐户的 Azure 门户的屏幕截图。

  6. 让页面在浏览器中保持打开状态,以便在此模块后面的部分中可以再次检查部署。