🆙
TerraformでGCP Cloud Runのバージョンを上げる手順
背景
とあるプロジェクトにて、Cloud Runのバージョンを上げたいという要望が挙がった。
既にTerraformにてv1を前提に管理していたので、Terraformでの操作をしながらv2へアップデートを行った。
事前準備
バージョン管理
Gitにてバージョン管理を行っていることが前提です。
v1のブランチとv2のブランチで分けて管理を行います。
Cloudrun の定義を書き換える
v2用のブランチを切り、v2のCloud Runを定義しコミットしておく。
-resource "google_cloud_run_service" "user_frontend" {
+resource "google_cloud_run_v2_service" "user_frontend" {
Terraform の状態を確認する
$ terraform state list | grep module.cloudrun
module.cloudrun.data.google_iam_policy.noauth
module.cloudrun.google_cloud_run_service.user_frontend
v1リソース識別子の取得
v1のブランチにてidを取得し、控えておく
v1での識別子の形式は region/project/name だが、Cloud Run Admin API v2に準じて project/region/name の形式にする必要がある。
$ echo module.cloudrun.user_frontend_id | terraform console
"locations/asia-northeast1/namespaces/<project_name>/services/frontend"
-> projects/<project_name>/locations/asia-northeast1/services/frontend
切替作業
v2のブランチに切り替える
リソースをstate管理化から外す
$ terraform state rm module.cloudrun.google_cloud_run_service.user_frontend
Removed module.cloudrun.google_cloud_run_service.user_frontend
Successfully removed 1 resource instance(s).
stateにimport
$ terraform import module.cloudrun.google_cloud_run_v2_service.user_frontend projects/<project_name>/locations/asia-northeast1/services/frontend
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
確認
最後にterraform planを行い実態と差分が無いことを確認する。
terraform plan -target=module.cloudrun.google_cloud_run_v2_service.user_frontend
Discussion