🪣
tfstateをローカルからs3に持っていく方法を模索する
はじめに
tfstateをローカルPCで持っていると管理が大変なので、ローカルからs3に移行します。
ドキュメントを参考にして方法を探してみます。
環境
terraform 1.4.6
方針
ドキュメントを読んだところs3のバックエンド設定を行った後、terraform initに
-migrate-state
か-reconfigure
をつけるみたいです。
この2つを試してみましょう。
事前準備
ローカルにtfstateファイルがあることを確認し、s3をバックエンドにします。
main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.65.0"
}
}
+ backend "s3" {
+ bucket = "<作成したバケット>"
+ key = "<パス>"
+ region = "ap-northeast-1"
+ }
}
-migrate-state
既存の状態を保ちながら、バックエンドを更新するオプションです。
対話型プロンプトが表示され、yes
とすることでS3へのtfstate移行が行われました。
$ terraform init -migrate-state
Initializing the backend...
Do you want to copy existing state to the new backend?
Pre-existing state was found while migrating the previous "local" backend to the
newly configured "s3" backend. No existing state was found in the newly
configured "s3" backend. Do you want to copy this state to the new "s3"
backend? Enter "yes" to copy and "no" to start with an empty state.
Enter a value: yes
Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.
// 略
s3にこの通り
このtfstateファイルは、次の-reconfigure
のために削除しておきます。
-reconfigure
既存の状態を保持せずバックエンドを更新するオプションです。
なんのこっちゃ状態だったのですが、使ってみてなんとなく理解しました。
$ terraform init -reconfigure
Initializing the backend...
Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.
// 略
$ terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following
symbols:
+ create
Terraform will perform the following actions:
# aws_s3_bucket.s3 will be created
// 略
既に作成されているはずのs3が作成されるようです。
このように既存の設定をさっぱり消し去り、新しいバックエンドに設定するオプションのようです。
結論
- 今回の移行は状態を保ってほしいので、
-migrate-state
の使用が望ましい(はず) - 状態を保たなくてもよい、まっさらにしたい、のであれば
-reconfigure
も選択肢
所感
-
-reconfigure
の使用には注意が必要。ドキュメントを熟読したりバックアップをとったり- 開発環境向けかな
-
-reconfigure
でやらかした後の復旧はこれだろうか。いずれ試してみよう
参考
Discussion