You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform在GCP创建两台符合特定要求的虚拟机?

使用Terraform在GCP创建满足要求的两台虚拟机

实现方案说明

针对你的三个需求,可通过以下方式完成配置:

  • 定义两个独立的google_compute_instance资源,分别配置专属启动脚本
  • 利用depends_on属性建立依赖关系,确保第二台虚拟机在第一台创建完成后再启动创建流程
  • 通过Terraform资源引用语法,将第一台虚拟机的IP地址传入第二台的启动脚本元数据

完整Terraform代码

provider "google" {
    project = "project-name"
    region  = "europe-west3"
    zone    = "europe-west3-c"
}

# 第一台虚拟机:配置启动脚本1
resource "google_compute_instance" "vm_instance_1" {
    name         = "terra-instance-1"
    machine_type = "n1-standard-2"
    zone         = "europe-west3-c"
        
    boot_disk {
        initialize_params {
            image = "centos-7"
        }
    }

    metadata = {
        startup-script = <<-EOF
            #!/bin/bash
            echo "VM1启动脚本执行完成" > /var/log/vm1-startup.log
            EOF
    }

    network_interface {
        subnetwork = "test-subnet-frankfurt"
        # 启用外部IP(如需内部IP后续可替换引用字段)
        access_config {
        }
    }
}

# 第二台虚拟机:配置启动脚本2,依赖第一台并接收其IP
resource "google_compute_instance" "vm_instance_2" {
    name         = "terra-instance-2"
    machine_type = "n1-standard-2"
    zone         = "europe-west3-c"
    
    # 依赖第一台虚拟机,确保顺序创建
    depends_on = [google_compute_instance.vm_instance_1]
        
    boot_disk {
        initialize_params {
            image = "centos-7"
        }
    }

    metadata = {
        startup-script = <<-EOF
            #!/bin/bash
            echo "VM2启动脚本执行完成" > /var/log/vm2-startup.log
            # 记录第一台虚拟机的外部IP
            echo "VM1外部IP: ${google_compute_instance.vm_instance_1.network_interface.0.access_config.0.nat_ip}" >> /var/log/vm2-startup.log
            EOF
    }

    network_interface {
        subnetwork = "test-subnet-frankfurt"
        access_config {
        }
    }
}

关键细节解释

  • 不同启动脚本:两个虚拟机的startup-script字段分别定义了独立的脚本内容,可根据实际业务需求修改脚本逻辑
  • 顺序创建:depends_on属性强制Terraform先完成第一台虚拟机的所有创建操作,再启动第二台的创建流程
  • IP传递:通过${google_compute_instance.vm_instance_1.network_interface.0.access_config.0.nat_ip}引用第一台的外部IP并嵌入第二台脚本;若需传递内部IP,替换为google_compute_instance.vm_instance_1.network_interface.0.network_ip即可

内容的提问来源于stack exchange,提问作者Sapir Dadon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:45:41