Azure Developer CLI: 基于分层基础设施实现Azure容器应用的开发到生产部署
本指南将演示如何利用Azure Developer CLI v1.20.0中的新功能,即分层基础设施配置与azd publish和azd deploy --from-package命令的组合,在Azure容器应用中实现“一次构建,随处部署”的模式。你将学习如何部署同一个容器化应用到多个环境(如开发和生产),同时保持职责分离。
这是Azure Developer CLI系列文章的第三篇,建立在我们之前对Azure应用服务与GitHub Actions、Azure DevOps流水线的探索基础之上。
目标与挑战
如果你在生产环境中使用过容器,可能遇到过以下由azd deploy一站式打包(构建容器、推送到注册表、部署)带来的问题:
- 你希望在所有环境中使用同一个Azure容器注册表。
- 你需要在无需重新构建容器的情况下“一次构建,随处部署”。
- 你希望对哪些特定的容器版本可以部署到生产环境进行安全控制。
- 你需要灵活性,以便为每个环境部署具有不同配置的相同容器。
解决方案:分层基础设施与分离的容器操作
Azure Developer CLI v1.20.0引入了两项关键能力来解决这些挑战:
- 分离的容器操作:
azd publish:构建容器并将其推送到你的注册表。azd deploy --from-package:将特定的容器版本部署到环境(无需重新构建)。
- 分层基础设施:
- 按顺序分层部署基础设施,并管理好依赖关系。
- 在环境之间共享资源(如ACR),同时将环境特定的资源分开。
- 早期层的输出会自动成为后续层的输入。
示例应用与架构
示例应用是一个基于Flask的简单文件管理器,它演示了以下核心概念:
- 功能:上传文件、列出文件和查看文件(后端使用Azure Blob存储)。
- 安全方法:使用Azure托管标识,无需存储任何连接字符串。
基础设施采用分层方法进行组织,将共享资源与环境特定资源分离:
|
|
各层的作用如下:
- 基础层:根据
AZURE_ENV_TYPE设置核心资源,包括容器应用环境和托管标识。 - 共享ACR层:创建集中式的容器注册表(除非已存在)。
- ACR角色分配层:为托管标识授予适当的权限(开发环境获取推送+拉取权限,生产环境仅获取拉取权限)。
- 容器应用层:最终部署你的应用程序,此时它已具备适当的ACR访问权限。
实践步骤
先决条件
- Azure Developer CLI v1.20.0 或更高版本
- Docker(用于本地容器测试)
1. 克隆示例仓库
|
|
2. 设置开发环境
|
|
3. 准备生产环境基础设施
|
|
重要提示:对于生产环境,应通过CI/CD流水线进行部署,本地azd provision仅用于前期设置。生产环境的基础设施变更应经过严格的审批流程。
4. 设置CI/CD流水线
在代码仓库中配置GitHub Actions流水线:
|
|
GitHub Actions工作流详解
该工作流遵循清晰的三阶段模式:构建 → 部署到开发环境 → 部署到生产环境。其核心在于“一次构建,多次部署”。
构建阶段:
- 启用Alpha功能。
- 设置环境名称。
- 使用联合凭证登录Azure。
- 预配开发环境基础设施。
- 构建容器并将其发布到ACR(使用
azd publish)。 - 获取生成的镜像名称。
开发环境部署阶段:
- 启用Alpha功能。
- 登录Azure。
- 使用
azd deploy app --from-package <容器镜像>部署到开发环境。 - 运行验证测试(如冒烟测试)。
生产环境部署阶段:
- 启用Alpha功能。
- 登录Azure。
- 使用同一个容器镜像(通过工作流输出传递)部署到生产环境(使用
azd deploy app --from-package <同一个容器镜像>)。
总结
本文介绍了如何利用Azure Developer CLI v1.20.0的新功能,在Azure容器应用中实现“一次构建,随处部署”的模式。通过结合分层基础设施和分离的容器操作,你可以在享受azd up便捷性的同时,为生产环境添加所需的控制和安全性。
涵盖的关键内容包括:
- 容器应用集成:
azd如何与Azure容器应用开箱即用地协作。 - 分层基础设施:具有适当依赖关系管理的顺序部署。
- 环境分离:在保持开发便利性的同时,添加生产就绪的控制措施。
具体的实现细节会根据团队的实际需求(如高级网络、复杂的合规性要求、不同的部署策略等)而有所不同。我们希望本文能为你提供一个起点和可供参考的范例。