创建基础结构即代码

已完成

Azure Developer CLI (azd) 能在 Azure 中使用以 Bicep 或 Terraform 编写的基础结构即代码 (IaC) 文件预配资源。 基础结构即代码支持在声明性定义文件中定义基础结构资源和配置,这些资源和配置在每次部署时都可靠地生成相同的环境。 azd 执行这些文件,以创建托管应用所需的 Azure 资源。 可以在什么是基础结构即代码?文档中详细了解基础结构即代码。

在本单元中,你将向模板添加 Bicep 代码,以便为应用预配必要的资源。 完成本模块不需要事先了解 Bicep。 但若打算广泛使用 azd 模板,最好至少熟悉 Bicep 或 Terraform 的基础知识。 请参阅 Bicep 基础知识培训路径,详细了解有关 Bicep 的信息。

模板的 Bicep 或 Terraform 文件位于 infra 文件夹中。 所选的 Bicep 初学者模板在一开始会生成三个文件:

  • main.bicep- 充当 Bicep 执行的主入口点,用于定义将在 Azure 中预配的资源。 main.bicep 文件还可以引用其他 Bicep 模块(文件),让你能将资源定义提取到更精细、可重用的文件中。
  • abbreviations.json - 该文件为 JSON 文件,提供的是很多有帮助的命名缩写。 此文件在执行期间加载到 main.bicep 文件中,并为不同的 Azure 资源提供一组一致且符合逻辑的命名前缀。
  • main.parameters.json - 该文件为 JSON 文件,用于定义重要模板参数的默认值,例如默认的 Azure 位置或环境名称。

通过更新 main.bicep 文件并创建更多 Bicep 文件,可以为应用定义和预配所需的 Azure 资源。 Main.bicep 通常通过在其他模块之间传递参数来协调它们的执行。 在此示例中,你将创建一个额外的 Bicep 模块来定义将托管应用程序的Azure 应用服务。

  1. 在模板的 infra 文件夹中创建名为 app.bicep 的新文件。

  2. 打开 app.bicep 文件并在其中粘贴以下代码片段。 代码注释描述的是每部分代码的用途。

    // Define parameters that can be passed into the module
    // Parameters allow a module to be reusable
    @description('The location of where to deploy resources')
    param location string
    
    @description('The name of the App Service Plan')
    param appServicePlanName string
    
    @description('The name of the App Service')
    param appServiceName string
    
    // Define the App Service Plan to manage compute resources
    resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      properties: {
        reserved: true
      }
      sku: {
        name: 'F1'
      }
      kind: 'linux'
    }
    
    // Define the App Service to host the application
    resource appService 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          linuxFxVersion: 'DOTNETCORE|6.0'
        }
      }
        // Tag used to reference the service in the Azure.yaml file
        tags: { 'azd-service-name': 'web' }
    }
    

    此代码片段可完成以下任务:

    • 定义一组可传递到模块中的参数,使其可重用且可配置。 可以选择将资源定义中的更多值参数化,从而提高模块的灵活度。
    • 定义用于管理应用服务实例的计算资源的应用服务计划。
    • 定义用于托管已部署应用程序的应用服务。

    注意

    应用服务 Bicep 定义中包含一个 azd-service-name 标记,Azure.yaml 配置文件稍后会使用该标记将应用源代码的文件夹与应用服务相关联。

  3. 新的 Bicep 模块将为模板创建应用服务,但你仍需要更新 main.bicep 才能使用它。 在编辑器中找到 infra 文件夹并打开 main.bicep 文件。

    初学者模板生成的 main.bicep 文件包含有用的设置配置。 例如,该文件定义像 environmentNamelocation 这样的基本参数。 默认情况下,如果 main.parameters.json 文件中包含这些参数,系统将通过该文件填充这些参数,而你还是可以覆盖它们。 abbreviations.json 文件中还会加载起始代码,所以你可以使用它,为服务命名创建一些有用的标记和令牌,并包含有用的注释,注释中有能帮助你入门的提示。

  4. main.bicep 文件底部找到类似于以下内容的注释:

    // Add resources to be provisioned below.
    // A full example that leverages azd bicep modules can be seen in the todo-python-mongo template:
    // https://github.com/Azure-Samples/todo-python-mongo/tree/main/infra
    

    此占位符注释突出显示应该在什么位置包括要预配的其他资源。 我们希望包含为应用服务创建的 Bicep 模块,因此请将以下代码片段直接粘贴到注释后面:

    module web 'app.bicep' = {
      name: '${deployment().name}-app'
      scope: rg
      params: {
        location: location
        appServiceName: '${abbrs.webSitesAppService}${resourceToken}'
        appServicePlanName: '${abbrs.webServerFarms}${resourceToken}'
      }
    }
    

    此代码片段可完成以下任务:

    • 定义指向在上一步中创建的文件的 Bicep 模块。
    • 为 Azure 部署集分配一个名称,并将其范围限定为在 main.bicep 中创建的资源组。
    • 使用 abbreviations.json 值将参数传递到模块中,以帮助进行命名。

应用源代码的基础结构文件现在是模板的一部分。 在下一单元中,你将添加配置,配置描述 azd 部署过程中这些部分之间的关系。