Azure 云架构师

azure-cloud-architect
分类设计
作者Alireza Rezvani
许可MIT
评分4.90/5
使用3.7K

Azure 云架构师

利用 Bicep 基础设施即代码 (IaC) 模板,为初创公司和企业设计可扩展且具有成本效益的 Azure 架构。

---

工作流

第一步:收集需求

收集应用程序规范:

code
- 应用程序类型(Web 应用、移动端后端、数据流水线、SaaS、微服务)
  • 预期用户数和每秒请求数 (RPS)
  • 预算限制(每月支出上限)
  • 团队规模和 Azure 经验水平
  • 合规性要求(GDPR, HIPAA, SOC 2, ISO 27001)
  • 可用性要求(SLA, RPO/RTO)
  • 区域偏好(数据驻留、延迟)

第二步:设计架构

运行架构设计器以获取模式建议:

bash
python scripts/architecture_designer.py \
  --app-type web_app \
  --users 10000 \
  --requirements '{"budget_monthly_usd": 500, "compliance": ["SOC2"]}'

输出示例:

json
{
  "recommended_pattern": "app_service_web",
  "service_stack": ["App Service", "Azure SQL", "Front Door", "Key Vault", "Entra ID"],
  "estimated_monthly_cost_usd": 280,
  "pros": ["托管平台", "内置自动缩放", "部署槽"],
  "cons": ["控制力低于 VM", "平台限制", "消费计划存在冷启动"]
}

从推荐模式中选择:

  • App Service Web: Front Door + App Service + Azure SQL + Redis Cache

  • AKS 微服务: AKS + Service Bus + Cosmos DB + API Management

  • 无服务器事件驱动: Functions + Event Grid + Service Bus + Cosmos DB

  • 数据流水线: Data Factory + Synapse Analytics + Data Lake Storage + Event Hubs

详细的模式规范请参阅 references/architecture_patterns.md

验证检查点: 在进入第三步之前,请确认推荐模式与团队的运维成熟度和合规性要求相匹配。

第三步:生成 IaC 模板

为所选模式创建基础设施即代码:

bash
# Web 应用栈 (Bicep)
python scripts/bicep_generator.py --arch-type web-app --output main.bicep

Bicep 输出示例(核心 Web 应用资源):

bicep
@description('环境名称')
param environment string = 'dev'

@description('资源的 Azure 区域')
param location string = resourceGroup().location

@description('应用程序名称')
param appName string = 'myapp'

// App Service 计划
resource appServicePlan 'Microsoft.Web/serverfarms@2023-01-01' = {
name: '${environment}-${appName}-plan'
location: location
sku: {
name: 'P1v3'
tier: 'PremiumV3'
capacity: 1
}
properties: {
reserved: true // Linux
}
}

// App Service
resource appService 'Microsoft.Web/sites@2023-01-01' = {
name: '${environment}-${appName}-web'
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
siteConfig: {
linuxFxVersion: 'NODE|20-lts'
minTlsVersion: '1.2'
ftpsState: 'Disabled'
alwaysOn: true
}
}
identity: {
type: 'SystemAssigned'
}
}

// Azure SQL 数据库
resource sqlServer 'Microsoft.Sql/servers@2023-05-01-preview' = {
name: '${environment}-${appName}-sql'
location: location
properties: {
admi


nistrators: {
azureADOnlyAuthentication: true
}
minimalTlsVersion: '1.2'
}
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-05-01-preview' = {
parent: sqlServer
name: '${appName}-db'
location: location
sku: {
name: 'GP_S_Gen5_2'
tier: 'GeneralPurpose'
}
properties: {
autoPauseDelay: 60
minCapacity: json('0.5')
}
}

code
> 包含 Front Door、Key Vault、托管标识(Managed Identity)和监控的完整模板由 bicep_generator.py 生成,也可在 references/architecture_patterns.md 中查看。

Bicep 是 Azure 推荐的 IaC 语言。 建议优先使用 Bicep 而非 ARM JSON 模板:Bicep 可编译为 ARM JSON,语法更简洁,支持模块化,且由微软官方支持。

第 4 步:审查成本

分析预估成本和优化机会:

bash
python scripts/cost_optimizer.py \
--config current_resources.json \
--json
code
输出示例:
json
{
"current_monthly_usd": 2000,
"recommendations": [
{ "action": "Right-size SQL Database GP_S_Gen5_8 to GP_S_Gen5_2", "savings_usd": 380, "priority": "high" },
{ "action": "Purchase 1-year Reserved Instances for AKS node pools", "savings_usd": 290, "priority": "high" },
{ "action": "Move Blob Storage to Cool tier for objects >30 days old", "savings_usd": 65, "priority": "medium" }
],
"total_potential_savings_usd": 735
}
code
输出内容包括:
  • 按服务划分的每月成本明细

  • 规格优化(Right-sizing)建议

  • 保留实例(Reserved Instance)和节省计划(Savings Plan)机会

  • 潜在的每月节省金额

第 5 步:配置 CI/CD

设置 Azure DevOps Pipelines 或 GitHub Actions 与 Azure 的集成:

yaml

GitHub Actions — 将 Bicep 部署到 Azure


name: Deploy Infrastructure
on:
push:
branches: [main]

permissions:
id-token: write
contents: read

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

- uses: azure/arm-deploy@v2
with:
resourceGroupName: rg-myapp-dev
template: ./infra/main.bicep
parameters: environment=dev

code
yaml

Azure DevOps Pipeline


trigger:
branches:
include:
- main

pool:
vmImage: 'ubuntu-latest'

steps:
- task: AzureCLI@2
inputs:
azureSubscription: 'MyServiceConnection'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
az deployment group create \
--resource-group rg-myapp-dev \
--template-file infra/main.bicep \
--parameters environment=dev

code
### 第 6 步:安全审查

在投入生产前验证安全状况:

  • 身份验证:使用带有 RBAC 的 Entra ID (Azure AD),服务间认证使用托管标识(Managed Identity)—— 绝不要在代码中存储凭据。
  • 密钥管理:所有密钥、证书和连接字符串均存储在 Key Vault 中。
  • 网络:所有子网配置 NSG,PaaS 服务使用私有端点(Private Endpoints),部署带有 WAF 的 Application Gateway。
  • 加密:传输中采用 TLS 1.2+,静态存储采用 Azure 管理或客户管理密钥。
  • 监控:启用 Microsoft Defender for Cloud,使用 Azure Policy 设定治理基准。
  • 合规性:针对 SOC 2 / HIPAA / ISO 27001 等标准分配 Azure Policy。

如果部署失败:

1. 检查部署状态:

bash
az deployment group show \
code
--resource-group rg-myapp-dev \
--name main \
--query 'properties.error'

2. 查看活动日志以检查 RBAC 或策略错误。
3. 在部署前验证 Bicep 模板:
bash
az bicep build --file main.bicep
az deployment group validate \
--resource-group rg-myapp-dev \
--template-file main.bicep

常见失败原因:

  • RBAC 权限错误 —— 验证部署主体在资源组上具有“参与者”权限

  • 资源提供程序未注册 —— 运行 az provider register --namespace Microsoft.Web

  • 命名冲突 —— Azure 资源名称通常需要全局唯一(如存储账户、Web 应用)

  • 配额超出 —— 通过 Azure 门户 > 订阅 > 用量 + 配额申请增加配额

---

工具

architecture_designer.py

根据需求生成架构模式建议。

bash
python scripts/architecture_designer.py \
  --app-type web_app \
  --users 50000 \
  --requirements '{"budget_monthly_usd": 1000, "compliance": ["HIPAA"]}' \
  --json

输入: 应用类型、预期用户数、JSON 格式的需求
输出: 推荐模式、服务栈、成本估算、优缺点

cost_optimizer.py

分析 Azure 资源配置以节省成本。

bash
python scripts/cost_optimizer.py --config resources.json --json

输入: 包含当前 Azure 资源清单的 JSON 文件
输出: 针对以下方面的建议:

  • 移除闲置资源

  • VM 和数据库规格优化(Right-sizing)

  • 购买预留实例 (Reserved Instance)

  • 存储层级转换

  • 清理未使用的公共 IP 和负载均衡器

bicep_generator.py

根据架构类型生成 Bicep 模板脚手架。

bash
python scripts/bicep_generator.py --arch-type microservices --output main.bicep

输出: 生产就绪的 Bicep 模板,包含:

  • 托管标识(无需密码)

  • Key Vault 集成

  • Azure Monitor 诊断设置

  • 网络安全组 (NSG)

  • 用于成本分摊的标签

---

快速上手

Web 应用架构 (< $100/月)

code
提问:"为一家拥有 5000 名用户的初创公司设计 Azure Web 应用"

结果:

  • App Service (B1 Linux) 用于运行应用

  • Azure SQL Serverless 用于关系型数据

  • Azure Blob Storage 用于静态资源

  • Front Door (免费层) 用于 CDN 和路由

  • Key Vault 用于密钥管理

  • 预估费用:$40-80/月

AKS 微服务架构 ($500-2000/月)

code
提问:"为一家拥有 5 万名用户的 SaaS 平台设计 Azure 微服务架构"

结果:

  • AKS 集群,包含 3 个节点池(系统、应用、任务)

  • API Management 用于网关和限流

  • Cosmos DB 用于多模型数据

  • Service Bus 用于异步消息传递

  • Azure Monitor + Application Insights 用于可观测性

  • 多可用区部署

Serverless 事件驱动架构 (< $200/月)

code
提问:"设计一个用于处理订单的事件驱动后端"

结果:

  • Azure Functions (消费计划) 用于计算

  • Event Grid 用于事件路由

  • Service Bus 用于可靠消息传递

  • Cosmos DB 用于订单数据

  • Application Insights 用于监控

  • 预估费用:根据流量而定,$30-150/月

数据流水线 ($300-1500/月)

code
提问:"设计一个每天摄取 1000 万个事件的数据流水线"

结果:

  • Event Hubs 用于数据摄取

  • Stream Analytics 或 Functions 用于处理

  • Data Lake Storage Gen2 用于存储原始数据

  • Synapse Analytics 用于数据仓库

  • Power BI 用于可视化报表

---

输入要求

在进行架构设计时请提供以下详细信息:

| 要求 | 描述 | 示例 |
|-------------|--------
-----|---------|
| 应用类型 | 构建内容 | SaaS 平台, 移动端后端 |
| 预期规模 | 用户数, 每秒请求数 (RPS) | 10k 用户, 100 RPS |
| 预算 | Azure 每月限额 | 最高 $500/月 |
| 团队情况 | 规模, Azure 经验 | 3 名开发人员, 中级 |
| 合规性 | 监管需求 | HIPAA, GDPR, SOC 2 |
| 可用性 | 运行时间要求 | 99.9% SLA, 1小时 RPO |

JSON 格式:

json
{
  "application_type": "saas_platform",
  "expected_users": 10000,
  "requests_per_second": 100,
  "budget_monthly_usd": 500,
  "team_size": 3,
  "azure_experience": "intermediate",
  "compliance": ["SOC2"],
  "availability_sla": "99.9%"
}

---

反模式 (Anti-Patterns)

| 反模式 | 失败原因 | 建议方案 |
|---|---|---|
| 新项目使用 ARM JSON 模板 | 冗长、难以阅读、缺乏模块化 | 使用 Bicep —— 可编译为 ARM,语法更简洁 |
| 将密钥存储在 App Settings 中 | 密钥在门户中可见,无法自动轮换 | 在 App Settings 中使用 Key Vault 引用 |
| 单一大型 AKS 节点池 | 无法针对不同工作负载进行优化 | 使用多个节点池:系统池、应用池、任务池 |
| PaaS 服务使用公共端点 | 暴露攻击面 | 使用私有端点 (Private Endpoints) + VNet 集成 |
| 为了“以防万一”而过度配置 | 首月预算浪费 | 从小规模开始,使用自动缩放,每月调整规模 |
| 所有资源共用一个资源组 | 故障影响范围大,RBAC 管理混乱 | 每个环境的每个工作负载使用独立资源组 |
| 缺乏标签 (Tagging) 策略 | 无法追踪成本或所有权 | 标记:环境 (environment)、所有者 (owner)、成本中心 (cost-center)、应用名称 (app-name) |
| 使用经典 (Classic) 资源 | 已弃用,功能有限 | 仅使用 ARM/Bicep 资源 |

---

输出格式

架构设计

  • 模式推荐及其理由
  • 服务栈图表 (ASCII)
  • 每月成本预估及权衡分析

IaC 模板

  • Bicep: 推荐 —— 原生支持,支持模块,语法简洁
  • ARM JSON: 根据需要由 Bicep 生成
  • Terraform HCL: 使用 azurerm 提供程序实现多云兼容

成本分析

  • 当前支出明细及优化建议
  • 优先级操作清单 (高/中/低) 及实施检查表

---

交叉引用

| 技能 | 关系 |
|-------|-------------|
| engineering-team/aws-solution-architect | AWS 等效方案 —— 相同的 6 步工作流,不同的服务 |
| engineering-team/gcp-cloud-architect | GCP 等效方案 —— 补全云平台三巨头 |
| engineering-team/senior-devops | 更广泛的 DevOps 范围 —— 流水线、监控、容器化 |
| engineering/terraform-patterns | IaC 实现 —— 用于针对 Azure 的 Terraform 模块 |
| engineering/ci-cd-pipeline-builder | 流水线构建 —— 自动化 Azure DevOps 和 GitHub Actions |

---

参考文档

| 文档 | 内容 |
|----------|----------|
| references/architecture_patterns.md | 5 种模式:Web 应用、微服务/AKS、无服务器 (Serverless)、数据管道、多区域部署 |
| references/service_selection.md | 计算、数据库、存储、消息传递、网络的决策矩阵 |
| references/best_practices.md | 命名规范、标签、RBAC、网络安全、监控、灾难恢复 (DR) |