Deploy containerized frontend + backend applications to Azure Container Apps with remote builds, managed identity, and idempotent infrastructure.
技能概述
azd-deployment 技能用于将容器化的前端+后端应用部署到Azure Container Apps。支持远程构建、托管身份和幂等基础设施,适用于需要企业级云部署的场景。
下载地址:https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azd-deployment
主要功能
- 容器化部署: 部署前端+后端容器应用到Azure Container Apps
- 远程构建: 在Azure Container Registry中构建镜像
- 托管身份: 配置系统分配的托管身份和RBAC
- 幂等部署: Bicep声明式基础设施确保幂等性
- 服务发现: Container App环境内内部HTTP路由
- 环境管理: 多环境支持(dev、staging、prod)
触发条件
- 部署容器化应用到Azure Container Apps
- 需要企业级云基础设施部署
- 需要托管身份和RBAC配置
- 需要多环境部署管理
快速开始
# 初始化和部署
azd auth login
azd init # 创建azure.yaml和.azure/文件夹
azd env new <env-name> # 创建环境(dev, staging, prod)
azd up # 配置基础设施 + 构建 + 部署
核心文件结构
project/
├── azure.yaml # azd服务定义 + 钩子
├── infra/
│ ├── main.bicep # 根基础设施模块
│ ├── main.parameters.json # 从环境变量注入参数
│ └── modules/
│ ├── container-apps-environment.bicep
│ └── container-app.bicep
├── .azure/
│ ├── config.json # 默认环境指针
│ └── <env-name>/
│ ├── .env # 环境特定值(azd管理)
│ └── config.json # 环境元数据
└── src/
├── frontend/Dockerfile
└── backend/Dockerfile
azure.yaml配置
示例: 完整配置
name: azd-deployment
metadata:
template: my-project@1.0.0infra:
provider: bicep
path: ./infraazure:
location: eastus2services:
frontend:
project: ./src/frontend
language: ts
host: containerapp
docker:
path: ./Dockerfile
context: .
remoteBuild: truebackend:
project: ./src/backend
language: python
host: containerapp
docker:
path: ./Dockerfile
context: .
remoteBuild: truehooks:
postdeploy:
shell: sh
run: |
echo "Frontend: ${SERVICE_FRONTEND_URI}"
echo "Backend: ${SERVICE_BACKEND_URI}"
关键配置选项
| 选项 | 描述 |
|---|---|
| remoteBuild: true | 在Azure Container Registry中构建镜像(推荐) |
| context: . | 相对于项目路径的Docker构建上下文 |
| host: containerapp | 部署到Azure Container Apps |
| infra.provider: bicep | 使用Bicep进行基础设施配置 |
常用命令
# 环境管理
azd env list # 列出环境
azd env select <name> # 切换环境
azd env get-values # 显示所有环境变量
azd env set KEY value # 设置变量# 部署
azd up # 完整配置 + 部署
azd provision # 仅基础设施
azd deploy # 仅代码部署
azd deploy --service backend # 部署单个服务# 调试
azd show # 显示项目状态
az containerapp logs show -n <app> -g <rg> --follow # 流式日志
托管身份与RBAC
示例: 启用系统分配身份
resource containerApp 'Microsoft.App/containerApps@2024-03-01' = {
identity: {
type: 'SystemAssigned'
}
}output principalId string = containerApp.identity.principalId
关键提醒
重要注意事项:
- 始终使用 `remoteBuild: true` - 本地构建在M1/ARM Mac上部署到AMD64会失败
- Bicep输出自动填充 .azure/<env>/.env - 不要手动编辑
- 使用 `azd env set` 设置密钥 - 不要在main.parameters.json默认值中设置
- 服务标签(`azd-service-name`) - azd需要它来查找Container Apps
- 钩子中使用 `|| true` - 防止RBAC"已存在"错误导致部署失败
最佳实践
推荐做法:
- ✅ 使用Bicep声明式基础设施确保幂等性
- ✅ 使用钩子保存手动添加的自定义域名
- ✅ 使用内部DNS进行服务间通信
- ✅ 配置后置钩子进行RBAC分配
- ✅ 使用 `azd env set` 管理环境变量
使用限制
- 仅适用于Azure Container Apps部署
- 需要Azure订阅和azd CLI
- 需要Bicep知识进行基础设施配置
- 不涵盖其他Azure服务的部署