複数人でTerraformを使う際にtfstateファイルの管理に悩みます。
ローカルで管理するには無理があるし、
gitだとコンフリクトするとめんどう
上記の理由から、S3で管理する方法が候補になるかと。
そこで、今回はtfstateファイルをS3で管理できるようにしていきます。
やってみる
tfstateを保存するS3バケットを作成
(main.tfのソース)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 4.16" } } required_version = ">= 1.2.0" } provider "aws" { region = "ap-northeast-1" } # S3バケットの定義 resource "aws_s3_bucket" "terraform_state" { # バケット名は一意の必要があるので、bucketの値は各自変更してください bucket = "terraform-state-hisui" } # バージョニング設定 # tfstateファイルを任意の状態に戻せるように有効にしておく resource "aws_s3_bucket_versioning" "terraform_state" { bucket = aws_s3_bucket.terraform_state.id versioning_configuration { status = "Enabled" } } |
次のコマンドを実行していき、S3を作成します
1 2 3 |
1. terraform init 2. terraform plan 3. terraform apply -auto-approve |
AWSコンソールで確認してみます。
無事作成できました
tfstateの保存先をS3へ変更
main.tfのterraformブロック内にbackendを追記します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 4.16" } } required_version = ">= 1.2.0" # ここから追記 # tfstateの保存先 backend "s3" { bucket = "terraform-state-hisui" # 作成したS3バケット region = "ap-northeast-1" # バケット内の保存先 # 適宜変更してください key = "test/terraform.tfstate" encrypt = true } # ここまで } provider "aws" { region = "ap-northeast-1" } # S3バケットの定義 resource "aws_s3_bucket" "terraform_state" { # バケット名は一意の必要があるので、bucketの値は各自変更してください bucket = "terraform-state-hisui" } # バージョニング設定 # tfstateファイルを任意の状態に戻せるように有効にしておく resource "aws_s3_bucket_versioning" "terraform_state" { bucket = aws_s3_bucket.terraform_state.id versioning_configuration { status = "Enabled" } } |
backendの設定をしたので、terraform init を実行します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
terraform_test$ terraform init 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. // ローカルのtfstateファイルをS3へコピーするか聞かれているので、「yes」 Enter a value: yes Successfully configured the backend "s3"! Terraform will automatically use this backend unless the backend configuration changes. |
tfstateファイルがS3にコピーされているか確認します
コピーされていますねー
これで完了です
参考
TerraformでtfstateファイルをS3で管理する - Qiita
TL;DRTerraformでのtfstateファイルを管理するためにbackendとしてS3を使用する。前提条件AWSアカウントCLIから操作できる権限を持つユーザ & AWS-Cliに対…
コメント