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.