探索
借助 Azure 开发人员 CLI(azd
),只需使用 azd up
单个命令即可在 Azure 上预配和部署应用程序资源。 本指南详细分析了 azd up
,并说明此工作流命令的各个阶段如何与 azd
模板的结构相关联。
按照模板进行操作
前面的部分使用模板中的 hello-azd
示例来演示各种 azd
概念和模式。 您可以在本地计算机上初始化模板以跟随进度:
azd init -t hello-azd
有关入门 azd
和 hello-azd
模板的详细信息,请访问 快速入门:部署 Azure 开发人员 CLI 模板 文章。
基本概念
使用 azd
模板时,可以使用命令在 Azure azd up
上预配和部署应用资源。 从打开模板文件夹的终端窗口中运行命令:
azd up
azd up
经过设计,可以在开发应用时重复运行命令,并增量部署新的更改。 该命令启动一个功能强大的工作流,该工作流实质上包装了三个特定阶段:
- 打包:准备用于部署的应用程序代码和依赖项。
- 预配:使用基础结构即代码文件创建和配置应用所需的必要 Azure 资源。
- 部署:将打包的应用程序部署到预配的 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
:
在上图中,azure.yaml
文件:
- 将目录中的代码
src
定义为 C# 应用。 - 指定用于生成应用的容器映像的 Dockerfile 的位置。
运行 azd up
(或 azd package
)时,Azure 开发人员 CLI 使用此配置组合在目录中生成和打包应用代码 src
作为 .NET 容器映像。 如果未配置 Dockerfile, azd
还可以使用标准 .NET 发布过程打包 .NET 应用。
预配阶段
预配阶段为应用创建和配置所需的 Azure 资源。 例如,应用可能需要 Azure 应用服务实例来托管应用本身,以及用于保存上传文件的 Azure 存储帐户。 预配阶段使用模板中包含的基础结构即代码 (IaC) 文件来定义资源。
要了解预配阶段的一些要点包括:
-
azd
支持使用 Bicep 和 Terraform 完成基础结构即代码任务。 - 默认情况下,基础结构即代码文件存储在
infra
文件夹中,但可以自定义此位置。 -
azd
搜索main.bicep
或main.tf
文件以充当 IaC 流程的主业务流程文件。
可以在不使用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
命令都简化了从代码到云的过程。