name: deploying-on-azure description: 使用最佳实践设计和实现 Azure 云架构,涵盖计算、存储、数据库、AI服务、网络和治理。适用于在 Microsoft Azure 上构建应用程序或将工作负载迁移到 Azure 云平台。
Azure 模式
遵循 Microsoft 的 Well-Architected 框架和最佳实践,设计和实现 Azure 云架构,包括服务选择、成本优化和安全性。
何时使用
在以下情况下使用此技能:
- 为 Azure 云设计新应用程序
- 选择 Azure 计算服务(容器应用、AKS、函数、应用服务)
- 架构存储解决方案(Blob 存储、文件、Cosmos DB)
- 集成 Azure OpenAI 或认知服务
- 实现消息模式(服务总线、事件网格、事件中心)
- 设计带有私有端点的安全网络
- 应用 Azure 治理和合规策略
- 优化 Azure 成本和性能
核心概念
服务选择哲学
Azure 提供 200 多个服务。基于以下因素选择:
- 托管 vs. IaaS - 优先选择完全托管服务(降低运营负担)
- 成本模型 - 消费 vs. 专用容量
- 集成需求 - Microsoft 365、Active Directory、混合云
- 控制 vs. 简单性 - 更多控制 = 更多运营开销
Azure Well-Architected 框架(五大支柱)
| 支柱 | 焦点 | 关键实践 |
|---|---|---|
| 成本优化 | 在预算内最大化价值 | 预留实例、自动缩放、生命周期管理 |
| 运营卓越 | 运行可靠系统 | Azure Policy、自动化、监控 |
| 性能效率 | 扩展以满足需求 | 自动缩放、缓存、CDN |
| 可靠性 | 从故障中恢复 | 可用性区域、多区域、备份 |
| 安全性 | 保护数据和资产 | 托管身份、私有端点、密钥保管库 |
参考 references/well-architected.md 获取详细支柱实现模式。
计算服务选择
决策框架
基于容器的工作负载?
是 → 需要 Kubernetes 控制平面?
是 → Azure Kubernetes Service (AKS)
否 → Azure 容器应用(推荐)
否 → 事件驱动函数?
是 → Azure Functions
否 → Web 应用程序?
是 → Azure 应用服务
否 → 遗留/专用 → 虚拟机
服务比较
| 服务 | 最佳用于 | 定价模型 | 运营开销 |
|---|---|---|---|
| 容器应用 | 微服务、API、后台作业 | 消费或专用 | 低 |
| AKS | 复杂 K8s 工作负载、服务网格 | 基于节点 | 高 |
| 函数 | 事件驱动、短任务(<10 分钟) | 消费或高级 | 低 |
| 应用服务 | Web 应用、简单 API | 专用计划 | 低 |
| 虚拟机 | 遗留应用、专用软件 | 基于 VM | 高 |
推荐: 对于 80% 的容器化工作负载,从 Azure 容器应用开始(比 AKS 更简单、更便宜)。
参考 references/compute-services.md 获取详细比较和 Bicep、Terraform 示例。
存储架构
Blob 存储层级选择
| 层级 | 访问模式 | 成本/GB/月 | 最小存储期限 |
|---|---|---|---|
| 热 | 每日访问 | $0.018 | 无 |
| 冷 | <1/月访问 | $0.010 | 30 天 |
| 冷存档 | <90 天访问 | $0.0045 | 90 天 |
| 存档 | 罕见访问 | $0.00099 | 180 天 |
模式: 使用生命周期管理策略自动将数据移动到低成本层级。
存储服务决策
需要文件系统接口?
是 → 协议?
SMB → Azure 文件(或 NetApp 文件用于高性能)
NFS → Azure 文件(NFS 4.1)
否 → 对象存储 → Blob 存储
块存储 → 托管磁盘(标准/Premium SSD/Ultra)
分析 → Data Lake Storage Gen2
参考 references/storage-patterns.md 获取生命周期策略、冗余选项和性能调优。
数据库服务选择
决策框架
关系数据?
是 → SQL Server 兼容?
是 → 需要 VM 级别访问?
是 → SQL 托管实例
否 → Azure SQL 数据库
否 → 开源?
PostgreSQL → PostgreSQL 灵活服务器
MySQL → MySQL 灵活服务器
否 → 数据模型?
文档/JSON → Cosmos DB(NoSQL API)
图 → Cosmos DB(Gremlin API)
宽列 → Cosmos DB(Cassandra API)
键值缓存 → Azure Cache for Redis
时间序列 → Azure Data Explorer
Cosmos DB 一致性级别
| 级别 | 用例 | 延迟 | 吞吐量 |
|---|---|---|---|
| 强 | 金融交易、库存 | 最高 | 最低 |
| 有界过时 | 实时排行榜,可接受滞后 | 高 | 低 |
| 会话 | 购物车、用户会话(默认) | 中等 | 中等 |
| 一致前缀 | 社交动态、IoT 遥测 | 低 | 高 |
| 最终 | 分析、ML 训练数据 | 最低 | 最高 |
参考 references/database-selection.md 获取容量规划、索引策略和迁移模式。
AI 和机器学习集成
Azure OpenAI 服务
用例:
- 聊天机器人和对话 AI(GPT-4)
- 内容生成和摘要
- 带有嵌入的语义搜索(RAG 模式)
- 代码生成和补全
- 函数调用用于结构化输出
关键优势:
- 企业数据隐私(不在客户数据上训练模型)
- 区域部署以符合数据驻留要求
- Microsoft 企业 SLA
- 内置内容过滤
集成模式:
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
client = AzureOpenAI(
azure_endpoint="https://myopenai.openai.azure.com",
azure_ad_token_provider=token_provider,
api_version="2024-02-15-preview"
)
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[{"role": "user", "content": "Hello!"}]
)
其他 AI 服务
| 服务 | 目的 | 常见用例 |
|---|---|---|
| 认知服务 | 预构建 AI 模型 | 视觉、语音、语言、决策 |
| Azure 机器学习 | 自定义模型训练 | MLOps、模型部署、特征工程 |
| Azure AI 搜索 | 语义搜索引擎 | RAG 模式、文档搜索 |
参考 references/ai-integration.md 获取 RAG 架构、函数调用和微调模式。
消息传递和集成
服务选择矩阵
| 服务 | 模式 | 消息大小 | 排序 | 事务 | 最佳用于 |
|---|---|---|---|---|---|
| 服务总线 | 队列/主题 | 256 KB - 100 MB | 是(会话) | 是 | 企业消息传递 |
| 事件网格 | 发布/订阅 | 1 MB | 否 | 否 | 事件驱动架构 |
| 事件中心 | 流式处理 | 1 MB | 是(分区) | 否 | 大数据摄取、遥测 |
| 存储队列 | 简单队列 | 64 KB | 否 | 否 | 异步工作、<500k 消息/秒 |
何时使用:
- 服务总线: 可靠的消息传递与事务(例如,订单处理)
- 事件网格: 响应 Azure 资源事件(例如,Blob 创建、VM 停止)
- 事件中心: 高吞吐量流式处理(例如,IoT 遥测、应用程序日志)
参考 references/messaging-patterns.md 获取实现示例、重试策略和死信处理。
网络架构
私有端点 vs. 服务端点
| 方面 | 私有端点 | 服务端点 |
|---|---|---|
| 安全模型 | VNet 中的私有 IP | 到公共端点的优化路由 |
| 数据外泄保护 | 是(网络隔离) | 有限(仅服务防火墙) |
| 成本 | ~$7.30/月每个端点 | 免费 |
| 推荐 | 生产工作负载 | 开发/测试环境 |
最佳实践: 在生产中为所有 PaaS 服务使用私有端点(将公共端点视为反模式)。
中心和辐射拓扑
组件:
- 中心 VNet: 共享服务(Azure 防火墙、VPN 网关、私有端点)
- 辐射 VNets: 应用程序工作负载(按环境或团队隔离)
- VNet 对等连接: 中心和辐射之间的低延迟连接
好处:
- 集中化安全(防火墙、DNS)
- 成本优化(共享出口)
- 简化治理
参考 references/networking-architecture.md 获取中心辐射 Bicep 模板、NSG 模式和 DNS 配置。
身份和访问管理
托管身份模式
始终使用托管身份代替:
- 代码中的连接字符串
- 存储账户密钥
- 服务主体凭据
- API 密钥
系统分配 vs. 用户分配:
| 类型 | 生命周期 | 用例 |
|---|---|---|
| 系统分配 | 绑定到资源 | 单个资源需要访问 |
| 用户分配 | 独立 | 多个资源共享身份 |
示例流程:
- 在容器应用上启用托管身份
- 授予身份对密钥保管库的访问权限(RBAC 或访问策略)
- 应用程序自动进行身份验证(无需凭据)
from azure.identity import DefaultAzureCredential
# 使用托管身份自动工作
credential = DefaultAzureCredential()
keyvault_client = SecretClient(vault_url="...", credential=credential)
Azure RBAC 最佳实践
- 尽可能使用内置角色(所有者、贡献者、读取者)
- 应用最小权限原则
- 在资源组级别分配角色(非订阅)
- 使用 Azure AD 组进行用户管理
- 定期审核角色分配
参考 references/identity-access.md 获取 Entra ID 集成、条件访问策略和 B2C 模式。
治理和合规
Azure Policy 用于防护栏
常见策略模式:
- 要求所有资源都有标签(环境、所有者、成本中心)
- 限制允许的 Azure 区域
- 强制执行 TLS 1.2 最低版本
- 要求存储账户使用私有端点
- 拒绝 VM 上的公共 IP 地址
策略效果:
- 拒绝: 阻止不合规资源创建
- 审核: 记录不合规但允许创建
- DeployIfNotExists: 自动修复缺失配置
- 修改: 在部署期间更改资源属性
成本管理
优化策略:
| 模式 | 节省 | 用例 |
|---|---|---|
| 预留实例(1 年) | 40-50% | 稳态工作负载(数据库、VM) |
| 预留实例(3 年) | 60-70% | 长期承诺 |
| Spot VM | 高达 90% | 容错批处理 |
| 自动关机 | 可变 | 开发/测试资源(非工作时间) |
| 存储生命周期策略 | 50-90% | 移动到冷/存档层级 |
监控:
- 在 Azure 成本管理中设置预算和警报
- 每周查看 Azure Advisor 成本建议
- 标记资源以进行成本分配
- 使用 FinOps Toolkit 用于 Power BI 仪表板
参考 references/governance-compliance.md 获取 Azure 登陆区域、策略定义和蓝图。
基础设施即代码
工具选择
| 工具 | 最佳用于 | Azure 集成 | 多云 |
|---|---|---|---|
| Bicep | Azure 原生项目 | 优秀(官方) | 否 |
| Terraform | 多云环境 | 良好(azurerm 提供者) | 是 |
| Pulumi | 开发者优先方法 | 良好(原生 SDK) | 是 |
| Azure CLI | 脚本和自动化 | 优秀 | 否 |
推荐:
- 使用 Bicep 用于纯 Azure 基础设施(最佳 Azure 集成,原生类型安全)
- 使用 Terraform 用于多云或现有 Terraform 商店
- 使用 Azure CLI 用于快速脚本和 CI/CD 自动化
Bicep 最佳实践
- 使用参数文件用于环境特定值
- 利用 Azure 验证模块(AVM)用于测试模式
- 按资源生命周期组织(网络、数据、计算)
- 使用符号名称(非字符串插值)
- 在 CI/CD 中启用 Linting 和验证
参考 examples/bicep/ 和 examples/terraform/ 目录中的 Bicep 和 Terraform 示例。
安全最佳实践
基本安全控制
| 控制 | 实施 | 优先级 |
|---|---|---|
| 托管身份 | 在所有计算资源上启用 | 关键 |
| 私有端点 | 生产中的所有 PaaS 服务 | 关键 |
| 密钥保管库 | 存储机密、密钥、证书 | 关键 |
| 网络分段 | NSG、应用程序安全组 | 高 |
| Microsoft Defender | 为所有资源类型启用 | 高 |
| Azure Policy | 预防性控制 | 高 |
| 即时访问 | VM 和特权访问 | 中等 |
深度防御层
- 网络: 私有端点、NSG、Azure 防火墙
- 身份: Entra ID、托管身份、条件访问
- 应用程序: Web 应用程序防火墙、API 管理
- 数据: 静态加密、传输中加密(TLS 1.2+)
- 监控: Microsoft Defender、Azure Monitor、Sentinel
参考 references/security-architecture.md(另见 security-hardening 和 auth-security 技能)。
成本估算
定价考虑
计算:
- 容器应用:~$60/月(1 vCPU、2GB RAM、24/7)
- AKS:~$400/月(3 节点 D4s_v5 集群)
- 应用服务 P1v3:~$145/月(2 vCPU、8GB RAM)
- 函数消费:~$0.20 每 100 万次执行
存储:
- Blob 热:$0.018/GB/月
- Blob 冷:$0.010/GB/月
- Blob 存档:$0.00099/GB/月
- 托管磁盘 Premium SSD:$0.15/GB/月
数据库:
- Azure SQL 数据库(2 vCores):~$280/月
- Cosmos DB 无服务器:按消耗的 RU 付费
- PostgreSQL 灵活(2 vCores):~$125/月
使用 Azure 定价计算器: https://azure.microsoft.com/pricing/calculator/
快速参考表
计算服务决策矩阵
| 如果您需要… | 选择 |
|---|---|
| Kubernetes 功能(CRD、操作员) | Azure Kubernetes Service |
| 无 K8s 复杂性的微服务 | Azure 容器应用 |
| 事件驱动函数(<10 分钟) | Azure Functions |
| 传统 Web 应用(Node、.NET、Python) | Azure 应用服务 |
| 批处理、HPC | Azure Batch 或 VM 规模集 |
| 遗留应用程序迁移 | 虚拟机 |
存储服务决策矩阵
| 如果您需要… | 选择 |
|---|---|
| SMB 文件共享 | Azure 文件 |
| NFS 文件共享 | Azure 文件(NFS 4.1) |
| 对象存储(图像、备份) | Blob 存储 |
| 高性能文件存储 | Azure NetApp 文件 |
| VM 的块存储 | 托管磁盘 |
| 大数据分析 | Data Lake Storage Gen2 |
数据库服务决策矩阵
| 如果您需要… | 选择 |
|---|---|
| SQL Server 功能(T-SQL、SQL Agent) | Azure SQL 数据库或托管实例 |
| PostgreSQL | PostgreSQL 灵活服务器 |
| MySQL | MySQL 灵活服务器 |
| 全局分发、多模型 | Cosmos DB |
| 内存缓存 | Azure Cache for Redis |
| 图数据库 | Cosmos DB(Gremlin API) |
| 时间序列数据 | Azure Data Explorer |
与其他技能集成
- 基础设施即代码: 使用 Bicep 或 Terraform 实现 Azure 模式
- kubernetes-操作: AKS 特定配置和操作
- 部署-应用程序: 容器应用和应用服务部署
- 构建-ci-管道: Azure DevOps 和 GitHub Actions 集成
- auth-安全: Entra ID 身份验证和授权模式
- 可观察性: Azure Monitor 和 Application Insights
- ai-聊天: Azure OpenAI 服务用于聊天应用程序
- 数据库-nosql: Cosmos DB 实现细节
- 秘密-管理: Azure 密钥保管库集成模式
参考文档
详细实现指南,参见:
references/compute-services.md- 容器应用、AKS、函数、应用服务,带有 Bicep/Terraformreferences/storage-patterns.md- Blob 存储、文件、磁盘、生命周期管理references/database-selection.md- SQL 数据库、Cosmos DB、PostgreSQL 模式references/ai-integration.md- Azure OpenAI、RAG 架构、函数调用references/messaging-patterns.md- 服务总线、事件网格、事件中心示例references/networking-architecture.md- 中心辐射、私有端点、DNS 配置references/identity-access.md- Entra ID、托管身份、RBACreferences/governance-compliance.md- Azure Policy、登陆区域、成本优化references/well-architected.md- 五大支柱实施指南
代码示例
工作示例位于:
examples/bicep/- 基础设施模板(容器应用、AKS、网络、数据库)examples/terraform/- 多云 IaC 示例examples/sdk/python/- Python SDK 集成(OpenAI、托管身份、消息传递)examples/sdk/typescript/- TypeScript SDK 示例
额外资源
- Azure 架构中心:https://learn.microsoft.com/azure/architecture/
- Azure Well-Architected 框架:https://learn.microsoft.com/azure/well-architected/
- Azure 验证模块:https://aka.ms/avm
- Azure 图表(服务比较):https://azurecharts.com/
- Azure 更新:https://azure.microsoft.com/updates/