ARTICLES

【Terraform】Cloud RunにおいてSecret Managerを環境変数に埋めようとすると Error "description": "spec.template.spec.containers[0].env.value_from should be empty"

公開日
2021-07-08
関連技術
Terraform · GCP

状況

GCPのプロジェクトをTerraformで扱っていて、Cloud RunサービスにおいてSecret Managerを環境変数に入れたい
2021/07現在この機能はベータ版
→もし時間が経って解決されてたらこの記事は不要になるかもしれません

実装内容

Terraform公式のCloud Runの部分を参考にしました
今回触れる部分以外は省略しています
beta版なのでプロバイダーはgoogle-betaになります

https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_service#example-usage—cloud-run-service-secret-environment-variables

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

https://github.com/hashicorp/terraform-provider-google/issues/9159

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すると通ると思います

所感

ベータ版だからということもあるかもしれませんが、公式ドキュメント通りに実装して動かないのは辛いですね。。
困っている人いないんですかね、、(僕がミスっているだけ?)
こういう場合はどうするのがベターなんだろうか。

技術記事の一覧へ戻るお問い合わせ ↗