概要
やりたいこと
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 コンソールより作成されたことを確認。
![](https://storage.googleapis.com/stateless.yaruzo-eigo.com/2022/03/2eb22e1b-スクリーンショット-2022-03-16-10.05.28-1024x351.png)
作成されたサービスを選択する。URL を確認できる。
![](https://storage.googleapis.com/stateless.yaruzo-eigo.com/2022/03/1621b4b6-スクリーンショット-2022-03-16-10.07.18-1024x213.png)
発行された URL にアクセスできることを確認。
![](https://runble1.com/wp-content/uploads/2021/01/26e93317850ec0506c00ad724b34cf9c-1024x762.png)
検証が終わった後は削除しておくこと。
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
}
}
以下のようにサービス自体は作成される。
![](https://runble1.com/wp-content/uploads/2021/01/3d1d912c2dbcc1d4bb5d0a789e641df4-1024x264.png)
ただし、URL へのアクセス権限がないためアクセスできかった。
![](https://runble1.com/wp-content/uploads/2021/01/c4e0cfbbd0edbe74368b2e4df780b997-1024x150.png)
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
}
認証ありでのアクセスは今度
コメント