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_bucketK8s集群EKSACKaws_eks_cluster/alicloud_cs_managed_kubernetes完整代码main.tfterraform { 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.tfvariable 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 Providerus-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存到各自云的远程存储敏感变量怎么处理sensitivetrue CI Variables 不输出明文AWS和阿里云的资源对应关系VPCVPC, SubnetVSwitch, EC2ECS, S3OSS, EKSACK费用说明本篇只展示代码结构和配置不实际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上的开源项目可以展示。”参考链接本系列配套代码GitHubTerraform阿里云ProviderTerraform多Provider配置Terraform Provider alias文档阿里云Terraform最佳实践