Terraform实战15:多云实践——AWS + 阿里云

在这里插入图片描述

本篇目标

学会用Terraform同时管理多朵云(AWS + 阿里云),理解多Provider配置和alias的使用。这对应你工作中管理三朵云的实际场景。

学完本篇你将掌握:

  • 多Provider配置(同时使用AWS和阿里云)
  • Provider alias(同一云的多区域配置)
  • sensitive 变量(敏感信息不显示)
  • 多云资源的命名规范
  • AWS资源和阿里云资源的对应关系

前置条件

  • 理解Provider的配置方式
  • 有阿里云账号和AK/SK(如果要实际执行)

多云Terraform的核心思路

terraform {
  required_providers {
    aws      = { source = "hashicorp/aws" }       # AWS Provider
    alicloud = { source = "aliyun/alicloud" }     # 阿里云 Provider
  }
}

# 配置各云的连接信息
provider "aws" { region = "us-east-1" }
provider "alicloud" { region = "cn-shanghai" }

# AWS资源用 aws_ 前缀
resource "aws_vpc" "xxx" { ... }

# 阿里云资源用 alicloud_ 前缀
resource "alicloud_vpc" "xxx" { ... }

就这么简单——在一个项目中声明多个Provider,各自的资源用各自的前缀。


AWS与阿里云资源对照

概念AWS阿里云Terraform类型
虚拟网络VPCVPCaws_vpc / alicloud_vpc
子网SubnetVSwitchaws_subnet / alicloud_vswitch
安全组Security GroupSecurity Groupaws_security_group / alicloud_security_group
云服务器EC2ECSaws_instance / alicloud_instance
负载均衡ALB/NLBSLB/ALBaws_lb / alicloud_slb_load_balancer
数据库RDSRDSaws_db_instance / alicloud_db_instance
对象存储S3OSSaws_s3_bucket / alicloud_oss_bucket
K8s集群EKSACKaws_eks_cluster / alicloud_cs_managed_kubernetes

完整代码

main.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    alicloud = {
      source  = "aliyun/alicloud"
      version = "~> 1.220"
    }
  }
  required_version = ">= 1.0"
}

# AWS Provider
provider "aws" {
  region = var.aws_region
}

# 阿里云 Provider
provider "alicloud" {
  region     = var.alicloud_region
  access_key = var.alicloud_access_key
  secret_key = var.alicloud_secret_key
}

# --- AWS资源 ---
resource "aws_vpc" "aws_vpc" {
  cidr_block = "10.0.0.0/16"
  tags = {
    Name  = "tf-practice-aws-vpc"
    Cloud = "AWS"
  }
}

resource "aws_subnet" "aws_subnet" {
  vpc_id     = aws_vpc.aws_vpc.id
  cidr_block = "10.0.1.0/24"
  tags = {
    Name  = "tf-practice-aws-subnet"
    Cloud = "AWS"
  }
}

# --- 阿里云资源 ---
resource "alicloud_vpc" "ali_vpc" {
  vpc_name   = "tf-practice-ali-vpc"
  cidr_block = "172.16.0.0/16"
  tags = {
    Name  = "tf-practice-ali-vpc"
    Cloud = "Alicloud"
  }
}

resource "alicloud_vswitch" "ali_vswitch" {
  vpc_id       = alicloud_vpc.ali_vpc.id
  cidr_block   = "172.16.1.0/24"
  zone_id      = "${var.alicloud_region}-a"
  vswitch_name = "tf-practice-ali-vswitch"
}

variables.tf

variable "aws_region" {
  default = "us-east-1"
}

variable "alicloud_region" {
  default = "cn-shanghai"
}

# 【新概念】sensitive = true
# plan和apply时不会显示这个变量的值
variable "alicloud_access_key" {
  type      = string
  sensitive = true
}

variable "alicloud_secret_key" {
  type      = string
  sensitive = true
}

Provider alias(同一云多区域)

# 默认的AWS Provider(us-east-1)
provider "aws" {
  region = "us-east-1"
}

# 另一个区域的AWS Provider
provider "aws" {
  alias  = "us_west"         # 设置别名
  region = "us-west-2"
}

# 使用默认Provider
resource "aws_vpc" "east" {
  cidr_block = "10.0.0.0/16"
}

# 使用alias Provider(必须显式指定)
resource "aws_vpc" "west" {
  provider   = aws.us_west    # 指定用哪个provider
  cidr_block = "10.1.0.0/16"
}

你工作中的场景: 同时管理AWS(海外) + 腾讯云(国内) + 阿里云(国内),每朵云一个Provider,必要时用alias区分区域。


多云项目结构建议

infrastructure/
├── modules/
│   ├── aws-vpc/          # AWS专用VPC模块
│   ├── alicloud-vpc/     # 阿里云专用VPC模块
│   └── common/           # 跨云通用逻辑
├── environments/
│   ├── aws-prod/         # AWS生产环境
│   ├── ali-prod/         # 阿里云生产环境
│   └── multi-cloud/      # 多云联合管理
└── .gitlab-ci.yml

或者按职责分:

infrastructure/
├── networking/           # 所有云的网络(VPC、专线等)
├── compute/              # 所有云的计算(EKS、ACK等)
└── data/                 # 所有云的数据(RDS等)

sensitive变量

variable "alicloud_secret_key" {
  type      = string
  sensitive = true    # 标记敏感
}

效果:

terraform plan
# 输出中显示:
# alicloud_secret_key = (sensitive value)    ← 不会显示明文

延伸思考:面试常见问题

面试问题答案要点
你们多云怎么管理的?Terraform多Provider配置,每朵云一个Provider,共用模块设计
同一个Provider怎么配多个区域?用alias,资源通过provider参数指定用哪个配置
多云的state怎么管?按环境/按云分离state,存到各自云的远程存储
敏感变量怎么处理?sensitive=true + CI Variables + 不输出明文
AWS和阿里云的资源对应关系?VPC=VPC, Subnet=VSwitch, EC2=ECS, S3=OSS, EKS=ACK

费用说明

本篇只展示代码结构和配置,不实际apply(需要阿里云AK),费用为0

如果你想实际执行:

  • AWS VPC:免费
  • 阿里云VPC + VSwitch:免费

小结

本篇核心收获:

  1. 多Provider配置:在terraform块中声明多个provider,各用各的
  2. Provider alias:同一云多区域时用alias区分
  3. 资源前缀:aws_ = AWS资源,alicloud_ = 阿里云资源
  4. sensitive变量:敏感信息不在输出中显示
  5. 多云对应关系:VPC↔VPC, Subnet↔VSwitch, EC2↔ECS
  6. 这跟你的工作直接相关——你管AWS+腾讯云+阿里云,Terraform能统一管理

系列总结

恭喜!15篇Terraform实战系列全部完成 🎉

你现在具备的Terraform能力:

阶段能力
入门(01-04)能写基础的VPC/EC2,理解变量、state、data source
模块化(05-07)能设计可复用模块,管理多环境,使用社区模块
实战(08-11)能创建EKS、ALB、RDS,搭建完整三层架构
进阶(12-15)能做CI/CD集成、安全扫描、资源导入、多云管理

面试时怎么说:

“我用Terraform从零搭建过完整的AWS基础设施,包括VPC网络、EKS集群、RDS数据库的三层架构(65个资源),集成了GitLab CI自动化pipeline,有GitHub上的开源项目可以展示。”


参考链接

更多推荐