Terraform在多云部署中是否会类似地执行



我想通过单个Terraform脚本在不同的云提供商中创建一个VM,例如GCP,AWS,使用Terraform的Azure。因此,我想知道,Terraform会在所有公共云中并行使VM实例吗?

Terraform构建了一个定向的,周期性的图形(也称为DAG(,以了解事物之间的依赖性。如果某些内容不取决于其他因素,则它将并行执行与-parallelism标志指定的数字,该数字默认为10。

如果在多个提供商之间完全分开(您只是在 n 云提供商中创建相同的堆栈(,那么它将在这些堆栈中舒适地平行。

但是,我建议不要在这样的同时使用多个环境/云提供商,这是因为爆炸半径问题,并且通常会犯错,以最大程度地减少一个操作的变化。

如果您具有交叉提供商的依赖性,那么Terraform非常适合处理此操作,但它仍然依赖于构建DAG,因此可以理解您的依赖性。

例如,您可能需要在GCP中创建一个实例,并使用DNS解析IP地址,但使用AWS的Route53用于所有DNS。为此,您可以使用类似的东西:

resource "google_compute_instance" "test" {
  name         = "test"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"
  tags = ["foo", "bar"]
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  // Local SSD disk
  scratch_disk {
  }
  network_interface {
    network = "default"
    access_config {
      // Ephemeral IP
    }
  }
  metadata = {
    foo = "bar"
  }
  metadata_startup_script = "echo hi > /test.txt"
  service_account {
    scopes = ["userinfo-email", "compute-ro", "storage-ro"]
  }
}
data "aws_route53_zone" "example" {
  name = "example.com."
}
resource "aws_route53_record" "www" {
  zone_id = "${data.aws_route53_zone.example.zone_id}"
  name    = "www.${data.aws_route53_zone.example.name}"
  type    = "A"
  ttl     = "300"
  records = ["${google_compute_instance.test.network_interface.0.access_config.0.nat_ip}"]
}

这将构建一个具有aws_route53_record.www的图,具体取决于data.aws_route53_zone.example数据源和google_compute_instance.test资源,因此Terraform知道这两个都需要在Route53记录开始工作之前都需要完成。

相关内容

  • 没有找到相关文章

最新更新