Azd Deployment for Azure

Polar Sponsor
爱发电 赞助
.NET 9.0

使用 Azure Developer CLI (azd) 将容器化应用部署到 Azure Container Apps。适用于 azd 项目初始化、编写 azure.yaml 配置、创建 Container Apps 的 Bicep 基础设施、配置 ACR 远程构建、实现幂等部署、管理本地/.azure/Bicep 环境变量及排查 azd up 失败。触发场景包括 azd 配置、Container Apps 部署、多服务部署和 Bicep 基础设施即代码请求。

Azure 开发者 CLI (azd) 集装箱应用软件部署.

功能概述

Azure 开发者 CLI (azd) 集装箱应用软件部署.是一项面向实际任务的技能,主要用于Deptroduced Controducal Apps 将集装箱化的前端+后端应用软件部署到 Azure 集装箱应用软件,并具有远程构建,管理的身份和独家基础设施。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

核心要点

  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
  • 实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

使用与执行

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;

结果检查与注意事项

涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

Azure 开发者 CLI(azd)容器应用部署

将容器化的前端 + 后端应用部署到 Azure Container Apps,支持远程构建、托管标识(Managed Identity)和幂等基础设施。

快速开始

# 初始化并部署
azd auth login
azd init                    # 创建 azure.yaml 和 .azure/ 目录
azd env new       # 创建环境(dev、staging、prod)
azd up                      # 部署基础设施 + 构建 + 部署

核心文件结构

project/
├── azure.yaml              # azd 服务定义 + 钩子(hooks)
├── infra/
│   ├── main.bicep          # 根基础设施模块
│   ├── main.parameters.json # 从环境变量注入参数
│   └── modules/
│       ├── container-apps-environment.bicep
│       └── container-app.bicep
├── .azure/
│   ├── config.json         # 默认环境指向配置
│   └── /
│       ├── .env            # 环境专属值(由 azd 管理)
│       └── config.json     # 环境元数据
└── src/
    ├── frontend/Dockerfile
    └── backend/Dockerfile

azure.yaml 配置

最小化配置

name: azd-deployment
services:
  backend:
    project: ./src/backend
    language: python
    host: containerapp
    docker:
      path: ./Dockerfile
      remoteBuild: true

完整配置(含钩子)

name: azd-deployment
metadata:
  template: my-project@1.0.0

infra:
  provider: bicep
  path: ./infra

azure:
  location: eastus2

services:
  frontend:
    project: ./src/frontend
    language: ts
    host: containerapp
    docker:
      path: ./Dockerfile
      context: .
      remoteBuild: true

  backend:
    project: ./src/backend
    language: python
    host: containerapp
    docker:
      path: ./Dockerfile
      context: .
      remoteBuild: true

hooks:
  preprovision:
    shell: sh
    run: |
      echo "部署前执行..."
      
  postprovision:
    shell: sh
    run: |
      echo "部署后执行 —— 配置 RBAC 等操作"
      
  postdeploy:
    shell: sh
    run: |
      echo "前端地址: ${SERVICE_FRONTEND_URI}"
      echo "后端地址: ${SERVICE_BACKEND_URI}"

关键 azure.yaml 选项

选项 说明
remoteBuild: true 在 Azure Container Registry 中构建镜像(推荐)
context: . Docker 构建上下文,相对于 project 路径
host: containerapp 部署至 Azure Container Apps
infra.provider: bicep 使用 Bicep 管理基础设施

环境变量流转机制

三层配置体系

  1. 本地 .env — 仅用于本地开发
  2. .azure//.env — 由 azd 管理,自动从 Bicep 输出填充
  3. main.parameters.json — 将环境变量映射为 Bicep 参数

参数注入模式

// infra/main.parameters.json
{
  "parameters": {
    "environmentName": { "value": "${AZURE_ENV_NAME}" },
    "location": { "value": "${AZURE_LOCATION=eastus2}" },
    "azureOpenAiEndpoint": { "value": "${AZURE_OPENAI_ENDPOINT}" }
  }
}

语法:${VAR_NAME} 或 ${VAR_NAME=default_value}

设置环境变量

# 为当前环境设置变量
azd env set AZURE_OPENAI_ENDPOINT "https://my-openai.openai.azure.com"
azd env set AZURE_SEARCH_ENDPOINT "https://my-search.search.windows.net"

# 初始化时设置
azd env new prod
azd env set AZURE_OPENAI_ENDPOINT "..." 

Bicep 输出 → 环境变量

// 在 main.bicep 中 — 输出项将自动填充至 .azure//.env
output SERVICE_FRONTEND_URI string = frontend.outputs.uri
output SERVICE_BACKEND_URI string = backend.outputs.uri
output BACKEND_PRINCIPAL_ID string = backend.outputs.principalId

幂等部署

为何 azd up 是幂等的

  1. Bicep 是声明式的 — 资源始终收敛至期望状态
  2. 远程构建生成唯一镜像标签 — 标签中包含部署时间戳
  3. ACR 复用已有镜像层 — 仅上传变更的层

保留手动变更

通过 Azure 门户添加的自定义域名可能在重新部署时丢失。可通过钩子进行保留:

hooks:
  preprovision:
    shell: sh
    run: |
      # 部署前保存自定义域名
      if az containerapp show --name "$FRONTEND_NAME" -g "$RG" &>/dev/null; then
        az containerapp show --name "$FRONTEND_NAME" -g "$RG" 
          --query "properties.configuration.ingress.customDomains" 
          -o json > /tmp/domains.json
      fi

  postprovision:
    shell: sh
    run: |
      # 校验或恢复自定义域名
      if [ -f /tmp/domains.json ]; then
        echo "已保存域名: $(cat /tmp/domains.json)"
      fi

处理已有资源

// 引用已有 ACR(不重建)
resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-07-01' existing = {
  name: containerRegistryName
}

// 将 customDomains 设为 null,以保留门户中添加的域名
customDomains: empty(customDomainsParam) ? null : customDomainsParam

容器应用服务发现

同一环境内容器应用之间的内部 HTTP 路由:

// 前端环境变量中引用后端
env: [
  {
    name: 'BACKEND_URL'
    value: 'http://ca-backend-${resourceToken}'  // 内部 DNS
  }
]

前端 nginx 反向代理至该内部 URL:

location /api {
    proxy_pass $BACKEND_URL;
}

托管标识与 RBAC

启用系统分配标识

resource containerApp 'Microsoft.App/containerApps@2024-03-01' = {
  identity: {
    type: 'SystemAssigned'
  }
}

output principalId string = containerApp.identity.principalId

部署后 RBAC 授权

hooks:
  postprovision:
    shell: sh
    run: |
      PRINCIPAL_ID="${BACKEND_PRINCIPAL_ID}"
      
      # 授予 Azure OpenAI 访问权限
      az role assignment create 
        --assignee-object-id "$PRINCIPAL_ID" 
        --assignee-principal-type ServicePrincipal 
        --role "Cognitive Services OpenAI User" 
        --scope "$OPENAI_RESOURCE_ID" 2>/dev/null || true
      
      # 授予 Azure AI Search 访问权限
      az role assignment create 
        --assignee-object-id "$PRINCIPAL_ID" 
        --role "Search Index Data Reader" 
        --scope "$SEARCH_RESOURCE_ID" 2>/dev/null || true

常用命令

# 环境管理
azd env list                        # 列出所有环境
azd env select                # 切换至指定环境
azd env get-values                  # 显示全部环境变量
azd env set KEY value               # 设置环境变量

# 部署
azd up                              # 完整部署:基础设施 + 构建 + 应用部署
azd provision                       # 仅部署基础设施
azd deploy                          # 仅部署代码
azd deploy --service backend        # 仅部署 backend 服务

# 调试
azd show                            # 显示项目当前状态
az containerapp logs show -n  -g  --follow  # 实时流式输出日志

参考文件

  • Bicep 模式:参阅 references/bicep-patterns.md 获取 Container Apps 模块示例
  • 故障排查:参阅 references/troubleshooting.md 查看常见问题解决方案
  • azure.yaml Schema:参阅 references/azure-yaml-schema.md 获取完整配置项说明

关键注意事项

  1. 务必使用 remoteBuild: true —— 在 M1/ARM Mac 上对 AMD64 平台执行本地构建会失败
  2. Bicep 输出自动填充至 .azure//.env —— 请勿手动编辑该文件
  3. 使用 azd env set 设置密钥类变量 —— 不应写入 main.parameters.json 的默认值中
  4. 服务标签(azd-service-name) —— azd 依赖此标签识别并管理 Container Apps
  5. 钩子中使用 || true —— 防止因 RBAC 权限“已存在”导致部署失败

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

0

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

0

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

0

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

0

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

0

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

0

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

0

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

0

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

0

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习