练习 - 使用 Bicep 创建和部署部署堆栈
你正处于新存款应用程序开发的第一个冲刺阶段。 你想要测试在开发订阅中使用受管理资源创建部署堆栈的过程。 在本练习中,你将创建一个部署堆栈,该堆栈被限制在一个引用 Bicep 文件的资源组内。 该文件定义了 Azure 应用服务计划和 Azure 应用服务。
在此过程中,你将:
- 创建定义初始体系结构的 Bicep 文件
 - 使用 Bicep 文件创建限定为资源组的部署堆栈。
 - 查看部署堆栈和受管理资源的配置
 
本练习使用适用于 Visual Studio Code 的 Bicep 扩展。 请务必在 Visual Studio Code 中安装此扩展。
创建 Bicep 文件
第一步是创建一个 Bicep 文件,该文件定义了要用于部署堆栈的资源。
打开 Visual Studio Code。
新建一个名为 main.bicep 的文件。
保存空文件,以便 Visual Studio Code 加载 Bicep 工具。
你可以选择“文件”“另存为”,也可以在 Windows 中选择>(在 macOS 上选择 ⌘+S)。 请务必记住文件的保存位置。 例如,你需要创建一个“模板”文件夹来存储文件。
将以下 Bicep 代码添加到文件中。 你很快就会部署模板。 最好是你自行键入此代码,而不是复制和粘贴,这样就可以了解工具如何帮助你编写 Bicep 文件。
// Parameters @description('The location for all resources.') param location string = 'eastus' @description('The name of the web application.') param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}' // Variables @description('The name of the app service plan.') var appServicePlanName = 'plan-deposits' // Resource - App Service Plan resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: { name: 'F1' capacity: 1 } } // Resource - Web App resource webApplication 'Microsoft.Web/sites@2023-12-01' = { name: webApplicationName location: location properties: { serverFarmId: appServicePlan.id } }请注意,你使用的是包含字符串内插和
uniqueString()函数的表达式来定义默认参数值。 部署此模板的用户可以通过在部署时指定值来覆盖默认参数值,但不能覆盖变量值。另请注意,你使用变量作为 Azure 应用服务计划名称,而使用参数来表示其他名称。 存储帐户和应用服务应用需要全局唯一的名称,但应用服务计划名称仅需在其资源组中唯一。 这种差异意味着,只要部署都进入不同的资源组,那么在不同部署中使用相同的应用服务计划名称就不是问题。
保存对文件所做的更改。
创建部署堆栈并将资源部署到 Azure
若要将此模板部署到 Azure,你需要从 Visual Studio Code 终端登录到 Azure 帐户。 请确保已安装 Azure CLI 工具。
在“终端”菜单中,选择“新终端”。 终端窗口通常在屏幕的下半部分打开。
如果终端窗口在右侧显示 bash,则表示已打开正确的 shell。 或者,如果你在右侧看到 bash shell 图标,则可以选择它来启动 shell。
如果出现“bash”以外的 shell,请选择 shell 下拉箭头,然后选择“Git Bash”。
在终端中,转到保存模板的目录。 例如,如果将模板保存到 templates 文件夹,则可以使用以下命令:
cd templates
安装 Bicep
运行以下命令以确保具有最新版本的 Bicep:
az bicep install && az bicep upgrade
使用 Azure CLI 登录到 Azure
在 Visual Studio Code 终端中,运行以下命令登录到 Azure:
az login在打开的浏览器中,登录到 Azure 帐户。
Visual Studio Code 终端显示与此帐户关联的订阅列表。
在列表中,找到要用于本次练习的订阅。
如果你在登录时错过了列表,则可以使用以下代码片段再次列出订阅。
az account list --output table为在此会话中运行的所有 Azure CLI 命令设置默认订阅。
az account set --subscription "Your Subscription Name or ID"
创建资源组
我们需要为部署堆栈和受管理资源创建资源组。 若要创建资源组,请从 Visual Studio Code 中的终端运行以下命令。
az group create \
    --name rg-depositsApplication \
    --location eastus
若要将此模板部署到 Azure,需要从 Visual Studio Code 终端登录到 Azure 帐户。 确保已安装 Azure PowerShell。
在“终端”菜单中,选择“新终端”。 终端窗口通常在屏幕的下半部分打开。
如果终端窗口在右侧显示 pwsh 或 powershell,则表示已打开正确的 shell。 或者,如果你在右侧看到 PowerShell shell 图标,则可以选择它来启动 shell。
如果出现“pwsh”或“powershell”以外的 shell,请选择 shell 下拉箭头,然后选择“PowerShell”。
在终端中,转到保存模板的目录。 例如,如果将模板保存到 templates 文件夹,则可以使用以下命令:
Set-Location -Path templates
安装 Bicep CLI
若要从 Azure PowerShell 中使用 Bicep,请安装 Bicep CLI。
使用 Azure PowerShell 登录到 Azure
在 Visual Studio Code 终端中,运行以下命令登录到 Azure:
Connect-AzAccount在打开的浏览器中,登录到 Azure 帐户。
通过运行以下命令获取要用于此练习的订阅的 ID:
Get-AzSubscription订阅 ID 位于第二列。 复制第二列。 它类似于 aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e。
为在此会话中运行的所有 Azure PowerShell 命令设置默认订阅。
Set-AzContext -SubscriptionId {Your subscription ID}
创建资源组
我们需要为部署堆栈和受管理资源创建资源组。 若要创建资源组,请从 Visual Studio Code 中的终端运行以下命令。
New-AzResourceGroup `
    -Name rg-depositsApplication `
    -Location eastus
创建部署堆栈
接下来,我们需要创建范围限定为最近创建的资源组的部署堆栈。 若要创建部署堆栈,请从 Visual Studio Code 中的终端运行以下命令。
az stack group create \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep \
    --action-on-unmanage detachAll \
    --deny-settings-mode none
New-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep `
    -ActionOnUnmanage DetachAll `
    -DenySettingsMode None
验证部署堆栈和受管理资源的创建
创建部署堆栈及其受管理资源时,可以使用命令行或 Azure 门户查看其配置。 在本练习中,我们使用 Azure CLI。 若要查看部署堆栈的配置,请从 Visual Studio Code 中的终端运行以下命令。
az stack group show \
    --resource-group rg-depositsApplication \
    --name stack-deposits
结果包括部署堆栈的属性和受管理资源的状态。 json 输出应类似于下图所示:
{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "bypassStackOutOfSyncError": null,
  "correlationId": ".",
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/././rg-depositsApplication/./Microsoft.Resources/deployments/stack-deposits",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT2M53.2734284S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/././rg-depositsApplication/./Microsoft.Resources/deploymentStacks/stack-deposits",
  "location": null,
  "name": "stack-deposits",
  "outputs": null,
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "rg-depositsApplication",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/././rg-depositsApplication/././serverfarms/plan-deposits",
      "resourceGroup": "rg-depositsApplication",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-eque2jlrboltq",
      "resourceGroup": "rg-depositsApplication",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2024-01-01T00:00:01.000000+00:00",
    "createdBy": "depositsapplication@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2024-01-01T00:00:01.000000+00:00",
    "lastModifiedBy": "depositsapplication@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": {},
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}
请注意输出中资源部分。 对于每个资源,它将显示它的状态为“受管理”、它的资源组、它的资源 ID 和它的拒绝设置。
创建部署堆栈及其受管理资源时,可以使用命令行或 Azure 门户查看其配置。 在本练习中,我们使用 Azure PowerShell。 若要查看部署堆栈的配置,请从 Visual Studio Code 中的终端运行以下命令。
Get-AzResourceGroupDeploymentStack `
    -ResourceGroupName rg-depositsApplication `
    -Name stack-deposits
结果包括部署堆栈的属性和受管理资源的状态。 PowerShell 输出应会类似于下图所示:
Id                            : /subscriptions/././rg-depositsApplication/././deploymentStacks/stack-deposits
Name                          : stack-deposits
ProvisioningState             : succeeded
resourcesCleanupAction        : detach
resourceGroupsCleanupAction   : detach
managementGroupsCleanupAction : detach
CorrelationId                 : .
DenySettingsMode              : none
CreationTime(UTC)             : 1/01/2024 0:00:01 AM
DeploymentId                  : /subscriptions/././rg-depositsApplication/././deployments/stack-deposits
Resources                     : /subscriptions/././rg-depositsApplication/././serverfarms/plan-deposits
                                /subscriptions/././rg-depositsApplication/././sites/webapp-eque2jlrboltq
请注意输出中资源部分。 它定义由部署堆栈管理的资源。 可以看到每个资源的完整资源 ID。