Search code examples
google-cloud-platformterraformdevopsgoogle-cloud-runterraform-provider-gcp

Error: Invalid value for region: project: required field is not set


On GCP, I'm trying to create a Cloud Run service and a Serverless Network Endpoint Group with this Terraform code below:

provider "google" {
  credentials = file("myCredentials.json")
  project     = "myproject-813137"
  region      = "asia-northeast1"
}

resource "google_cloud_run_service" "default" {
  name     = "hello-world"
  location = "asia-northeast1"

  template {
    spec {
      containers {
        image = "gcr.io/myproject-813137/hello-world:latest"
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}

data "google_iam_policy" "noauth" {
  binding {
    role = "roles/run.invoker"
    members = [
      "allUsers",
    ]
  }
}

resource "google_cloud_run_service_iam_policy" "noauth" {
  location    = google_cloud_run_service.default.location
  project     = google_cloud_run_service.default.project
  service     = google_cloud_run_service.default.name

  policy_data = data.google_iam_policy.noauth.policy_data
}

resource "google_compute_region_network_endpoint_group" "cloudrun_neg" {
  provider              = google-beta
  name                  = "neg"
  network_endpoint_type = "SERVERLESS"
  region                = "asia-northeast1"
  cloud_run {
    service = google_cloud_run_service.default.name
  }
}

But I got this error:

Error: Invalid value for region: project: required field is not set

Are there any mistakes in my Terraform code?


Solution

  • Remove "provider = google-beta" from "google_compute_region_network_endpoint_group":

    resource "google_compute_region_network_endpoint_group" "cloudrun_neg" {
      # provider              = google-beta // Here to remove
      name                  = "neg"
      network_endpoint_type = "SERVERLESS"
      region                = "asia-northeast1"
      cloud_run {
        service = google_cloud_run_service.default.name
      }
    }
    

    Even though you have already defined provider "google" below, you redefined "provider = google-beta" in "google_compute_region_network_endpoint_group":

    provider "google" {
      credentials = file("myCredentials.json")
      project     = "myproject-813137"
      region      = "asia-northeast1"
    }
    

    That's why you got this error:

    Error: Invalid value for region: project: required field is not set