状況
GCPのプロジェクトをTerraformで扱っていて、Cloud RunサービスにおいてSecret Managerを環境変数に入れたい
2021/07現在この機能はベータ版
→もし時間が経って解決されてたらこの記事は不要になるかもしれません
実装内容
Terraform公式のCloud Runの部分を参考にしました
今回触れる部分以外は省略しています
beta版なのでプロバイダーはgoogle-betaになります
resource "google_cloud_run_service" "example_service" {
provider = google-beta
name = "example_service"
template {
spec {
containers {
env {
name = "EXAMPLE_ENV"
value = "hoge"
}
# Secret Manager
env {
name = "EXAMPLE_SECRET"
value_from {
secret_key_ref {
name = "example_secret" # 手動で作成したsecretのkey
key = "1" # version
}
}
}
}
}
}
}
発生したエラー
"description": "spec.template.spec.containers[0].env.value_from should be empty"
value_fromが空であるべきとか書いてますが、ドキュメントでは空ではないので、違和感を感じます。
原因
不明ですが、推測としてはベータ版の不具合だと考えています。
(いろんな事情でSecret Managerの作成自体はTerraformで管理していないからという線も考えましたがそれだと以下解決策では動かないかなと思っています)
解決策
どうやらsecret managerを使う場合初回はこのannotationsを定義しないと動作しないようです。
参考issue
resource "google_cloud_run_service" "example_service" {
provider = google-beta
name = "example_service"
# ここを追加
metadata {
annotations = {
"run.googleapis.com/launch-stage" = "BETA"
}
}
template {
spec {
containers {
env {
name = "EXAMPLE_ENV"
value = "hoge"
}
# Secret Manager
env {
name = "EXAMPLE_SECRET"
value_from {
secret_key_ref {
name = "example_secret" # 手動で作成したsecretのkey
key = "1" # version
}
}
}
}
}
}
}
これでterraform apply
すると通ると思います
所感
ベータ版だからということもあるかもしれませんが、公式ドキュメント通りに実装して動かないのは辛いですね。。
困っている人いないんですかね、、(僕がミスっているだけ?)
こういう場合はどうするのがベターなんだろうか。