【问题标题】:Does Terraform execute parallely in multi-cloud deployments?Terraform 是否在多云部署中并行执行?
【发布时间】:2019-11-16 03:14:44
【问题描述】:

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

【问题讨论】:

    标签: terraform terraform-provider-aws terraform-provider-azure terraform-provider-gcp


    【解决方案1】:

    Terraform 构建了一个有向的、非循环的图形(也称为 DAG)来理解事物之间的依赖关系。如果某些东西不依赖于其他东西,那么它将并行执行它,直到 -parallelism flag 指定的数量,默认为 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 记录。

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 2022-12-21
      • 2022-11-19
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 2016-11-28
      • 2019-04-05
      • 1970-01-01
      相关资源
      最近更新 更多