🪣

tfstateをローカルからs3に持っていく方法を模索する

2023/06/16に公開

はじめに

tfstateをローカルPCで持っていると管理が大変なので、ローカルからs3に移行します。
ドキュメントを参考にして方法を探してみます。
https://developer.hashicorp.com/terraform/cli/commands/init#backend-initialization

環境

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でやらかした後の復旧はこれだろうか。いずれ試してみよう

参考

https://qiita.com/empty948/items/9564858aa4783ffa9cf7#local--s3-に戻す場合

Discussion