Azure开发人员 CLI (azd) 模板是遵循azd约定的代码存储库。 它结合了项目配置、基础结构即代码和可选应用程序源,以便可以创建可重复Azure环境和部署。
模板可以支持不同的项目类型,包括:
- 包含一个或多个可部署服务的完整应用程序。
- 不包含应用程序代码的纯基础设施解决方案。
- 另一个开发人员可以初始化和扩展的可重用起点。
- 为使用
azd进行预配和部署而准备的现有项目。
本文介绍模板的结构以及命令如何使用 azd 其文件。
为何使用模板?
模板捕获在Azure上运行项目所需的决策。 根据项目,它可以定义:
- Azure资源及其配置。
- 可部署的应用程序服务和打包说明。
- 应用程序服务和Azure资源之间的连接。
- 特定于环境的参数和输出。
- 本地开发、持续集成和持续交付配置。
由于配置与项目一起存储,团队可以查看源代码管理中的更改,并创建一致的开发、测试和生产环境。
如何使用 azd 模板
模板中的文件支持工作流的不同阶段 azd :
-
azd init初始化项目并创建环境azd。 它还可以使用GitHub Copilot生成初始模板或复制现有模板。 -
azd provision评估基础结构定义并创建或更新Azure资源。 -
azd package根据azure.yaml准备可部署的应用服务。 -
azd deploy将每个服务与其Azure主机相关联,并部署应用程序包。 -
azd up以组合工作流的形式运行预配、打包和部署阶段。
在整个过程中,模板文件将保持常规源文件。 您可以将它们与项目的其余部分一起审查、编辑并进行版本控制。
探索 Azure 开发人员 CLI 模板结构
azd 模板是具有额外配置和基础结构资产的标准代码存储库。 大多数模板使用以下结构:
-
azure.yaml文件 - 定义项目并将可部署的源目录映射到Azure资源。 -
infrafolder - 包含用于创建 Azure 资源的 Bicep 或 Terraform 基础设施即代码文件。 -
src文件夹 - 通常包含可部署的应用程序源代码。 仅基础结构模板可以省略应用程序源,应用程序模板可以使用其他源目录名称。 -
.azurefolder - 包含由azd创建的本地环境和值。 此文件夹是本地项目状态,通常不会作为可重用模板的一部分共享。
例如,通用 azd 模板可能与以下文件夹结构匹配:
contoso-project/
├── azure.yaml # azd project and service configuration
├── infra/
│ ├── main.bicep # Infrastructure entry point
│ └── main.parameters.json # Maps azd values to Bicep parameters
├── src/ # Optional application source
│ ├── api/
│ └── web/
├── .github/workflows/ # Optional GitHub Actions pipelines
└── .azure/ # Local environment state; don't distribute
azd 模板还可以选择包含以下一个或多个文件夹:
-
.github文件夹 - 用于存放 GitHub Actions 的 CI/CD 工作流文件。 -
.azdo文件夹 - 如果决定将 Azure Pipelines 用于 CI/CD,请定义此文件夹中的工作流配置文件。 -
.devcontainerfolder - 定义项目的 开发容器 环境。
下图显示了主模板资产如何协同工作:
flowchart LR
AZ[azure.yaml] -->|Defines services| SRC[Application source]
AZ -->|Selects provider and path| INFRA[Infrastructure as code]
INFRA -->|Provisions| RES[Azure resources]
INFRA -->|Exports values| ENV[azd environment]
ENV -->|Configures| SRC
AZ -->|Maps services to| RES
必需和可选资产
确切的结构因项目而异,但大多数模板使用以下资产。
azure.yaml
该文件 azure.yaml 是主项目配置文件。 它定义项目名称,并可以定义可部署的服务、基础结构提供程序、挂钩、工作流和其他 azd 行为。
对于应用程序服务, azure.yaml 通常标识:
- 应用程序源的路径。
- 编程语言或打包策略。
- 承载应用程序的Azure服务。
- 构建、部署、容器或 Kubernetes 设置。
仅包含基础设施的模板可以省略应用服务。 有关完整的配置模型,请参阅 azure.yaml 架构。
以下示例定义两个应用程序服务。 服务名称、源路径、语言和托管目标会告知 azd 要打包的内容以及部署位置:
name: store
services:
api:
project: ./src/api
language: js
host: containerapp
web:
project: ./src/web
language: js
host: staticwebapp
基础结构即代码
大多数模板都包含一个 infra 目录,其中包含 Bicep 或 Terraform 文件。 这些文件定义项目所需的Azure资源、角色分配、网络、应用程序设置和部署输出。
对于默认的 Bicep 提供程序,azd 通常使用 infra/main.bicep 作为部署入口点,并使用 infra/main.parameters.json 将 azd 环境值映射到 Bicep 参数。 Terraform 模板通常使用 infra/main.tf 和相关 Terraform 文件。
例如,Bicep参数文件可以将选定的azd值传递到基础结构部署中:
{
"parameters": {
"environmentName": { "value": "${AZURE_ENV_NAME}" },
"location": { "value": "${AZURE_LOCATION}" }
}
}
Bicep预配完成后,azd将入口点的输出存储为环境值。 应用程序服务和挂钩可以将这些值用于资源终结点、名称和其他运行时配置。
output API_ENDPOINT string = api.outputs.uri
应用程序源
应用程序源是可选的。 当模板包含可部署的服务时,每个服务定义都 azure.yaml 指向其源目录。 模板可以在 src 下组织服务,使用仓库中其他位置的目录,或将服务指向仓库根目录。
文件夹名称本身并不重要。
azure.yaml 中的 project 值决定了 azd 在何处找到每项服务。
环境配置
该 .azure 目录包含本地环境状态和由该目录 azd创建的值。 它可以包含多个环境的订阅、位置、资源名称、终结点和部署输出值。
将此目录视为本地状态,而不是可重用的模板资产。 不要提交包含机密或特定于环境的值的环境文件。
配套资源
模板还可以包含:
- GitHub Actions 或 Azure Pipelines 的定义。
- Dockerfiles 和容器配置。
- 开发容器配置。
- 命令和服务钩子。
- 测试、脚本和项目文档。
这些资产是可选的,仅当它们支持预期的模板体验时,才应包含这些资产。
服务与资源的关联
若要部署应用程序服务,azd必须将其定义azure.yaml与预配Azure资源相关联。 默认情况下, azd 查找其 azd-service-name 标记与服务名称匹配的资源。
例如,名为 api 的服务映射到使用 azd-service-name: api标记的资源。 可以改用 resourceName 服务属性显式标识部署目标。
以下 Bicep 表达式将 discovery 标记添加到资源的现有标签中:
tags: union(tags, {
'azd-service-name': 'api'
})
编辑模板时,保持服务名称、资源发现设置、基础结构输出和应用程序环境变量保持一致。
生成或调整模板
建议的创作方式是运行 azd init 并选择 使用 GitHub Copilot 设置(预览版)。 专用Copilot 智能体会话可以分析现有文件、帮助规划新项目、生成模板资产以及验证结果。 有关此工作流和其他创作方法,请参阅 “从新模板开始”。
生成的文件不绑定到Copilot。 可以在初始化后直接 浏览和编辑模板文件 。 还可以手动或使用另一个 AI 编码代理创建相同的文件。
如果来自Microsoft的模板、你的组织或开发人员社区已经提供了一个有用的体系结构,请从现有模板开始,并适应你的项目。 浏览 模板库中的可用模板。
模板使用指南
根据模板随附的协议,每个模板均由其所有者许可。 确定在使用或分发模板之前适用的许可证。
Microsoft不负责非Microsoft模板,并且不筛选它们以处理安全、隐私、兼容性或性能问题。 Microsoft支持计划或服务不支持模板(包括Microsoft提供的模板),并且按原样提供,不提供保修。
预配之前,请查看所有模板文件。 具体而言,评估角色分配、网络公开、身份验证方法、服务层级、资源位置和预期成本。