Azure容器应用分层架构开发到生产部署指南

本文详细介绍如何使用Azure Developer CLI v1.20.0的新功能实现"一次构建,随处部署"模式。通过分层基础设施和分离的容器操作,实现跨多个环境的容器化应用部署,确保开发便利性和生产环境安全控制的平衡。

Azure Developer CLI:使用分层基础设施实现Azure容器应用开发到生产部署

本文介绍如何使用Azure Developer CLI v1.20.0中的新功能azd publish和分层基础设施特性,在Azure容器应用中实现"一次构建,随处部署"模式。您将学习如何跨多个环境部署相同的容器化应用,并实现适当的关注点分离。

我们解决的挑战

如果您在生产环境中使用过容器,可能遇到过这个问题:azd deploy将所有操作捆绑在一起——构建容器、推送到注册表、部署——一次性完成。虽然这对开发非常方便,但在生产场景中会带来一些困扰:

  • 您希望在所有环境中使用单个Azure容器注册表(ACR)
  • 需要一次构建,随处部署,无需重新构建容器
  • 需要对部署到生产环境的特定容器版本进行安全控制
  • 需要灵活性,以便在不同环境中使用不同配置部署相同容器

分层基础设施配置

azure.yaml文件中定义的分层部署策略:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Azure容器应用演示:使用共享ACR实现"一次构建,随处部署"
name: dev-prod

# 分层基础设施部署策略
infra:
  layers:
    # 第1层:基础 - 每个环境的核心基础设施
    - name: foundation
      path: infra/foundation

    # 第2层:共享ACR - 所有环境的单一注册表
    - name: shared-acr
      path: infra/shared-acr

    # 第3层:ACR角色分配 - 安全配置
    - name: acr-role
      path: infra/acr-role

    # 第4层:容器应用 - 应用部署
    - name: container-app
      path: infra/container-app

基础设施组织方式

采用分层方法,将共享资源与环境特定资源分开:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
┌─────────────────────────────────────────────────────────────────┐
│                     共享资源                                    │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │ 资源组: rg-acr-shared                                      ││
│  │ ┌─────────────────────────────────────────────────────────┐ ││
│  │ │ Azure容器注册表 (基础SKU)                               │ ││
│  │ │ - 存储所有环境的容器镜像                                 │ ││
│  │ │ - 应用容器的单一事实来源                                 │ ││
│  │ └─────────────────────────────────────────────────────────┘ ││
│  └─────────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                   开发环境                                      │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │ 资源组: rg-dev-environment                                 ││
│  │ ┌─────────────────────────────────────────────────────────┐ ││
│  │ │ 容器应用环境                                            │ ││
│  │ │ ┌─────────────────────────────────────────────────────┐ │ ││
│  │ │ │ 容器应用 (Flask应用)                                │ │ ││
│  │ │ │ - 用于ACR访问的托管身份                             │ │ ││
│  │ │ │ - 启用自动缩放                                      │ │ ││
│  │ │ └─────────────────────────────────────────────────────┘ │ ││
│  │ └─────────────────────────────────────────────────────────┘ ││
│  │ Azure存储帐户 | 密钥保管库 | Application Insights         ││
│  └─────────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                  生产环境                                       │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │ 资源组: rg-prod-environment                                ││
│  │ ┌─────────────────────────────────────────────────────────┐ ││
│  │ │ 容器应用环境 (VNET集成)                                 │ ││
│  │ │ ┌─────────────────────────────────────────────────────┐ │ ││
│  │ │ │ 容器应用 (与开发环境相同的镜像)                      │ │ ││
│  │ │ │ - 增强的安全配置                                    │ │ ││
│  │ │ │ - 生产级缩放规则                                    │ │ ││
│  │ │ └─────────────────────────────────────────────────────┘ │ ││
│  │ └─────────────────────────────────────────────────────────┘ ││
│  │ VNET | 存储 | 密钥保管库 | App Insights | 监控            ││
│  └─────────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────┘

实践步骤

先决条件

  • Azure Developer CLI v1.20.0或更高版本
  • Docker(用于本地容器测试)

1. 克隆示例存储库

1
azd init -t https://github.com/puicchan/azd-dev-prod-aca-storage

2. 设置开发环境

1
2
3
4
5
6
7
8
9
# 启用分层基础设施的alpha功能
azd config set alpha.layers on

# 创建并配置开发环境
azd env new myapp-dev
azd env set AZURE_ENV_TYPE dev

# 部署所有内容:基础设施 + 构建 + 推送 + 部署
azd up

3. 准备生产基础设施

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 创建生产环境
azd env new myapp-prod
azd env set AZURE_ENV_TYPE prod

# 引用现有的共享ACR
azd env set ACR_RESOURCE_GROUP_NAME rg-shared-acr-resource-group-name
azd env set AZURE_CONTAINER_REGISTRY_ENDPOINT shared-acr-endpoint

# 仅配置基础设施(不构建/推送/部署)
azd provision

4. 设置CI/CD流水线

1
2
3
# 选择开发环境并配置流水线
azd env select myapp-dev
azd pipeline config

GitHub Actions工作流程

工作流程遵循清晰的三阶段模式:构建 → 部署开发 → 部署生产

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
┌─────────────────────────────────────────────────────────────────┐
                       GitHub Actions工作流程                    
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
 作业1: 构建                                                    
 ┌─────────────────────────────────────────────────────────────┐ 
  1. 启用alpha功能分层基础设施                            
  2. 设置环境名称开发/生产                                
  3. 使用Azure登录联合凭据                                
  4. 配置基础设施开发环境                                 
  5. 构建并发布容器到ACR                                      
     └─ azd publish app                                        
     └─ 获取镜像: azd env get-value SERVICE_APP_IMAGE_NAME    
 └─────────────────────────────────────────────────────────────┘ 
                                                                 
 输出:                                                           
   container-image: crXXXX.azurecr.io/app:azd-deploy-123456     
   dev-env-name: myapp-dev                                      
   prod-env-name: myapp-prod                                    
└──────────────────────────────┬──────────────────────────────────┘
                               
                               
┌─────────────────────────────────────────────────────────────────┐
 作业2: 部署开发                                                
 ┌─────────────────────────────────────────────────────────────┐ 
  1. 启用alpha功能分层基础设施                            
  2. 使用Azure登录联合凭据                                
  3. 部署到开发环境                                           
     └─ azd deploy app --from-package <container-image>        
  4. 验证应用                                                 
     └─ 运行验证测试冒烟测试                                
 └─────────────────────────────────────────────────────────────┘ 
└──────────────────────────────┬──────────────────────────────────┘
                               
                               
┌─────────────────────────────────────────────────────────────────┐
 作业3: 部署生产                                                
 ┌─────────────────────────────────────────────────────────────┐ 
  1. 启用alpha功能分层基础设施                            
  2. 使用Azure登录联合凭据                                
  3. 部署到生产环境                                           
     └─ azd deploy app --from-package <相同容器镜像>          
     └─ 使用环境变量中的共享ACR                               
 └─────────────────────────────────────────────────────────────┘ 
└─────────────────────────────────────────────────────────────────┘

关键要点:

  • 容器在构建阶段仅构建一次
  • azd env get-value SERVICE_APP_IMAGE_NAME获取已发布的镜像名称
  • 开发和生产部署完全相同的容器镜像
  • 验证步骤在阶段之间充当质量门控

总结

本文介绍了如何使用Azure Developer CLI v1.20.0中的新功能,在Azure容器应用中实现"一次构建,随处部署"模式。基于我们之前关于Azure应用服务的文章,这种容器应用方法展示了相同的核心原则如何在不同的Azure计算服务中工作。

分层基础设施和分离的容器操作(azd publish + azd deploy --from-package)的组合为您提供了坚实的基础,当您准备超越azd up的简单性,但仍希望保持熟悉的azd开发人员体验时。

我们涵盖的内容:

  • 容器应用集成:azd如何与Azure容器应用开箱即用
  • 分层基础设施:具有适当依赖关系管理的顺序部署
  • 环境分离:在添加生产就绪控制的同时保持开发便利性
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计