GCP -使用terraform创建多个VM



我们需要在GCP中使用terraform创建2个VM:

  1. 不同的启动脚本
  2. 我们需要第一个和第二个VM不能同时创建。
  3. 我们还需要创建的第一个VM的IP,并将其传递给第二个VM的元数据脚本。我们怎么做呢?

这是我们创建1个VM的工作地形文件:

provider "google" {
project = "project-name"
region  = "europe-west3"
zone    = "europe-west3-c"
}
resource "google_compute_instance" "vm_instance" {
name = "terra-instance-with-script-newvpc"
machine_type = "n1-standard-2"
zone = "europe-west3-c"

boot_disk {
initialize_params {
image ="centos-7"
}

}

metadata = {
startup-script = <<-EOF
hello world
EOF
}
network_interface {
subnetwork="test-subnet-frankfurt"  
}
}

我们尝试添加另一个脚本,但失败了

  1. 确保在第一个GCE实例之后创建第二个GCE实例一种方法是使用depends_on参数(参见示例代码)下图)
  2. 对于启动脚本,您可以使用单独的云初始化脚本,并使用Terraform变量管理它们,如
  3. 对于IP地址部分,根据您的需要,有2种可能的用例:
    • 分配公共静态IP:您可以先使用google_compute_addressTerraform资源为第一个实例准备IP,然后再调用network_interface {access_config = { nat_ip = google_compute_address.static.first_instance_ip.address }}参数中的此资源(参见下面的例子)
    • 然后,在第二个实例的初始化脚本中,您可以再次调用Terraform资源google_compute_address.first_instance_ip.address,并按您想要的方式将其注入脚本中。
    • 如果你想使用一个短暂的(生成的)IP,那么你根本不需要使用google_compute_address,在你的第二个实例的初始化脚本中,调用第一个实例Terraform资源的nat IP属性,例如:google_compute_instance.firs_instance.network_interface.0.access_config.0.nat_ip,并以你想要的方式注入到你的脚本中。

在下面的示例代码中,它假设您将使用静态IP地址:

# Create the IP address
resource "google_compute_address" "static" {
name = "first_instance_ip_address"
}

# Source the init script and inject the IP Address variable 
data "template_file" "init" {
template = "${file("./startup.sh")}" # call your startup script from it's path
vars = {
first_instance_ip = "${google_compute_address.static.address}"
# In case you use the generated IP:
# first_instance_ip = "${google_compute_compute_instance.first_instance.network_interface.0.access_config.0.nat_ip}"
}
}
# Create the 1st google compute instance
resource "google_compute_instance" "firs_instance" {
depends_on = [google_compute_address.static]
....
# Associated our public IP address to this instance
access_config = {
nat_ip = google_compute_address.static.address
}

}
...
# Create your second IP same as the first one
...
#Create the second google compute instance
resource "google_compute_instance" "second_instance" {
depends_on = [google_compute_instance.first_instance]
...
# Associated our public IP address to this instance
access_config = {
nat_ip = google_compute_address.second_static_ip.address # optional depends on your usecase
}
}
metadata_startup_script = "${data.template_file.startup_script.rendered}"
}

p。S:这不是一个完整的和生产就绪的代码,它是一个提示的集合,以帮助您解决您的问题。

相关内容

  • 没有找到相关文章

最新更新