てっくらのーとは、触れた技術のメモと日常の記録が少し合わさった個人のサイトです。
Terraform Backend Config の path を prefix に移行する
GCPのリソース作成をTerraformで実施する際、Terraformの構成を管理するstateファイルはremote stateとしてGCSに格納し管理することが可能です。その場合、tfファイルは以下のように記載することになります。
- backend.tf
terraform {
backend "gcs" {
bucket = "terraform-bucket"
path = "terraform/terraform.tfstate"
credentials = "./credentials.json"
}
}
remote state は/terraform-bucket/terraform/terraform.tfstate
として格納されています。
数日前にTerraformv0.15.0
がリリースされました。v0.15.0
では上の記載のpath
が廃止となり、prefix
での表記が必要になりました。
prefix
は以前から使用可能となっているため、既に使用していれば特に問題はないのですが、path
のままv0.15.0
を迎えてしまいそうな環境があったため、移行方法の確認をしました。
移行方法
基本方針は、stateファイルをリネームしてterraform init
を行うというものです。
- (stateファイルのバックアップを取得する)
terraform workspace list
を実行して、現在使用しているワークスペース名を確認する。- stateファイルのリネームを行う。
backend.tf
の記載を修正する。- (
.terraform
ディレクトリを削除する) terraform init
を行う
Stateファイルのバックアップ(オプション)
GCS に格納・管理しているstateファイルをローカルにバックアップします。
terraform workspace list
を実行する
prefix
でstateファイルの名前を指定は(おそらく)出来ず、workspaceの名前によると記載されています。
prefix - (Optional) GCS prefix inside the bucket. Named states for workspaces are stored in an object called
<prefix>/<name>
.tfstate.
そのため、terraform workspace list
で現環境の確認を行います。
$ terraform workspace list
* default
workspaceはdefault
となっていることが分かりました。そのため移行後はdefault.tfstate
として保存することになります。
Stateファイルのリネームを行う
GCPのコンソール等からstateファイルのリネーム(default.tfstate
)を行います。
backend.tf
の記載を修正する
以下のように修正します。
terraform {
backend "gcs" {
bucket = "terraform-bucket"
prefix = "terraform"
credentials = "./credentials.json"
}
}
この場合は/terraform-bucket/terraform/default.tfstate
として格納・管理することになります。
.terraform
ディレクトリを削除する(オプション)
terraform init
の前に.terraform
ディレクトリを削除します。(未削除でもinit
にて再構成されましたが念のため。)
terraform init
を行う
terraform init
を行い、backend構成情報を初期化します。
$ terraform init
Initializing the backend...
Successfully configured the backend "gcs"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing provider plugins...
- Reusing previous version of hashicorp/google from the dependency lock file
- Installing hashicorp/google v3.64.0...
- Installed hashicorp/google v3.64.0 (signed by HashiCorp)
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
確認
terraform plan
を行い、差分有無を確認します。
$ terraform plan
(略)
No changes. Infrastructure is up-to-date.
This means that Terraform did not detect any differences between your
configuration and real physical resources that exist. As a result, no
actions need to be performed.
問題なさそうでした。