【Terraform】tfstateファイルをS3で管理する
前回の記事ではTerraformのAWSリソース作成環境を構築しました。terraform apply
コマンドの実行時にローカル環境にterraform.tfstate
というファイルが作成されているはずです。Terraform
ではapply
コマンド実行後のリソースの状態をterraform.tfstate
ファイルで管理しています。
今回は複数人でTerraform
環境を管理していると想定して、最新のterraform.tfstate
ファイルをS3
で管理する手順を解説します。
S3バケットの作成
AWSのマネジメントコンソールからS3のページに移動し、「バケットを作成」をクリックします。
任意のバケット名を入力します。
ここではterraform-sample-s3
としています。
意図しない障害時などに復旧できるようバケットのバージョニングを有効にします。
その他の設定はデフォルトのまま「バケットを作成」をクリックします。
S3が正常に作成されたら完了です。
backendの設定
前回の記事で作成したプロジェクトにbackend.tf
ファイルを作成します。
公式のexampleを参考に以下の内容でファイルを編集します。
bucket
の箇所は先ほど作成したバケット名を指定します。key
の箇所はterraform.tfstate
ファイルへのパスを指定しています。今後環境ごとにディレクトリを分けていきたいため、dev
ディレクトリ配下に指定しています。
terraform {
backend "s3" {
bucket = "terraform-sample-s3"
key = "dev/terraform.tfstate"
region = "ap-northeast-1"
}
}
これで設定は完了です。backend
の設定を反映されるためinit
コマンドを実行します。
docker compose run --rm terraform init
設定に問題がなければ以下のように初期化が完了します。
Initializing the backend...
Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing provider plugins...
- Reusing previous version of hashicorp/aws from the dependency lock file
- Using previously-installed hashicorp/aws v5.61.0
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.
前回の記事で設定したVPC
を作成するため、apply
コマンドを実行します。
docker compose run --rm terraform apply
以下のメッセージが表示されれば正常に作成が完了しています。
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
apply
コマンド実行後、マネジメントコンソールから作成したバケット内にtfstate
ファイルが作成されていることが確認できれば設定は完了です。
最後に作成したVPC
を削除しておきます。
docker compose run --rm terraform apply
以上でterraform.tfstate
ファイルをS3
で管理する設定は完了です。