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
相关推荐
TMT星球2 小时前
岚图L3智能架构发布,9大首发新技术引领电动车变革
架构
zhu_zhu_xia4 小时前
C86国产x86兼容架构介绍和应用场景分析
架构
佳腾_5 小时前
【消息队列RocketMQ】一、RocketMQ入门核心概念与架构解析
中间件·架构·消息队列·云计算·rocketmq
猿java8 小时前
10种常见的架构风格,你用过几种?
java·分布式·架构
tk1033319 小时前
大模型探秘–AI 感知世界:从对话到掌控的交互革命
架构
LemonDu10 小时前
线上救急-AWS限频
后端·算法·架构
京东云开发者10 小时前
循序渐进搭建复杂B端系统整洁架构
架构
uhakadotcom10 小时前
Ghidra:NSA出品的免费逆向工程利器,轻松分析二进制程序
面试·架构·github
uhakadotcom11 小时前
Chroma向量数据库:简单易懂的基础介绍与实战示例
面试·架构·github