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

概要

やりたいこと

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

チュートリアル

Terraform 用サービスアカウント作成

下記を参考に terraform init まで行う。

Terraform で Cloud Run デプロイ

公式サンプルを参考。Cloud Run は未認証でアクセスできるようにする。

vi cloudrun.tf
  • noauth により未認証アクセス可とする
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
}

デプロイする。

terraform apply

GCP コンソールより作成されたことを確認。

作成されたサービスを選択する。URL を確認できる。

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

検証が終わった後は削除しておくこと。

terraform destroy

エラー

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

noauth を指定しない Cloud Run の URL にアクセスすると発生するエラー。

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 へのアクセス権限がないためアクセスできかった。

Noauth を指定すると URL にアクセスできる。

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
}

認証ありでのアクセスは今度

参考

google_cloud_run_service

Google App Engine VS Cloud Run

コメント

タイトルとURLをコピーしました