一、什么是 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 的核心能力
- 弹性计算
- 按需创建虚拟机(VM)或裸金属服务器,支持水平/纵向扩缩容
- 多实例规格:通用型、计算优化型、内存优化型、GPU、FPGA
- 弹性存储
- 块存储(EBS/Cinder):低延迟、高 IOPS,可快照回滚
- 对象存储(S3/Swift):海量文件,高可用,跨区复制
- 软件定义网络(SDN)
- 虚拟私有云(VPC)、子网、路由表、NAT、弹性公网 IP
- 安全组、网络 ACL,实现微分段和零信任
- 安全与合规
- IAM 身份与访问控制、KMS 密钥管理、WAF、DDoS 防护
- 支持 PCI‑DSS、ISO 27001、GDPR 等合规认证
- 自动化与可观测
- 基础设施即代码(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 为企业带来的价值
- CapEx → OpEx:将一次性硬件投资转化为按需运营支出。
- 业务弹性:快速应对流量高峰或突发活动,提升用户体验。
- 全球覆盖:多 Region 部署,加速全球访问并提升容灾等级。
- 聚焦核心业务:基础设施运维外包给云厂商,团队专注产品创新。
- 技术创新加速:随取随用的 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 | 系统可靠性闭环改进 |
落地建议:
- 三板斧:监控 → 日志 → 告警;先覆盖基础指标,再逐步沉淀业务指标。
- 自动修复:结合监控告警触发 Runbook / Lamb‑function,缩短 MTTR。
- 混沌工程:定期注入故障(网络延迟、磁盘熔断),验证容灾与报警链路有效性。
小结
- 物理层决定上限,网络拓扑与供电冗余是底线保障;
- 虚拟化与管理层掌管资源效率与隔离性;
- 服务接口层决定易用性与生态能力;
- 网络与安全层护航多租户隔离、合规与防御;
- 运维与监控层让 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 % 实际存储吞吐提升。citeturn0search4turn0search0
- Azure ------ Cobalt 100 CPU 面向通用算力,Maia 100 AI 加速器垂直整合至 Azure OpenAI Service,提供端到端一站式训练 / 推理平台。citeturn0search9turn0search13
- GCP ------ Axion CPU(Neoverse V2 内核)领衔 C4A 系列 VM,官方宣称较同类 Arm 实例性价比提升 ≥ 10 %。citeturn0search10
- Alibaba Cloud ------ 第四代 Shenlong CIPU + RDMA 800 Gb 架构,将网络 / 存储卸载到智能网卡,GPU 实例 P‑xFG 单机带宽高达 64 Gbps。citeturn0search7
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 citeturn3search0 | Reserved VM ≤ 72 % off citeturn3search2 | CUD ≤ 55 % off (部分内存型 70 %) citeturn3search1 |
提示:如果负载稳定,优先购买 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 选择建议
- 先需求、后云厂 :将需求拆为 地理 、性能 、成本 、合规 四象限,逐一打分再决定。
- 多云不是目的:除非必须规避锁定或做跨境合规,单一云 + DR 更容易控制成本与复杂度。
- 关注自研芯片路线图:Arm‑based 实例已成为主流降本手段;提前验证兼容性(指令集、驱动、容器基础镜像)。
- 善用 FinOps:上线即打标签、接入账单 API,配合 IaC 做到"谁用谁付";季度审计 RI/Plan 利用率。
- 边缘计算要看生态:若重视 5G/MEC,AWS Wavelength 或 Azure Edge Zone 会比自建 POP 更简单。
四、IaaS 的使用场景与优势
4.1 弹性伸缩的 Web 应用
业务痛点
- 访问流量呈 "早晚高峰 + 节假日激增" 的长尾分布
- 传统机房必须按峰值采购,导致低谷时服务器闲置
IaaS 解决方案
- Auto Scaling Group (ASG) 按 CPU、QPS 或自定义指标自动增减实例
- 弹性负载均衡 (ELB/ALB) 实时探活、跨可用区流量分发
- 无状态化 + 镜像/容器 启动脚本 + AMI 或 Docker Image 秒级扩容
- 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 特性
- 跨 AZ 复制 :块存储/数据库双活或半同步复制
- 云快照 & Lifecycle :版本化 + 备份保留策略,7--365 天合规归档
- Pilot‑Light / Warm‑Standby :异地仅保留最小核心服务,故障时自动扩容
- DNS / Global Load Balancer :健康探测 + 30 s 级切流
优势总结
- 分钟级 RTO / RPO 避免重大营收损失
- 按需付费 的 Warm‑Standby 仅需 10--15 % 持续成本
- 合规得分:满足 ISO 22301、金融监管的异地容灾要求
4.4 开发与测试环境
痛点
- 多项目并行,版本冲突;测试集群长期闲置
- 开发‑UAT‑生产环境配置漂移导致"Works on my machine"
IaaS 打法
- Infrastructure as Code (IaC) :Terraform/CloudFormation 一键部署完整堆栈
- 按环境隔离的 VPC / Namespace :避免相互污染,自动释放公网 IP
- 自助式 Sandbox :开发者通过 Service Catalog 或 Backstage 自助申请/销毁
- Spot + 小规格实例 :跑 CI/CD、集成测试,成本 ≤ 25 %
优势总结
- 加快上线:新分支触发 CI,动态起容器/VM 进行 E2E 测试
- 零配置漂移:同一模板用于 Staging 与 Production
- 精细计费:成本归集到代码分支 / 项目标签,助力 FinOps
总体价值 :IaaS 通过"弹性 + 自动化 + 广域基础设施" 让企业能 按需获取全球级算力、存储与网络,在成本、性能与可靠性之间获得最优平衡,并加速创新与业务迭代。
五、IaaS 的挑战与最佳实践
理解常见"坑",才能真正跑好 IaaS。以下按 5 大挑战拆解成 成因 → 风险 → best practice,并给出可落地的工具 / 策略。
5.1 成本不可控 (Cost Overrun)
成因 | 风险 |
---|---|
• 按需实例长期运行但无人使用 • "先上再优化",随手开 ≥ XL/高配实例 • 孤儿快照 / 异地流量杂费 | 预算爆表、ROI 下滑,项目被 CFO "问责" |
最佳实践
- FinOps 三步:可见 (Visibility) → 优化 (Optimization) → 运营 (Operation)。
- 账单标签策略 :要求每个 VPC / VM / S3 Bucket 在 Terraform 中强制打
CostCenter
,Project
,Env
;匿名资源直接在 CI 阻断。 - 自动关停策略:无流量 ASG 夜间缩到零;非生产实例利用 Instance Scheduler / Lambda 定时关机。
- Commit+Spot 拼单 :
- 稳定基线 70 % → 3 年 RI / Savings Plan / CUD
- 突发容量 30 % → Spot / Preemptible - 月度 RI 利用率审计:< 95 % 自动在采购系统触发工单调整或转卖(AWS RI Marketplace)。
5.2 安全隔离 (Segmentation & Zero Trust)
成因 | 风险 |
---|---|
• 多租户混布,缺乏网络微分段 • IAM 权限宽松 (Wildcard * ) • 默认开启公网 SSH / RDP |
数据外泄、横向移动、合规罚款 |
最佳实践
- 多层隔离模型
- 租户级:独立 VPC 或专属 Account / Project;
- 服务级:安全组 + NACL;
- 进程级:容器 sandbox / SELinux / AppArmor。
- 零信任网络 (ZTNA)
- 全流量走 mTLS;
- 每条南北向 / 东西向流量经 Policy Engine 实时 RBAC 检查。
- IAM 最小权限
- 生产账户拒绝 Console 登录,强制 SAML + MFA;
- 权限评审 (Policy Analyzer) 每季度轮动。
- 合规映射:将 ISO 27001 / PCI‑DSS 控制条款映射到具体云服务 (KMS, CloudTrail, Config) 并自动检测漂移。
5.3 配置漂移 (Configuration Drift)
成因 | 风险 |
---|---|
• 运维人员直接在控制台手改安全组 • 脚本 vs IaC 模板不一致 | "昨天还能访问,今天 500" 追溯困难,发布回滚成本高 |
最佳实践
- IaC 一切皆代码:Terraform / Pulumi / CloudFormation 为唯一真源;禁用手工改动(通过 IAM Deny 或 AWS Service Control Policies)。
- GitOps 工作流:Merge Request = 基础设施变更;PR 模板强制关联工单 & 风险评估。
- 资源漂移检测 :
terraform plan
在 CI 每日跑一次 dry‑run;- AWS Config / GCP Config Sync 持续比对并标红偏差。
- 自动修正:检测到漂移 → 触发 Pipeline 回滚到基准 Commit(或生成 PR 修正)。
5.4 监控与告警漏报 (Observability Gaps)
成因 | 风险 |
---|---|
• 只监控 CPU,不监控饱和度 (Saturation) • 告警阈值硬编码,噪声大 → SRE 靠忽略求生 | SLA 下降、错误蔓延未及时止血 |
最佳实践
- 四个黄金信号 + RED:Latency / Traffic / Errors / Saturation + (Rate‑Error‑Duration) for API。
- 多层监控
- 基础设施:CloudWatch / Stackdriver + Node Exporter;
- 平台:K8s Metrics Server、Vertical Pod Autoscaler;
- 业务:OpenTelemetry 自动埋点。
- 动态阈值 :利用 Prometheus
predict_linear
或 AWS CloudWatch Anomaly Detection。 - 告警分级 (P1‑P4):结合 SLO + Error Budget;P1 要求 5 min 确认,P4 仅汇总日报。
- 事件驱动自动修复:告警→ Lambda/Runbook 自动伸缩、热迁移或重启容器,降低 MTTR。
5.5 数据一致性与备份 (Data Consistency & Backup)
场景 | 风险 |
---|---|
• 分布式存储跨 AZ 异步复制 • 备份脚本与真实业务 RPO 偏差 | 脏读、数据丢失、勒索恢复失败 |
最佳实践
- 三层备份 :
- 热备:主从或多副本,秒级 RPO;
- 快照:EBS / PD 快照 + 生命周期管理 (7‑30 天);
- 冷归档:Glacier / Deep Archive ≥ 半年。
- 一致性协议:关键业务选择强一致 (Paxos/Raft) 数据库;跨可用区同步复制 (Aurora Global DB) RPO< 1 s。
- "备份即代码":备份策略 (周期、加密、保留) 以 HCL / YAML 管理,并纳入 CI 审核。
- 定期演练
- Table‑top:流程走查;
- Black‑Start:全 Region 故障 + 恢复;
- 结果输出 Postmortem + 改进清单。
- 勒索防护:开启对象锁定 (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
}
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
}
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 成为业务的稳健基座,而非新的技术债务。
八、延伸阅读
-
官方文档
- AWS Well‑Architected Framework
- Microsoft Azure Architecture Center
- Google Cloud Architecture Framework
- Alibaba Cloud Best Practices
-
开源与社区
- Terraform Guides & Examples -- HashiCorp Learn
- OpenStack Operations Guide -- O'Reilly (免费电子书)
- FinOps Framework -- finops.org
- CNCF Cloud Native Security Whitepaper
-
书籍推荐
- 《Cloud FinOps:Maximizing Your Cloud Investment》
- 《Site Reliability Engineering》
- 《Designing Data‑Intensive Applications》
- 《Infrastructure as Code, 2nd Edition》
-
实践博客 / 会议
- re:Invent、Microsoft Ignite、Google Cloud Next
- AWS Architecture Blog、Azure Updates、GCP Cloud Blog
- 阿里云栖社区、KubeCon & CloudNativeCon