Terraform で GCP Cloud Run をデプロイする

概要

やりたいこと

Terraform を使って GCP の Cloud Run をデプロイする。

Terraform

Cloud Run チュートリアル

一番ベーシックなコードだととても短い。

resource "google_cloud_run_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {
    spec {
      containers {
        image = "gcr.io/cloudrun/hello"
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}

以下のように作成される。

ただし、アクセス用 URL が発行されるが、権限がないためアクセスできない。

  • https://cloudrun-srv-vuoo7furta-uc.a.run.app

アクセスできる Cloud Run

resource "google_cloud_run_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {
    spec {
      containers {
        image = "gcr.io/cloudrun/hello"
      }
    }
  }
}

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
}

発行された URL にアクセスできることを確認。

エラー

Error: Error setting IAM policy for cloudrun service “v1/projects/<PROJECT_ID>/locations/us-central1/services/cloudrun-srv”: googleapi: Error 403: The caller does not have permission

Terraform 用サービスロールに Cloud Run へ IAM を付与する権限がなかった。

Terraform 用サービスロールに「 Cloud Run Admin 」ロールを追加。

参考

google_cloud_run_service

Google App Engine VS Cloud Run