(Terraform) 左操作数的值不合适:需要一个数字

2 google-cloud-platform terraform devops terraform-provider-gcp google-cloud-run

GCP上,我尝试使用下面的 Terraform 代码运行Cloud Run服务“renderer”,在此代码中,我使用plus(连接“gcr.io/”、变量var.project_id“/renderer:latest” +) :

resource "google_cloud_run_service" "renderer" {
  name     = "renderer"
  location = "asia-northeast1"

  template {
    spec {
      containers {
        image = "gcr.io/" + var.project_id + "/renderer:latest" // Here
      }
      service_account_name = google_service_account.renderer_identity.email
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,当我应用上面的代码时,出现以下错误:

resource "google_cloud_run_service" "renderer" {
  name     = "renderer"
  location = "asia-northeast1"

  template {
    spec {
      containers {
        image = "gcr.io/" + var.project_id + "/renderer:latest" // Here
      }
      service_account_name = google_service_account.renderer_identity.email
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}
Run Code Online (Sandbox Code Playgroud)

是否不能使用plus(+)进行连接?如果不可能,我该如何在Terraform中进行串联

小智 9

是的,在Terraform中不可能使用plus(+)进行串联。因此,您需要使用“插值语法” ${var.project_id}进行串联,如下所示,而不是plus(+)

resource "google_cloud_run_service" "renderer" {
  name     = "renderer"
  location = "asia-northeast1"

  template {
    spec {
      containers {
        image = "gcr.io/${var.project_id}/renderer:latest" // Here
      }
      service_account_name = google_service_account.renderer_identity.email
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}
Run Code Online (Sandbox Code Playgroud)

另外,不能使用plus(+)进行连接,但可以使用plus(+)进行计算。例如,您的Terraform代码在“traffic”块中有“percent”

resource "google_cloud_run_service" "renderer" {
  name     = "renderer"
  location = "asia-northeast1"

  template {
    spec {
      containers {
        image = "gcr.io/${var.project_id}/renderer:latest" // Here
      }
      service_account_name = google_service_account.renderer_identity.email
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用plus(+)将30添加到100

traffic {
  percent         = 100
  latest_revision = true
}
Run Code Online (Sandbox Code Playgroud)

而且,甚至数字字符串“100”“30”也可以计算为Number 类型

traffic {
  percent         = 100 + 30 // 130
  latest_revision = true
}
Run Code Online (Sandbox Code Playgroud)