Terraform で Cloud Run のリビジョンを更新しようとすると Modifying のまま進まなくなる事象の原因調査
事象概要
terraform apply すると、このメッセージが永遠に出続ける。期間が 10m になっても 20mになっても終わらない。
google_cloud_run_service.cloud_run: Still modifying... [id=locations/asia-northeast1/namespaces/XXXX/services/cloudrun-service, 20s elapsed]
意味はないと分かっているが、一応、Modifying 状態で 30m くらい待ってみる。
と思ったらタイムアウト値が 15m なのを忘れてた。
エラーメッセージが出てた!
「違うコンフィグを持つ同名のリビジョンが既に存在しますよ」
│ Error: Error updating Service "locations/asia-northeast1/namespaces/XXXX/services/cloudrun-service": googleapi: Error 409: Revision named 'cloudrun-service-00003-vir' with different configuration already exists.
ということは、リビジョン名を変えれば更新可能ってこと?
autogenerate_revision_name = true
← これをつけてリビジョン名を変えればいけるのでは?
autogenerate_revision_name - (Optional) If set to true, the revision name (template.metadata.name) will be omitted and autogenerated by Cloud Run. This cannot be set to true while template.metadata.name is also set. (For legacy support, if template.metadata.name is unset in state while this field is set to false, the revision name will still autogenerate.)
一旦、実態と tfstate の差分を解消してから 自動リビジョン命名を有効にする。
Terraform will perform the following actions:
# google_cloud_run_service.cloud_run will be updated in-place
~ resource "google_cloud_run_service" "cloud_run" {
~ autogenerate_revision_name = false -> true
id = "locations/asia-northeast1/namespaces/XXXX/services/cloudrun-service"
name = "cloudrun-service"
# (3 unchanged attributes hidden)
# (3 unchanged blocks hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
手動リビジョン更新し、tfstate との差分を作った状態で再トライ。
Terraform will perform the following actions:
# google_cloud_run_service.cloud_run will be updated in-place
~ resource "google_cloud_run_service" "cloud_run" {
id = "locations/asia-northeast1/namespaces/XXXX/services/cloudrun-service"
name = "cloudrun-service"
# (4 unchanged attributes hidden)
~ template {
~ spec {
# (3 unchanged attributes hidden)
~ containers {
~ image = "asia.gcr.io/XXXX/hello@shaXXXX" -> "us-docker.pkg.dev/cloudrun/container/hello"
# (2 unchanged attributes hidden)
# (2 unchanged blocks hidden)
}
}
# (1 unchanged block hidden)
}
# (2 unchanged blocks hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
うわああああああああ!!
更新できたああああ!!
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
ただ、一個謎が残っている。
autogenerate_revision_name=false
の状態でも、これはできた。
TF: リビジョン作成
TF: リビジョン作成(コンテナイメージ変更)
でも、これはできない。
TF: リビジョン作成
手動: リビジョン作成(コンテナイメージ変更)
TF: リビジョン作成(コンテナイメージ変更)→ Error
つまり、autogenerate_revision_name
は最初はtrue
だが、手動を挟むことでfalse
になる挙動に見える。
けど、問題は解消されたので深追いはしないことにする。
同じ事象っぽい報告たち。