如何通过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
相关产品推荐
相关产品推荐

