定义资源

已完成

Bicep 模板是你创作的文件,用于定义要部署的 Azure 资源。

你所在的玩具公司需要你为产品发布创建一个可重用的 Bicep 模板。 该模板需要部署 Azure 存储帐户和 Azure 应用服务资源,这些资源将用于新产品发布过程中每个产品的市场营销。

在本单元中,你将了解如何在 Bicep 模板中定义资源、资源名称的作用,以及如何创建彼此关联的资源。

注意

本单元中显示的命令用于说明概念。 请暂时不要运行这些命令。 稍后你将练习在此处学到的知识。

定义资源

在 Bicep 模板中的主要操作是定义 Azure 资源。 下面的示例是 Bicep 中的一个典型资源定义。 此示例创建一个名为 toylaunchstorage 的存储帐户。

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'toylaunchstorage'
  location: 'westus3'
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

我们来仔细看看此资源定义中的一些关键部分:

  • 开头处的 resource 关键字告诉 Bicep 你要定义资源。

  • 接下来,你为资源提供一个符号名称。 在本例中,资源的符号名称是 storageAccount。 符号名称在 Bicep 中用于指示资源,但不会显示在 Azure 中。

  • Microsoft.Storage/storageAccounts@2022-09-01 是资源的资源类型和 API 版本。 Microsoft.Storage/storageAccounts 告诉 Bicep 你正在声明一个 Azure 存储帐户。 日期 2022-09-01 是 Azure 存储 API 的版本,Bicep 在创建资源时会用到它。

    提示

    适用于 Visual Studio Code 的 Bicep 扩展可帮助你查找你所创建资源的资源类型和 API 版本。 如果你熟悉 ARM 模板,请注意,API 版本也与你在其中使用的版本一致。

  • 必须声明资源名称,这是将在 Azure 中向存储帐户分配的名称。 将使用 name 关键字设置资源名称。

    重要

    符号名称只能在 Bicep 模板中使用,并且不会显示在 Azure 中。 资源名称会在 Azure 中显示。

  • 然后,设置资源的其他详细信息,例如它的位置、SKU(定价层)和种类。 还可以定义一些属性,每种资源类型都有不同的属性。 不同的 API 版本也可能会引入不同的属性。 在本例中,我们将存储帐户的访问层设置为 Hot

提示

资源名称通常包含必须遵循的规则,如最大长度、允许的字符以及在所有 Azure 中的唯一性。 每个 Azure 资源类型的资源名称要求不同。 在将其添加到模板之前,请务必了解命名限制和要求。

当资源依赖于其他资源时会发生什么情况?

Bicep 模板通常包含若干个资源。 通常,你需要一个资源依赖于另一个资源。 可能需要从一个资源提取一些信息才能定义另一个资源。 或者,如果你要部署 Web 应用程序,则必须先创建服务器基础结构,然后才能向其添加应用程序。 这些关系称为“依赖关系”。

你需要为模板部署一个应用服务应用,以帮助发布玩具产品,但若要创建应用服务应用,首先需要创建一个应用服务计划。 应用服务计划表示服务器托管资源,其声明如下:

resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = {
  name: 'toy-product-launch-plan'
  location: 'westus3'
  sku: {
    name: 'F1'
  }
}

此资源定义正在通知 Bicep 你要部署一项应用服务计划(资源类型为 Microsoft.Web/serverFarms)。 该计划资源名为 toy-product-launch-plan,将在美国西部 3 区域部署。 它使用 F1 定价 SKU,这是应用服务的免费层。

现在,你已声明应用服务计划,下一步是声明应用:

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

此模板指示 Azure 在你创建的计划中托管应用。 请注意,计划的定义包括以下行上应用服务计划的符号名称:serverFarmId: appServicePlan.id。 此行表示 Bicep 将使用 id 属性获取应用服务计划的资源 ID。 它实际上表示:“此应用的服务器场 ID 是前面定义的应用服务计划的 ID”。

提示

在 Azure 中,资源 ID 是每个资源的唯一标识符。 资源 ID 包括 Azure 订阅 ID、资源组名称和资源名称,以及一些其他信息。

通过使用引用计划符号名称的属性声明应用资源,Azure 可了解应用服务应用与计划之间的隐式依赖关系。 当 Azure 部署资源时,将确保它在开始部署应用之前完全部署计划。