Terraform 1.7 多云资源批量创建实践

Terraform 作为基础设施即代码(IaC)的核心工具,通过声明式配置实现云资源的高效管理。以下以 AWS EC2Azure VM阿里云 ECS 为例,分步骤说明批量创建流程。


一、环境准备
  1. 安装 Terraform 1.7+
    下载对应操作系统的二进制包并配置环境变量:

    wget https://releases.hashicorp.com/terraform/1.7.0/terraform_1.7.0_linux_amd64.zip
    unzip terraform_1.7.0_linux_amd64.zip && sudo mv terraform /usr/local/bin/
    

  2. 配置云提供商认证

    • AWS~/.aws/credentials
      [default]
      aws_access_key_id = AKIAXXX
      aws_secret_access_key = xxxxx
      

    • Azure:通过 az login 生成 ~/.azure/azureProfile.json
    • 阿里云~/.aliyun/config.json
      {
        "current": "default",
        "profiles": [{ "name": "default", "access_key_id": "LTAIXXX", "access_key_secret": "xxxx" }]
      }
      


二、多资源批量创建配置

使用 for_eachcount 实现批量操作,以下示例同时创建 10台云服务器(每个云平台3台,共9台 + 1台备用逻辑)。

# 定义多云提供商
provider "aws" {
  region = "us-east-1"
}

provider "azurerm" {
  features {}
  subscription_id = "xxxx"
}

provider "alicloud" {
  region = "cn-hangzhou"
}

# 批量资源模板
locals {
  vm_config = {
    aws   = { type = "t3.micro", ami = "ami-0abcdef123456" }
    azure = { size = "Standard_B1s", image = "Canonical:UbuntuServer:18.04-LTS:latest" }
    aliyun = { instance_type = "ecs.t5-lc1m1.small", image_id = "ubuntu_18_04_64_20G_alibase_xxxx" }
  }
}

# 批量创建逻辑(以AWS为例)
resource "aws_instance" "batch_vms" {
  for_each = { for idx in range(3) : "aws-vm-${idx}" => idx }

  ami           = local.vm_config.aws.ami
  instance_type = local.vm_config.aws.type
  tags = {
    Name = each.key
  }
}

# Azure VM批量创建(类似结构)
resource "azurerm_linux_virtual_machine" "batch_vms" {
  for_each = { for idx in range(3) : "azure-vm-${idx}" => idx }
  # ... 参数引用 local.vm_config.azure
}

# 阿里云ECS批量创建
resource "alicloud_instance" "batch_vms" {
  for_each = { for idx in range(3) : "aliyun-vm-${idx}" => idx }
  # ... 参数引用 local.vm_config.aliyun
}


三、执行与验证
  1. 初始化与计划

    terraform init  # 初始化提供商插件
    terraform plan  # 预览资源变更(显示将创建9台VM)
    

  2. 应用配置

    terraform apply -auto-approve
    

  3. 验证输出
    Terraform 会输出资源ID列表:

    output "vm_ids" {
      value = {
        aws   = values(aws_instance.batch_vms)[*].id
        azure = values(azurerm_linux_virtual_machine.batch_vms)[*].id
        aliyun = values(alicloud_instance.batch_vms)[*].id
      }
    }
    


四、关键优化点
  1. 动态批量扩展
    修改 range(3) 为变量 var.vm_count,通过命令行动态调整数量:

    terraform apply -var="vm_count=5"
    

  2. 模块化封装
    将云平台配置抽象为模块:

    module "aws_cluster" {
      source = "./modules/aws"
      vm_count = 3
    }
    

  3. 状态管理
    使用远程后端(如 AWS S3)避免本地状态文件冲突:

    terraform {
      backend "s3" {
        bucket = "tf-state-bucket"
        key    = "multicloud/terraform.tfstate"
      }
    }
    


五、注意事项
  • 资源配额:提前检查云账户的实例数量限额。
  • 依赖管理:使用 depends_on 显式声明资源间依赖关系。
  • 成本控制:结合 terraform plan 预估费用,避免超额创建。

通过此流程,1小时内可完成跨云平台数百台资源的部署,显著提升运维效率。完整示例代码参考 Terraform Registry 多云模板

更多推荐