【问题标题】:Terraform GCP executes resources in wrong orderTerraform GCP 以错误的顺序执行资源
【发布时间】:2021-08-11 07:52:51
【问题描述】:

我有这个 main.tf 文件:

provider "google" {
  project = var.projNumber
  region = var.regName
  zone = var.zoneName
}

resource "google_storage_bucket" "bucket_for_python_application" {
  name = "python_bucket_exam"
  location = var.regName
  force_destroy = true
}

resource "google_storage_bucket_object" "file-hello-py" {
  name = "src/hello.py"
  source = "app-files/src/hello.py"
  bucket = "python_bucket_exam"
}

resource "google_storage_bucket_object" "file-main-py" {
  name = "main.py"
  source = "app-files/main.py"
  bucket = "python_bucket_exam"
}

第一次执行时它运行良好,但在terraform destroy 和再次terraform plan -> terraform apply 我注意到 terraform 在实际创建存储桶之前尝试创建对象:

它不能在不存在的东西中创建对象。这是为什么呢?

【问题讨论】:

    标签: google-cloud-platform terraform terraform-provider-gcp


    【解决方案1】:

    您必须在对象和存储桶之间创建依赖关系(请参见下面的代码)。否则,Terraform 将不知道它必须先创建存储桶,然后再创建对象。这与Terraform如何存储资源in a directed graph有关。

    resource "google_storage_bucket_object" "file-hello-py" {
      name   = "src/hello.py"
      source = "app-files/src/hello.py"
      bucket = google_storage_bucket.bucket_for_python_application.name
    }
    
    resource "google_storage_bucket_object" "file-main-py" {
      name   = "main.py"
      source = "app-files/main.py"
      bucket = google_storage_bucket.bucket_for_python_application.name
    }
    

    通过这样做,您声明了一个隐式顺序:存储桶,然后是对象。这相当于在 google_storage_bucket_objects 中使用 depends_on,但在这种特殊情况下,我建议在对象中使用对存储桶的引用,而不是使用显式的 depends_on

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-16
      • 2018-09-27
      • 2015-02-05
      • 2021-05-15
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多