概要
やりたいこと
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
}
認証ありでのアクセスは今度
コメント