Terraform 多提供商管理:AWS + 阿里云

通过 Terraform 同时管理 AWS 和阿里云资源,需遵循以下步骤:

1. 提供商凭证配置
  • AWS:在 ~/.aws/credentials 配置访问密钥:
    [default]
    aws_access_key_id = AKIAEXAMPLE
    aws_secret_access_key = exampleSecretKey
    

  • 阿里云:通过环境变量配置:
    export ALICLOUD_ACCESS_KEY="LTAIExampleKey"
    export ALICLOUD_SECRET_KEY="exampleSecretKey"
    export ALICLOUD_REGION="cn-hangzhou"
    

2. Terraform 配置文件(main.tf
# AWS 提供商配置
provider "aws" {
  region = "us-east-1"
}

# 阿里云提供商配置
provider "alicloud" {
  # 区域通过环境变量自动注入
}

# 创建 AWS S3 存储桶
resource "aws_s3_bucket" "example" {
  bucket = "my-aws-bucket"
}

# 创建阿里云 OSS 存储桶
resource "alicloud_oss_bucket" "example" {
  bucket = "my-alicloud-bucket"
  acl    = "private"
}

3. 初始化与部署
# 初始化提供商插件
terraform init

# 查看执行计划
terraform plan

# 部署资源
terraform apply

4. 关键注意事项
  • 提供商版本锁定:在 versions.tf 中指定版本:
    terraform {
      required_providers {
        aws = {
          source  = "hashicorp/aws"
          version = "~> 4.0"
        }
        alicloud = {
          source  = "aliyun/alicloud"
          version = "~> 1.209"
        }
      }
    }
    

  • 资源隔离:使用 workspace 或目录分离环境:
    terraform workspace new prod
    

  • 状态管理:使用远程后端(如 S3/OSS)避免冲突:
    terraform {
      backend "s3" {
        bucket = "tf-state-bucket"
        key    = "multi-cloud.tfstate"
        region = "us-east-1"
      }
    }
    

5. 高级实践
  • 模块化设计:将 AWS/AliCloud 资源拆分为独立模块:
    ├── modules
    │   ├── aws_network
    │   └── alicloud_storage
    └── main.tf
    

  • 跨云互联:通过 VPC 对等连接或 VPN 实现混合云组网
  • 统一监控:集成 CloudWatch + ARMS 实现跨云指标采集

故障排查提示
若出现提供商冲突,使用 terraform providers 检查插件加载顺序,确保资源正确关联到目标云平台。
使用 -target 参数分步部署:
terraform apply -target=aws_s3_bucket.example

更多推荐