IaaS架构剖析、场景实践

一、什么是 IaaS

1.1 定义

Infrastructure as a Service(IaaS,基础设施即服务)是一种按需、弹性提供计算、存储、网络和安全等底层 IT 资源的云服务模式。用户通过 API、CLI 或 Web 控制台即可在几分钟内创建、扩容或释放资源,而无需购置和维护物理服务器、机房电力与网络等硬件设施。

关键词:虚拟机 / 裸金属、块存储 / 对象存储、虚拟私有云(VPC)、负载均衡、防火墙、按量计费。

1.2 与传统数据中心的差异

维度 传统自建机房 IaaS
资源获取周期 周到月(采购、上架、网络布线) 分钟级(API 即时开通)
容量规划 需超前采购,容易闲置或不足 弹性伸缩,按需使用
成本结构 CAPEX 为主,前期投入高 OPEX 为主,按量付费
运维工作量 机房运维、硬件故障、人力 7×24 由云厂商托管,聚焦业务
可靠性 单 IDC 容灾能力有限 跨 AZ/Region 高可用

1.3 与 PaaS、SaaS 的关系

  • IaaS 为 PaaS 和 SaaS 提供底座能力;
  • PaaS 抽象运行时(运行环境、数据库、中间件);
  • SaaS 封装完整应用(CRM、办公套件)。

选择层次取决于控制粒度运维投入

控制粒度从低到高:SaaS → PaaS → IaaS → On‑Premises

运维责任从低到高:On‑Premises → IaaS → PaaS → SaaS

1.4 IaaS 的核心能力

  1. 弹性计算
    • 按需创建虚拟机(VM)或裸金属服务器,支持水平/纵向扩缩容
    • 多实例规格:通用型、计算优化型、内存优化型、GPU、FPGA
  2. 弹性存储
    • 块存储(EBS/Cinder):低延迟、高 IOPS,可快照回滚
    • 对象存储(S3/Swift):海量文件,高可用,跨区复制
  3. 软件定义网络(SDN)
    • 虚拟私有云(VPC)、子网、路由表、NAT、弹性公网 IP
    • 安全组、网络 ACL,实现微分段和零信任
  4. 安全与合规
    • IAM 身份与访问控制、KMS 密钥管理、WAF、DDoS 防护
    • 支持 PCI‑DSS、ISO 27001、GDPR 等合规认证
  5. 自动化与可观测
    • 基础设施即代码(IaC):Terraform/CloudFormation
    • 监控、日志、审计:Prometheus、CloudWatch、ELK

1.5 典型交付形态

资源类型 常见名称 说明
计算 EC2、Azure VM、GCE VM & 裸金属,多可用区部署
块存储 EBS、Persistent Disk 数据盘、系统盘,支持快照
对象存储 S3、Blob Storage 静态文件、备份、日志
网络 VPC、Virtual Network 私有网络、子网、路由
负载均衡 ELB、ALB、Azure LB 四层 / 七层流量分发
防火墙 Security Group、NSG 状态包过滤,细粒度控制

1.6 IaaS 为企业带来的价值

  1. CapEx → OpEx:将一次性硬件投资转化为按需运营支出。
  2. 业务弹性:快速应对流量高峰或突发活动,提升用户体验。
  3. 全球覆盖:多 Region 部署,加速全球访问并提升容灾等级。
  4. 聚焦核心业务:基础设施运维外包给云厂商,团队专注产品创新。
  5. 技术创新加速:随取随用的 GPU/FPGA、AI 专用实例,加快原型迭代。

小结:IaaS 把"机房 + 服务器 + 网络"抽象成可编程的 API 服务,企业无需自建硬件即可获取与世界级数据中心同等的弹性与可靠性,为上层 PaaS/SaaS 和业务系统提供坚实基座。

二、IaaS 架构与核心组件

下面从五个层次拆解典型 IaaS 平台的技术栈与职责分工。理解这些层次有助于在选型、容量规划和故障排查时快速定位问题。

2.1 物理层(Physical Layer)

组成 关键要点 典型技术 / 设备
计算节点 ‑ 机架式 / 刀片式服务器 ‑ 支持 NUMA、SR‑IOV、GPU、FPGA 等硬件直通 Dell PowerEdge、HPE ProLiant、Supermicro
存储节点 ‑ 高密度盘柜,统一抽象为分布式块/对象存储 ‑ NVMe SSD + SAS HDD 分层 Ceph OSD、NVMe‑all‑flash、Erasure Coding
网络交换 ‑ Spine‑Leaf 架构,保证东西向流量 <2 μs RTT ‑ 25/100/200 GbE Broadcom Tomahawk、Arista 7280、M‑LAG
机房基础 2N 供电、N+1 制冷、热通道 / 冷通道隔离 Tier III+/IV 数据中心规范

最佳实践:超融合(HCI)可将计算与存储节点合并,简化管理并提高资源利用率;但对极致性能场景,仍建议计算‑存储分离。

2.2 虚拟化与管理层(Virtualization & Management)

Hypervisor 与容器运行时

类型 优势 典型方案
虚拟机(VM) 安全隔离强,支持热迁移 KVM、Xen、VMware ESXi
容器(轻量虚拟化) 启动快,资源开销小 containerd、CRI‑O、Kata Containers
无虚拟化(裸金属) 极致性能、I/O 直通 Intel VT‑d、PCIe Passthrough

资源编排与调度

  • Nova Scheduler / AWS Placement:根据 CPU、内存、NUMA 拓扑做最优放置
  • 调度插件:GPU 亲和 / 网络带宽感知 / 能耗感知(Green Scheduling)
  • 灾难迁移:冷迁移、实时热迁移(Live Migration)与存储迁移(Storage vMotion)

镜像与模板

  • 镜像仓库:QCOW2、RAW、AMI、VHD
  • Cloud‑Init / Ignition:首启注入元数据,实现无状态配置

2.3 服务接口层(Service Interface)

维度 功能点 说明
API Gateway 统一鉴权、限流、审计 OpenStack Keystone、AWS SigV4
控制面板 Web Console、管理后台 React + Go、Vue + Python Flask
CLI / SDK 自动化脚本、CI/CD 集成 Terraform Provider、AWS CLI、Boto3
Billing & Metering 多租户计量、账单拆分、成本中心 Prom‑QL 采集 + 推送到计费系统

设计要点:API 必须幂等;结合 OpenAPI / Swagger 自动生成 SDK 与文档,降低接入门槛。

2.4 网络与安全层(Networking & Security)

软件定义网络(SDN)

  • Overlay 网络:VxLAN、Geneve;使用 OVS‑DPDK / eBPF Datapath
  • Underlay 网络:BGP‑EVPN,自动路由发布,支持 ECMP

安全组件

组件 职责
VPC / 子网 二层隔离、CIDR 划分
安全组 / ACL 五元组状态包过滤,支持动态规则
分布式防火墙 (DFW) East‑West 流量微分段
KMS / HSM 加密密钥托管,与卷加密、TLS 证书解耦
WAF / Anti‑DDoS L3‑L7 攻击检测与清洗

2.5 运维与监控层(Operations & Monitoring)

分类 工具 / 方法 价值
可观测性 Prometheus + Grafana CloudWatch / Azure Monitor 多维度指标 (CPU、I/O、网络)、自定义业务指标
集中日志 Loki、Elastic Stack、Fluent Bit 日志检索、告警、溯源
分布式追踪 Jaeger、Zipkin、OpenTelemetry API 级延迟分析,定位跨服务瓶颈
CMDB / 资产管理 NetBox、ServiceNow 配置审计,防漂移
自动化运维 Terraform、Ansible、Argo CD IaC + GitOps,减少手工变更
容量 & 成本 Kubecost、AWS Cost Explorer 右置化成本分析、购买 RI / SP 优化
SRE 流程 SLIs / SLOs、Error Budget、Incident Postmortem 系统可靠性闭环改进

落地建议

  1. 三板斧:监控 → 日志 → 告警;先覆盖基础指标,再逐步沉淀业务指标。
  2. 自动修复:结合监控告警触发 Runbook / Lamb‑function,缩短 MTTR。
  3. 混沌工程:定期注入故障(网络延迟、磁盘熔断),验证容灾与报警链路有效性。

小结

  • 物理层决定上限,网络拓扑与供电冗余是底线保障;
  • 虚拟化与管理层掌管资源效率与隔离性;
  • 服务接口层决定易用性与生态能力;
  • 网络与安全层护航多租户隔离、合规与防御;
  • 运维与监控层让 IaaS 从"能跑"走向"可持续运行且可优化"。

三、主要 IaaS 提供商对比

3.1 快速一览

维度 AWS Microsoft Azure Google Cloud Platform (GCP) Alibaba Cloud
全球覆盖 36 Region / 114 AZ,另有4 Region在建 60 + Region / 300 + DC,全球最多 40 Region 已投产,9 在建(总 49) 29 Region / 87 AZ(中国区 56 AZ)
自研计算芯片 Graviton4 (Arm) 已 GA,I8g /I7ie 实例首发 Cobalt 100 (Arm) & Maia 100 AI 加速器 Axion (Arm),首发 C4A 实例 Shenlong CIPU + 异构加速 (Elastic GPU)
AI/ML 专用 Trainium v2、Inferentia v2、NVIDIA H200 NVIDIA H100 / H200、Maia 100 TPU v5p、Axion CPU+GPU 组合 PAI-Basic/PAI-EAS、飞天智算集群
计费优化 Savings Plans / RI,最高 72 % 折扣 Reserved VM / Savings Plan,最高 72 % 折扣 Committed Use Discount (CUD) 55 %+ 折扣 预付费包年包月 + 弹性计费,企业专属账单
混合 / 边缘 Outposts、Local Zones、Wavelength Azure Stack HCI / Arc、Edge Zones Anthos、Google Distributed Cloud Apsara Stack、Local Region
突出优势 产品最丰富、生态最大、自动化成熟 本地化和 Office / AD 集成、政务/机密云完备 大数据 & AI 创新快、价格透明 APAC 布局深、超大规模 e‑commerce 经验
常见劣势 成本模型复杂、学习曲线陡峭 定价规则繁多,控制台体验不一 Region 数少于 Azure,若干服务区域受限 海外 Region 相对有限,生态主要集中在华语市场

阅读技巧:上表展示了可量化指标(Region / AZ、成本折扣)和差异化特征(自研芯片、混合能力)。若需求聚焦 AI 训练,可优先考察"AI/ML 专用"一栏;若关注全球多活,则对比 "全球覆盖"。

3.2 深度解析

3.2.1 计算与自研芯片
  • AWS ------ 第四代 Graviton4 CPU 相比上一代性能提升 30 % 且功耗更低;配合 I8g 实例在 I/O‑密集场景(如 MySQL、Redis)具备最高 65 % 实际存储吞吐提升。citeturn0search4turn0search0
  • Azure ------ Cobalt 100 CPU 面向通用算力,Maia 100 AI 加速器垂直整合至 Azure OpenAI Service,提供端到端一站式训练 / 推理平台。citeturn0search9turn0search13
  • GCP ------ Axion CPU(Neoverse V2 内核)领衔 C4A 系列 VM,官方宣称较同类 Arm 实例性价比提升 ≥ 10 %。citeturn0search10
  • Alibaba Cloud ------ 第四代 Shenlong CIPU + RDMA 800 Gb 架构,将网络 / 存储卸载到智能网卡,GPU 实例 P‑xFG 单机带宽高达 64 Gbps。citeturn0search7
3.2.2 网络与可用区
  • 超大规模 Spine‑Leaf 架构已成标配,但 AWS 在 Local Zone 与 Wavelength Zone 布点最多,适合边缘低时延场景。
  • Azure 以 60 + Region 遥遥领先,并提供国家级主权云(Azure Government / Secret)以满足合规需求。
  • GCP 在海底光缆自建上投入巨大(Dunant、Pacific Light Cable),对延迟敏感的实时分析业务具备优势。
3.2.3 成本与采购模式
模式 AWS Azure GCP
按需 / Spot 秒级计费,Spot 最高 90 % off 分钟计费,Spot 最大 90 % off 秒级计费,Preemptible/Spot 60--91 % off
1/3 年承诺 Savings Plans / RI ≤ 72 % off citeturn3search0 Reserved VM ≤ 72 % off citeturn3search2 CUD ≤ 55 % off (部分内存型 70 %) citeturn3search1

提示:如果负载稳定,优先购买 3 年承诺或混合使用 Savings Plan(AWS)、Flexible CUD (GCP) 以锁定折扣;若工作负载突发且可中断,则 Spot/Preemptible 能显著节省预算。

3.2.4 混合云与边缘策略
  • AWS Outposts 将原生 AWS API 下沉到本地机柜;
  • Azure Arc + Stack HCI 支持 K8s / VM 统一治理,并可将 Azure PaaS 服务投射到本地;
  • Anthos (GCP) 强调多云一致性,支持在 AWS、Azure、裸机上托管;
  • Alibaba Apsara Stack 定位政企私有云,向上兼容飞天公有云生态。
3.2.5 特色与适用场景
需求场景 首选云(建议) 说明
泛互联网 / 电商高并发 AWS / Alibaba 自动扩缩容完善、对象存储生态成熟 S3 / OSS
微软生态 (AD、Office) Azure AAD、Exchange Online、Teams 深度集成
大数据 / AI 原生 GCP BigQuery、TPU、Vertex AI、Axion C4A
APAC 本地服务 Alibaba 中国大陆与东南亚节点密集、价格友好
高合规 / 主权云 Azure Government、AWS GovCloud 地理隔离、FedRAMP / DoD 级别认证

3.3 选择建议

  1. 先需求、后云厂 :将需求拆为 地理性能成本合规 四象限,逐一打分再决定。
  2. 多云不是目的:除非必须规避锁定或做跨境合规,单一云 + DR 更容易控制成本与复杂度。
  3. 关注自研芯片路线图:Arm‑based 实例已成为主流降本手段;提前验证兼容性(指令集、驱动、容器基础镜像)。
  4. 善用 FinOps:上线即打标签、接入账单 API,配合 IaC 做到"谁用谁付";季度审计 RI/Plan 利用率。
  5. 边缘计算要看生态:若重视 5G/MEC,AWS Wavelength 或 Azure Edge Zone 会比自建 POP 更简单。

四、IaaS 的使用场景与优势

4.1 弹性伸缩的 Web 应用

业务痛点

  • 访问流量呈 "早晚高峰 + 节假日激增" 的长尾分布
  • 传统机房必须按峰值采购,导致低谷时服务器闲置

IaaS 解决方案

  1. Auto Scaling Group (ASG) 按 CPU、QPS 或自定义指标自动增减实例
  2. 弹性负载均衡 (ELB/ALB) 实时探活、跨可用区流量分发
  3. 无状态化 + 镜像/容器 启动脚本 + AMI 或 Docker Image 秒级扩容
  4. Global Accelerator / CDN 就近接入,降低首字节时延

优势总结

  • 成本随流量线性变化:空闲时仅保留最小实例池
  • 秒级扩容:应对秒杀 / 抢票等突发洪峰
  • 高可用:多 AZ 或多 Region 部署,单点故障自动隔离

4.2 批量计算与高性能计算 (HPC)

典型场景

  • 生物制药分子动力学模拟、基因测序比对
  • 金融蒙特卡洛、量化回测
  • 影视渲染、CFD 流体力学

IaaS 能力点

组件 价值
大规模并行队列 (Slurm、AWS Batch、GCP Batch) 数万核作业调度,支持 Spot/Preemptible 降本
RDMA 25--800 Gb 低于 5 µs 延迟,跨节点超高速互连
GPU / FPGA 裸金属 H200 / MI300X / Gaudi2 按需租用,峰值 > 2 PFLOPS
弹性文件系统 (Lustre、FSx for Lustre) TB/s 级吞吐,秒级挂载到数千节点

优势总结

  • 零前置 CAPEX:不必购买昂贵 InfiniBand 交换和 GPU 集群
  • 作业结束即释放:批量计算结束后自动关机,节省 90 %+
  • 快速试错:可同时启动多组超参实验,加速科研迭代

4.3 灾备与容灾 (DR)

风险场景

  • 机房火灾、断电、光缆中断
  • 逻辑误删 / 勒索软件攻击

典型架构

IaaS 特性

  1. 跨 AZ 复制 :块存储/数据库双活或半同步复制
  2. 云快照 & Lifecycle :版本化 + 备份保留策略,7--365 天合规归档
  3. Pilot‑Light / Warm‑Standby :异地仅保留最小核心服务,故障时自动扩容
  4. DNS / Global Load Balancer :健康探测 + 30 s 级切流

优势总结

  • 分钟级 RTO / RPO 避免重大营收损失
  • 按需付费 的 Warm‑Standby 仅需 10--15 % 持续成本
  • 合规得分:满足 ISO 22301、金融监管的异地容灾要求

4.4 开发与测试环境

痛点

  • 多项目并行,版本冲突;测试集群长期闲置
  • 开发‑UAT‑生产环境配置漂移导致"Works on my machine"

IaaS 打法

  1. Infrastructure as Code (IaC) :Terraform/CloudFormation 一键部署完整堆栈
  2. 按环境隔离的 VPC / Namespace :避免相互污染,自动释放公网 IP
  3. 自助式 Sandbox :开发者通过 Service Catalog 或 Backstage 自助申请/销毁
  4. Spot + 小规格实例 :跑 CI/CD、集成测试,成本 ≤ 25 %

优势总结

  • 加快上线:新分支触发 CI,动态起容器/VM 进行 E2E 测试
  • 零配置漂移:同一模板用于 Staging 与 Production
  • 精细计费:成本归集到代码分支 / 项目标签,助力 FinOps

总体价值 :IaaS 通过"弹性 + 自动化 + 广域基础设施" 让企业能 按需获取全球级算力、存储与网络,在成本、性能与可靠性之间获得最优平衡,并加速创新与业务迭代。

五、IaaS 的挑战与最佳实践

理解常见"坑",才能真正跑好 IaaS。以下按 5 大挑战拆解成 成因 → 风险 → best practice,并给出可落地的工具 / 策略。

5.1 成本不可控 (Cost Overrun)

成因 风险
• 按需实例长期运行但无人使用 • "先上再优化",随手开 ≥ XL/高配实例 • 孤儿快照 / 异地流量杂费 预算爆表、ROI 下滑,项目被 CFO "问责"

最佳实践

  1. FinOps 三步:可见 (Visibility) → 优化 (Optimization) → 运营 (Operation)。
  2. 账单标签策略 :要求每个 VPC / VM / S3 Bucket 在 Terraform 中强制打 CostCenter, Project, Env;匿名资源直接在 CI 阻断。
  3. 自动关停策略:无流量 ASG 夜间缩到零;非生产实例利用 Instance Scheduler / Lambda 定时关机。
  4. Commit+Spot 拼单
    - 稳定基线 70 % → 3 年 RI / Savings Plan / CUD
    - 突发容量 30 % → Spot / Preemptible
  5. 月度 RI 利用率审计:< 95 % 自动在采购系统触发工单调整或转卖(AWS RI Marketplace)。

5.2 安全隔离 (Segmentation & Zero Trust)

成因 风险
• 多租户混布,缺乏网络微分段 • IAM 权限宽松 (Wildcard *) • 默认开启公网 SSH / RDP 数据外泄、横向移动、合规罚款

最佳实践

  1. 多层隔离模型
    • 租户级:独立 VPC 或专属 Account / Project;
    • 服务级:安全组 + NACL;
    • 进程级:容器 sandbox / SELinux / AppArmor。
  2. 零信任网络 (ZTNA)
    • 全流量走 mTLS;
    • 每条南北向 / 东西向流量经 Policy Engine 实时 RBAC 检查。
  3. IAM 最小权限
    • 生产账户拒绝 Console 登录,强制 SAML + MFA;
    • 权限评审 (Policy Analyzer) 每季度轮动。
  4. 合规映射:将 ISO 27001 / PCI‑DSS 控制条款映射到具体云服务 (KMS, CloudTrail, Config) 并自动检测漂移。

5.3 配置漂移 (Configuration Drift)

成因 风险
• 运维人员直接在控制台手改安全组 • 脚本 vs IaC 模板不一致 "昨天还能访问,今天 500" 追溯困难,发布回滚成本高

最佳实践

  1. IaC 一切皆代码:Terraform / Pulumi / CloudFormation 为唯一真源;禁用手工改动(通过 IAM Deny 或 AWS Service Control Policies)。
  2. GitOps 工作流:Merge Request = 基础设施变更;PR 模板强制关联工单 & 风险评估。
  3. 资源漂移检测
    • terraform plan 在 CI 每日跑一次 dry‑run;
    • AWS Config / GCP Config Sync 持续比对并标红偏差。
  4. 自动修正:检测到漂移 → 触发 Pipeline 回滚到基准 Commit(或生成 PR 修正)。

5.4 监控与告警漏报 (Observability Gaps)

成因 风险
• 只监控 CPU,不监控饱和度 (Saturation) • 告警阈值硬编码,噪声大 → SRE 靠忽略求生 SLA 下降、错误蔓延未及时止血

最佳实践

  1. 四个黄金信号 + RED:Latency / Traffic / Errors / Saturation + (Rate‑Error‑Duration) for API。
  2. 多层监控
    • 基础设施:CloudWatch / Stackdriver + Node Exporter;
    • 平台:K8s Metrics Server、Vertical Pod Autoscaler;
    • 业务:OpenTelemetry 自动埋点。
  3. 动态阈值 :利用 Prometheus predict_linear 或 AWS CloudWatch Anomaly Detection。
  4. 告警分级 (P1‑P4):结合 SLO + Error Budget;P1 要求 5 min 确认,P4 仅汇总日报。
  5. 事件驱动自动修复:告警→ Lambda/Runbook 自动伸缩、热迁移或重启容器,降低 MTTR。

5.5 数据一致性与备份 (Data Consistency & Backup)

场景 风险
• 分布式存储跨 AZ 异步复制 • 备份脚本与真实业务 RPO 偏差 脏读、数据丢失、勒索恢复失败

最佳实践

  1. 三层备份
    • 热备:主从或多副本,秒级 RPO;
    • 快照:EBS / PD 快照 + 生命周期管理 (7‑30 天);
    • 冷归档:Glacier / Deep Archive ≥ 半年。
  2. 一致性协议:关键业务选择强一致 (Paxos/Raft) 数据库;跨可用区同步复制 (Aurora Global DB) RPO< 1 s。
  3. "备份即代码":备份策略 (周期、加密、保留) 以 HCL / YAML 管理,并纳入 CI 审核。
  4. 定期演练
    • Table‑top:流程走查;
    • Black‑Start:全 Region 故障 + 恢复;
    • 结果输出 Postmortem + 改进清单。
  5. 勒索防护:开启对象锁定 (S3 Object Lock / OSS WORM),备份仓库隔离在只写账户。

小结

IaaS 成熟度 = 「技术栈」 × 「治理体系」

通过 FinOps、Zero Trust、IaC/GitOps、可观测性与韧性设计 五条主线持续演进,才能避免"上云省 CapEx → 运维更复杂 → 成本反涨"的悖论,实现 高弹性、可审计、低成本、合规可靠 的现代基础设施。

六、实战示例:使用 Terraform 部署 IaaS 资源

目标 :在 AWS 创建"一键可复用"的 VPC + 公私子网 + NAT 网关 + Auto Scaling Web 集群。同一思路可平移到 Azure、GCP。

6.1 目录结构

复制代码
terraform-iaas-demo/
├── modules/
│   ├── vpc/
│   │   ├── main.tf      # VPC + 子网 + 网关
│   │   ├── variables.tf
│   │   └── outputs.tf
│   ├── asg/
│   │   ├── main.tf      # Launch Template + ASG + ALB
│   │   ├── variables.tf
│   │   └── outputs.tf
│   └── sg/
│       └── main.tf      # 通用安全组
├── envs/
│   ├── dev/
│   │   ├── main.tf      # 调用模块
│   │   └── terraform.tfvars
│   └── prod/
│       └── ...
└── versions.tf          # Terraform & Provider 版本锁

6.2 versions.tf

hcl 复制代码
terraform {
  required_version = ">= 1.7.0"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.50"
    }
  }
}

provider "aws" {
  region = var.aws_region
}

6.3 VPC 模块(modules/vpc/main.tf)

hcl 复制代码
resource "aws_vpc" "this" {
  cidr_block           = var.cidr
  enable_dns_hostnames = true
  tags = { Name = "${var.name}-vpc" }
}

resource "aws_subnet" "public" {
  count             = 2
  vpc_id            = aws_vpc.this.id
  cidr_block        = cidrsubnet(var.cidr, 4, count.index)
  availability_zone = element(var.azs, count.index)
  map_public_ip_on_launch = true
  tags = { Name = "${var.name}-public-${count.index}" }
}

resource "aws_subnet" "private" {
  count             = 2
  vpc_id            = aws_vpc.this.id
  cidr_block        = cidrsubnet(var.cidr, 4, count.index + 2)
  availability_zone = element(var.azs, count.index)
  tags = { Name = "${var.name}-private-${count.index}" }
}

resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.this.id
}

resource "aws_route_table" "public" {
  vpc_id = aws_vpc.this.id
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.igw.id
  }
}

resource "aws_route_table_association" "public" {
  count          = 2
  subnet_id      = aws_subnet.public[count.index].id
  route_table_id = aws_route_table.public.id
}

resource "aws_nat_gateway" "nat" {
  allocation_id = aws_eip.nat.id
  subnet_id     = aws_subnet.public[0].id
}

resource "aws_eip" "nat" {
  domain = "vpc"
}

resource "aws_route_table" "private" {
  vpc_id = aws_vpc.this.id
  route {
    cidr_block     = "0.0.0.0/0"
    nat_gateway_id = aws_nat_gateway.nat.id
  }
}

resource "aws_route_table_association" "private" {
  count          = 2
  subnet_id      = aws_subnet.private[count.index].id
  route_table_id = aws_route_table.private.id
}

variables.tf

hcl 复制代码
variable "name"       { type = string }
variable "cidr"       { type = string }
variable "azs"        { type = list(string) }

6.4 安全组模块(modules/sg/main.tf)

hcl 复制代码
resource "aws_security_group" "web_sg" {
  name        = "${var.name}-web"
  description = "Allow HTTP & SSH"
  vpc_id      = var.vpc_id

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = [var.cidr_admin]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = { Name = "${var.name}-web-sg" }
}

variable "name"       { type = string }
variable "vpc_id"     { type = string }
variable "cidr_admin" { type = string }

6.5 Auto Scaling 模块(modules/asg/main.tf)

hcl 复制代码
data "aws_ami" "al2" {
  most_recent = true
  owners      = ["amazon"]
  filter {
    name   = "name"
    values = ["amzn2-ami-kernel-*-hvm-*-x86_64-gp2"]
  }
}

resource "aws_launch_template" "lt" {
  name_prefix   = "${var.name}-lt-"
  image_id      = data.aws_ami.al2.id
  instance_type = "t3.micro"
  vpc_security_group_ids = [var.sg_id]

  user_data = base64encode(<<EOF
#!/bin/bash
yum install -y httpd
echo "<h1>Hello from $(hostname)</h1>" > /var/www/html/index.html
systemctl enable httpd --now
EOF
  )
}

resource "aws_autoscaling_group" "asg" {
  name_prefix          = "${var.name}-asg-"
  desired_capacity     = 2
  min_size             = 2
  max_size             = 4
  vpc_zone_identifier  = var.private_subnet_ids
  launch_template {
    id      = aws_launch_template.lt.id
    version = "$Latest"
  }
  target_group_arns = [aws_lb_target_group.tg.arn]
  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_lb" "alb" {
  name               = "${var.name}-alb"
  load_balancer_type = "application"
  subnets            = var.public_subnet_ids
  security_groups    = [var.sg_id]
}

resource "aws_lb_target_group" "tg" {
  name     = "${var.name}-tg"
  port     = 80
  protocol = "HTTP"
  vpc_id   = var.vpc_id
}

resource "aws_lb_listener" "listener" {
  load_balancer_arn = aws_lb.alb.arn
  port              = 80
  protocol          = "HTTP"
  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.tg.arn
  }
}

outputs = {
  alb_dns = aws_lb.alb.dns_name
}

variables.tf

hcl 复制代码
variable "name"               { type = string }
variable "vpc_id"             { type = string }
variable "sg_id"              { type = string }
variable "public_subnet_ids"  { type = list(string) }
variable "private_subnet_ids" { type = list(string) }

6.6 环境目录(envs/dev/main.tf)

hcl 复制代码
module "vpc" {
  source = "../../modules/vpc"
  name   = var.project
  cidr   = "10.0.0.0/16"
  azs    = ["us-east-1a", "us-east-1b"]
}

module "sg" {
  source     = "../../modules/sg"
  name       = var.project
  vpc_id     = module.vpc.vpc_id
  cidr_admin = "203.0.113.0/24"
}

module "asg" {
  source              = "../../modules/asg"
  name                = var.project
  vpc_id              = module.vpc.vpc_id
  sg_id               = module.sg.web_sg_id
  public_subnet_ids   = module.vpc.public_subnet_ids
  private_subnet_ids  = module.vpc.private_subnet_ids
}

output "alb_dns" {
  value = module.asg.alb_dns
}

terraform.tfvars

hcl 复制代码
project    = "demo"
aws_region = "us-east-1"

6.7 执行流程

bash 复制代码
# 1. 初始化插件
terraform init

# 2. 查看计划,确保所有资源符合预期
terraform plan -out tf.plan

# 3. 应用变更
terraform apply tf.plan

# 4. 验证
curl http://$(terraform output -raw alb_dns)

6.8 最佳实践清单

类别 建议
状态文件 使用 remote backend "s3" + DynamoDB 加锁,避免多人写冲突
变量管理 敏感字段(DB 密码、API Key)放 terraform.tfvars + git‑crypt 或 SSM Parameter Store
模块化 将 VPC、SG、ASG 拆分成独立模块,支持多环境复用
策略管控 Sentinel / OPA 定义合规策略:强制标签、禁止公网 0.0.0.0/0 入站
CI/CD GitHub Actions / GitLab CI:terraform fmt → validate → plan → OPA → apply
成本可见 每次 plan 用 infracost 预估费用,PR 评论自动展示变化

七、结语

IaaS 把传统机房的"机架、电力、网络"抽象成 可编程、可弹性、可计量 的云化资源,使企业能够:

  • 按需获取 全球算力与存储,快速响应业务高峰;
  • 用 IaC + GitOps 把基础设施纳入软件生命周期,减少人工配置与漂移;
  • 借助 FinOps 与零信任 持续优化成本、强化安全与合规;
  • 统一 Dev/Test→Prod 的环境与运维流程,加速创新交付。

然而"上云"只是起点------真正的价值来自 治理体系、自动化与文化。唯有持续迭代 FinOps、SRE、DevSecOps 等能力,才能让 IaaS 成为业务的稳健基座,而非新的技术债务。

八、延伸阅读

  1. 官方文档

    • AWS Well‑Architected Framework
    • Microsoft Azure Architecture Center
    • Google Cloud Architecture Framework
    • Alibaba Cloud Best Practices
  2. 开源与社区

    • Terraform Guides & Examples -- HashiCorp Learn
    • OpenStack Operations Guide -- O'Reilly (免费电子书)
    • FinOps Framework -- finops.org
    • CNCF Cloud Native Security Whitepaper
  3. 书籍推荐

    • 《Cloud FinOps:Maximizing Your Cloud Investment》
    • 《Site Reliability Engineering》
    • 《Designing Data‑Intensive Applications》
    • 《Infrastructure as Code, 2nd Edition》
  4. 实践博客 / 会议

    • re:Invent、Microsoft Ignite、Google Cloud Next
    • AWS Architecture Blog、Azure Updates、GCP Cloud Blog
    • 阿里云栖社区、KubeCon & CloudNativeCon
相关推荐
ACEEE12229 分钟前
解读DeepSeek-V3.2-Exp:基于MLA架构的Lightning Index如何重塑长上下文效率
人工智能·深度学习·算法·架构·deep
失散132 小时前
分布式专题——26 BIO、NIO编程与直接内存、零拷贝深入辨析
java·分布式·rpc·架构·nio·零拷贝
IT小番茄4 小时前
Kubernetes云平台管理实战:故障自愈实战(四)
架构
可触的未来,发芽的智生5 小时前
新奇特:负权重橡皮擦,让神经网络学会主动遗忘
人工智能·python·神经网络·算法·架构
数据智能老司机5 小时前
建构 AI Agent 应用——保护代理式系统
架构·llm·agent
kebeiovo14 小时前
muduo网络库事件驱动模型的实现与架构
网络·架构
brzhang17 小时前
AI Agent 干不好活,不是它笨,告诉你一个残忍的现实,是你给他的工具太难用了
前端·后端·架构
brzhang17 小时前
一文说明白为什么现在 AI Agent 都把重点放在上下文工程(context engineering)上?
前端·后端·架构
罗亚方舟19 小时前
微服务故障排查
微服务·云原生·架构
深度学习实战训练营19 小时前
MnasNet:NAS 自动架构搜索
架构