练习 - 添加参数和修饰器

已完成

备注

首次激活沙盒并接受这些条款后,你的 Microsoft 帐户将与名为“Microsoft Learn 沙盒”的新 Azure 目录相关联。 还会将你添加到名为“Concierge 订阅”的特殊订阅中。

在 HR 应用程序迁移过程中,你将创建一个 Bicep 模板来部署 Azure 资源。 在本练习中,你将创建 Azure 应用服务计划和应用服务应用。 将修饰器应用于每个参数,以确保它们始终包含预期值。

在此过程中,你将执行以下任务:

  • 创建包含参数和变量的 Bicep 文件。
  • 向参数添加修饰器。
  • 测试部署,确保模板有效。

本练习使用适用于 Visual Studio Code 的 Bicep 扩展。 请务必在 Visual Studio Code 中安装此扩展。

使用参数创建 Bicep 模板

  1. 打开 Visual Studio Code。

  2. 新建一个名为 main.bicep 的文件。

  3. 保存空文件,以便 Visual Studio Code 加载 Bicep 工具。

    你可以选择“文件”>“另存为”,也可以在 Windows 中选择Ctrl+S(在 macOS 上选择 ⌘+S)。 请务必记住保存文件的位置。 例如,你可能希望创建脚本文件,并将其存储在其中。

  4. 将以下内容添加到文件中。 你很快就会部署模板。 自行输入内容,而不是复制和粘贴,这样就可以了解工具如何帮助你编写 Bicep 文件。

    param environmentName string = 'dev'
    param solutionName string = 'toyhr${uniqueString(resourceGroup().id)}'
    param appServicePlanInstanceCount int = 1
    param appServicePlanSku object = {
      name: 'F1'
      tier: 'Free'
    }
    param location string = 'eastus'
    
    var appServicePlanName = '${environmentName}-${solutionName}-plan'
    var appServiceAppName = '${environmentName}-${solutionName}-app'
    

    你将在此处创建多个参数,它们使用混合类型。 你将为每个参数定义默认值。 某些默认值包括字符串内插和 uniqueString() 函数。

    提示

    uniqueString() 函数可用于创建全局唯一的资源名称。 它返回一个字符串,该字符串在部署到同一个资源组时是相同的,但在部署到不同资源组或订阅时是不同的。

    此外,还要定义用于构建 Azure 应用服务计划和应用服务名称的变量。 它们的值包括你指定的一些参数。 执行部署的用户可以重写参数值,但不能重写变量的值。

    提示

    你指定参数 location 应设置为 westus3。 通常,将使用 resourceGroup().location 属性在与资源组相同的位置创建资源。 但是,使用 Microsoft Learn 沙盒时,需要使用与资源组位置不匹配的某些 Azure 区域。

  5. 在 Visual Studio Code 的 main.bicep 文件中,将以下代码添加到文件底部:

    resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSku.name
        tier: appServicePlanSku.tier
        capacity: appServicePlanInstanceCount
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    

    请注意,资源使用定义的参数值。

  6. 保存对文件所做的更改。

添加参数说明

  1. 在 Visual Studio Code 的 main.bicep 文件中,将 @description 修饰器直接添加到在上一任务中创建的每个参数上方。 参数应类似于以下示例:

    @description('The name of the environment. This must be dev, test, or prod.')
    param environmentName string = 'dev'
    
    @description('The unique name of the solution. This is used to ensure that resource names are unique.')
    param solutionName string = 'toyhr${uniqueString(resourceGroup().id)}'
    
    @description('The number of App Service plan instances.')
    param appServicePlanInstanceCount int = 1
    
    @description('The name and tier of the App Service plan SKU.')
    param appServicePlanSku object = {
      name: 'F1'
      tier: 'Free'
    }
    
    @description('The Azure region into which the resources should be deployed.')
    param location string = 'eastus'
    
  2. 保存对文件所做的更改。

限制输入值

你的玩具公司将把 HR 应用程序部署到三个环境中:devtestprod。 你需要将 environmentName 参数限制为仅允许这三个值。

  1. 在 Visual Studio Code 的 main.bicep 文件中,找到 environmentName 参数。 在其 @allowed 修饰器下面插入 @description 修饰器。 完成后,参数应如以下示例所示:

    @description('The name of the environment. This must be dev, test, or prod.')
    @allowed([
      'dev'
      'test'
      'prod'
    ])
    param environmentName string = 'dev'
    

    请注意,要将 environmentName 参数的参数值限制为 devtestprod。 如果将来会添加更多环境,则需要更新此列表。

  2. 保存对文件所做的更改。

限制输入长度

solutionName 参数用于生成资源的名称。 你想要强制要求最小长度为 5 个字符,最大长度为 30 个字符。

  1. 在 Visual Studio Code 的 main.bicep 文件中,找到 solutionName 参数。 在 @description 修饰器下面添加 @minLength@maxLength 修饰器。 完成后,参数应如以下示例所示:

    @description('The unique name of the solution. This is used to ensure that resource names are unique.')
    @minLength(5)
    @maxLength(30)
    param solutionName string = 'toyhr${uniqueString(resourceGroup().id)}'
    
  2. 保存对文件所做的更改。

限制数值

接下来,你将确保 appServicePlanInstanceCount 参数只允许 1 到 10 之间的值。

  1. 在 Visual Studio Code 的 main.bicep 文件中,找到 appServicePlanInstanceCount 参数。 在 @description 修饰器下面添加 @minValue@maxValue 修饰器。 完成后,参数应如以下示例所示:

    @description('The number of App Service plan instances.')
    @minValue(1)
    @maxValue(10)
    param appServicePlanInstanceCount int = 1
    
  2. 保存对文件所做的更改。

验证 Bicep 文件

完成上述所有更改后,Bicep 文件应如以下示例所示:

@description('The name of the environment. This must be dev, test, or prod.')
@allowed([
  'dev'
  'test'
  'prod'
])
param environmentName string = 'dev'

@description('The unique name of the solution. This is used to ensure that resource names are unique.')
@minLength(5)
@maxLength(30)
param solutionName string = 'toyhr${uniqueString(resourceGroup().id)}'

@description('The number of App Service plan instances.')
@minValue(1)
@maxValue(10)
param appServicePlanInstanceCount int = 1

@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object = {
  name: 'F1'
  tier: 'Free'
}

@description('The Azure region into which the resources should be deployed.')
param location string = 'eastus'

var appServicePlanName = '${environmentName}-${solutionName}-plan'
var appServiceAppName = '${environmentName}-${solutionName}-app'

resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSku.name
    tier: appServicePlanSku.tier
    capacity: appServicePlanInstanceCount
  }
}

resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

如果不是,请复制示例或调整模板以与该示例一致。

将 Bicep 模板部署到 Azure

若要将此模板部署到 Azure,你需要从 Visual Studio Code 终端登录到 Azure 帐户。 请确保安装了 Azure CLI,并记得使用你用于激活沙盒的同一帐户登录。

  1. 在“终端”菜单中,选择“新终端”。 终端窗口通常在屏幕的下半部分打开。

  2. 如果终端窗口右侧显示的 shell 为“bash”,则将打开正确的 shell,你可以跳到下一部分。

    Visual Studio Code 终端窗口的屏幕截图,其中显示了 bash 选项。

  3. 如果出现“bash”以外的 shell,请选择 shell 下拉箭头,然后选择“Azure Cloud Shell (Bash)”

    Visual Studio Code 终端窗口的屏幕截图,其中显示了终端 shell 下拉列表并选中了“Git Bash (默认)”。

  4. 在终端 shell 列表中,选择“bash”。

    Visual Studio Code 终端窗口的屏幕截图,其中选中了 bash 终端。

  5. 在终端中,转到保存模板的目录。 例如,如果将模板保存到 templates 文件夹,则可以使用以下命令:

    cd templates
    

安装 Bicep

运行以下命令以确保具有最新版本的 Bicep:

az bicep install && az bicep upgrade

登录 Azure

  1. 在 Visual Studio Code 终端中,运行以下命令登录到 Azure:

    az login
    
  2. 在打开的浏览器中,登录到 Azure 帐户。

    Visual Studio Code 终端显示与此帐户关联的订阅列表。

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

    az account set --subscription "Concierge Subscription"
    

    注意

    如果最近使用了多个沙盒,终端可能会显示多个 Concierge 订阅实例。 在这种情况下,请使用下面的两个步骤来设置一个默认订阅。 如果前面的命令成功,且仅列出一个 Concierge 订阅,则跳过下面的两个步骤。

  4. 获取 Concierge 订阅 ID。

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. 使用订阅 ID 设置默认订阅。 将 {your subscription ID} 替换为最新的 Concierge 订阅 ID。

    az account set --subscription {your subscription ID}
    

设置默认资源组

当你使用 Azure CLI 时,可以设置默认资源组,并忽略本练习中其他 Azure CLI 命令的参数。 将默认值设置为在沙盒环境中为你创建的资源组。

az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"

使用 Azure CLI 将模板部署到 Azure

从 Visual Studio Code 的终端运行以下代码,以将 Bicep 模板部署到 Azure。 无需指定参数值,因为它们指定了默认值。 此过程可能需要一两分钟才能完成,然后你会看到部署成功。

az deployment group create --template-file main.bicep

你会在终端中看到 Running...

若要将此模板部署到 Azure,需要从 Visual Studio Code 终端登录到 Azure 帐户。 请确保已安装 Azure PowerShell,并且登录的帐户与激活了沙盒的帐户相同。

  1. 在“终端”菜单中,选择“新终端”。 终端窗口通常在屏幕的下半部分打开。

  2. 如果终端窗口右侧显示的 shell 为“powershell”或“pwsh”,则会打开正确的 shell,你可以跳到下一部分。

    Visual Studio Code 终端窗口的屏幕截图,其中在 shell 下拉列表中显示了 pwsh 选项。

  3. 如果出现“powershell”或“pwsh”以外的 shell,请选择 shell 下拉箭头,然后选择“PowerShell”

    Visual Studio Code 终端窗口的屏幕截图,其中显示了终端 shell 下拉列表并选中了 PowerShell。

  4. 在终端 shell 列表中,选择“powershell”或“pwsh”。

    Visual Studio Code 终端窗口的屏幕截图,其中选择了 PowerShell 终端。

  5. 在终端中,转到保存模板的目录。 例如,如果将模板保存到 templates 文件夹,则可以使用以下命令:

    Set-Location -Path templates
    

安装 Bicep CLI

若要从 Azure PowerShell 中使用 Bicep,请安装 Bicep CLI

使用 Azure PowerShell 登录到 Azure

  1. 在 Visual Studio Code 终端中,运行以下命令:

    Connect-AzAccount
    

    在打开的浏览器中,登录到 Azure 帐户。

  2. 登录到 Azure 后,终端会显示与此帐户关联的订阅列表。

    如果已激活沙盒,则会显示名为“Concierge 订阅”的订阅。 请在本练习的其余部分使用此订阅。

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

    $context = Get-AzSubscription -SubscriptionName 'Concierge Subscription'
    Set-AzContext $context
    

    注意

    如果最近使用了多个沙盒,终端可能会显示多个 Concierge 订阅实例。 在这种情况下,请使用下面的两个步骤来设置一个默认订阅。 如果前面的命令成功,且仅列出一个 Concierge 订阅,则跳过下面的两个步骤。

  4. 获取订阅 ID。 运行以下命令将列出你的订阅及其 ID。 查看 Concierge Subscription,然后复制第二列中的 ID。 它类似于 cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0

    Get-AzSubscription
    
  5. 将处于活动状态的订阅更改为“Concierge 订阅”。 请务必将 {Your subscription ID} 替换为复制的内容。

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    

设置默认资源组

你可以设置默认资源组,并忽略本练习中其他 Azure PowerShell 命令的参数。 将此默认值设置为在沙盒环境中为你创建的资源组。

Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>

使用 PowerShell 将模板部署到 Azure

在终端中使用以下 Azure PowerShell 命令将模板部署到 Azure。 无需指定参数值,因为它们指定了默认值。 此过程可能需要一两分钟才能完成,然后你会看到部署成功。

New-AzResourceGroupDeployment -TemplateFile main.bicep

验证部署

  1. 转到 Azure 门户并确保你位于沙盒订阅中:

    1. 选择页面右上角的头像。
    2. 选择“切换目录”。 在列表中,选择“Microsoft Learn 沙盒”目录。
  2. 在左侧面板上,选择“资源组”。

  3. 选择 沙盒资源组名称

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

    Azure 门户中的资源组概述界面屏幕截图,部署部分显示了一个成功的部署。

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

    Azure 门户中的部署界面屏幕截图,其中列出了一个部署且状态为“已成功”。

  6. 选择名为“main”的部署以查看部署了哪些资源,然后选择“部署详细信息”以将其展开。 在这种情况下,有一个应用服务计划和应用。

    Azure 门户中特定部署界面的屏幕截图,其中列出了应用服务计划和应用。

  7. 在左侧菜单中,选择“输入”。

    Azure 门户中特定部署界面的屏幕截图,其中突出显示了“输入”菜单项。

  8. 请注意,将列出参数及其值。

    Azure 门户中特定部署界面的屏幕截图,其中显示了参数值。

  9. 使页面在浏览器中处于打开状态。 稍后会再次检查部署。