探索azd up工作流

借助 Azure 开发人员 CLI(azd),只需使用 azd up单个命令即可在 Azure 上预配和部署应用程序资源。 本指南详细分析了 azd up ,并说明此工作流命令的各个阶段如何与 azd 模板的结构相关联。

按照模板进行操作

前面的部分使用模板中的 hello-azd 示例来演示各种 azd 概念和模式。 您可以在本地计算机上初始化模板以跟随进度:

azd init -t hello-azd

有关入门 azdhello-azd 模板的详细信息,请访问 快速入门:部署 Azure 开发人员 CLI 模板 文章。

基本概念

使用 azd 模板时,可以使用命令在 Azure azd up 上预配和部署应用资源。 从打开模板文件夹的终端窗口中运行命令:

azd up

azd up 经过设计,可以在开发应用时重复运行命令,并增量部署新的更改。 该命令启动一个功能强大的工作流,该工作流实质上包装了三个特定阶段:

  1. 打包:准备用于部署的应用程序代码和依赖项。
  2. 预配:使用基础结构即代码文件创建和配置应用所需的必要 Azure 资源。
  3. 部署:将打包的应用程序部署到预配的 Azure 资源。

还可以使用各自的命令单独运行每个阶段,但 azd up 提供了简化整个流程的便利包装器。 每个阶段在确保顺利和自动化的部署过程方面都起着关键作用。 可以使用模板azd up文件中的配置影响azure.yaml工作流阶段。 以下部分更详细地探讨每个阶段。

打包阶段

打包阶段是工作流中的 azd up 第一步。 在此阶段:

  • 应用代码已准备好进行部署。 根据模板应用生成的编程语言,打包可以涉及生成或编译应用、捆绑依赖项或创建部署项目(如 Docker 映像)。
  • 模板 azd 结构通常包括应用程序 src 代码所在的文件夹。 生成脚本或配置文件(如 Dockerfile)可能会影响应用程序的打包方式。
  • 该文件 azure.yaml 包含配置映射,用于指示 azd 应用代码的生存位置及其使用的语言,以便 azd 可以适当打包它。
  • 此阶段可确保应用程序处于可部署状态,然后再转到下一步。

可以在azd up以外使用azd package命令独立运行打包过程:

azd package

打包配置示例

azd 可以采用不同方式打包使用不同语言生成的应用。 例如,如果您的应用使用容器化方法,则azd模板可能会在应用Dockerfile目录中包含src。 打包阶段基于此文件为应用生成 Docker 映像。 这些配置通过 azure.yaml 文件进行管理。

例如,请考虑初学者模板的以下项目结构和配置 hello-azd

显示 azd up 打包阶段的屏幕截图。

在上图中,azure.yaml 文件:

  • 将目录中的代码 src 定义为 C# 应用。
  • 指定用于生成应用的容器映像的 Dockerfile 的位置。

运行 azd up (或 azd package)时,Azure 开发人员 CLI 使用此配置组合在目录中生成和打包应用代码 src 作为 .NET 容器映像。 如果未配置 Dockerfile, azd 还可以使用标准 .NET 发布过程打包 .NET 应用。

预配阶段

预配阶段为应用创建和配置所需的 Azure 资源。 例如,应用可能需要 Azure 应用服务实例来托管应用本身,以及用于保存上传文件的 Azure 存储帐户。 预配阶段使用模板中包含的基础结构即代码 (IaC) 文件来定义资源。

要了解预配阶段的一些要点包括:

  1. azd 支持使用 Bicep 和 Terraform 完成基础结构即代码任务。
  2. 默认情况下,基础结构即代码文件存储在 infra 文件夹中,但可以自定义此位置。
  3. azd 搜索 main.bicepmain.tf 文件以充当 IaC 流程的主业务流程文件。

显示 azd up 预配阶段的屏幕截图。

可以在不使用azd up的情况下,通过azd provision命令单独运行配置过程:

azd provision

预配配置示例

infra 文件夹内,main.bicep 文件通常定义应该由 azd 为应用创建的 Azure 资源。 在 main.bicep 初学者模板的 hello-azd 中,请考虑以下代码片段:

// ...omitted code for other resource configurations

// Create an Azure Cosmos DB account
module cosmos 'app/cosmos.bicep' = {
  name: 'cosmos'
  scope: rg
  params: {
    userPrincipalId: principalId
    managedIdentityId: identity.outputs.principalId
  }
}

// Create a storage account
module storage './core/storage/storage-account.bicep' = {
  name: 'storage'
  scope: rg
  params: {
    name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}'
    ___location: ___location
    tags: tags
    containers: [
      { name: 'attachments' }
    ]
  }
}

// Container apps environment and registry
module containerAppsEnv './core/host/container-apps.bicep' = {
  name: 'container-apps'
  scope: rg
  params: {
    name: 'app'
    containerAppsEnvironmentName: !empty(containerAppsEnvName) ? containerAppsEnvName : '${abbrs.appManagedEnvironments}${resourceToken}'
    containerRegistryName: !empty(containerRegistryName) ? containerRegistryName : '${abbrs.containerRegistryRegistries}${resourceToken}'
    ___location: ___location
  }
}

// ...omitted code for other resource configurations

使用前面的 Bicep 代码,azd 将创建以下资源:

  • 用于存储通过应用提交的数据的 Azure Cosmos DB 实例
  • 用于存储上传映像的 Azure 存储帐户
  • 用于托管应用的 Azure 容器应用

部署阶段

部署阶段是工作流中的 azd up 最后一步。 在此阶段:

  • 在打包阶段创建的应用项目将部署到预配的 Azure 资源。
  • azd 使用模板中的配置文件,例如 azure.yaml,确定如何部署应用。
  • 环境变量和连接字符串已配置为确保应用可以与预配的资源交互。

您还可以在azd up之外使用azd deploy命令单独运行部署过程。

azd deploy

部署配置示例

azure.yaml 文件中,可以指定项目中应将哪个服务部署到哪个 Azure 资源。 例如,请考虑入门模板 hello-azd 的以下的配置:

metadata:
  template: hello-azd-dotnet
name: azd-starter
services:
  aca:
    project: ./src # The ___location of the service source code
    language: csharp
    host: containerapp # The provisioned resource to deploy the service to
    docker:
      path: ./Dockerfile

前面的代码指示 azd 将代码打包成的工件从 src 文件夹部署到在预配阶段创建的 containerapp。 还可以定义多个服务,并将每个服务映射到不同的主机。

结论

工作流 azd up 通过自动化打包、预配和部署阶段,简化了将应用程序部署到 Azure 的过程。 开发人员可以通过遵守 azd 模板结构来确保一致的高效部署过程。 无论是部署简单的 Web 应用还是复杂的微服务体系结构,该 azd up 命令都简化了从代码到云的过程。