Terraform实战15:多云实践——AWS + 阿里云
·
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类型 |
|---|---|---|---|
| 虚拟网络 | VPC | VPC | aws_vpc / alicloud_vpc |
| 子网 | Subnet | VSwitch | aws_subnet / alicloud_vswitch |
| 安全组 | Security Group | Security Group | aws_security_group / alicloud_security_group |
| 云服务器 | EC2 | ECS | aws_instance / alicloud_instance |
| 负载均衡 | ALB/NLB | SLB/ALB | aws_lb / alicloud_slb_load_balancer |
| 数据库 | RDS | RDS | aws_db_instance / alicloud_db_instance |
| 对象存储 | S3 | OSS | aws_s3_bucket / alicloud_oss_bucket |
| K8s集群 | EKS | ACK | aws_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:免费
小结
本篇核心收获:
- 多Provider配置:在terraform块中声明多个provider,各用各的
- Provider alias:同一云多区域时用alias区分
- 资源前缀:aws_ = AWS资源,alicloud_ = 阿里云资源
- sensitive变量:敏感信息不在输出中显示
- 多云对应关系:VPC↔VPC, Subnet↔VSwitch, EC2↔ECS
- 这跟你的工作直接相关——你管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上的开源项目可以展示。”
参考链接
更多推荐
所有评论(0)