📘

【Terraform】tfstateをS3に保存し共有を可能にする

2025/01/13に公開

はじめに

tfstateファイルをローカルで保存していると、共同開発者と共有ができません。
S3ではtfstateファイルを保存することが可能です。この結果、1つのtfstateファイルで複数人で管理でき、競合も防ぐことができます。
terraform管理対象とtfstateの保管先は別のアカウントにすることが推奨されています。

S3で保管用バケット作成

  • マネジメントコンソールからS3バケット作成
  • ブロックパブリックアクセスを一旦オフにする
  • terraformのユーザーから書き込みができるようにするため、バケットポリシーを編集する
  • ポリシージェネレーターをクリック
  • Select Type of Policy : S3 Bucket Policy,Effect : Arrow,Principal : terraformユーザーのIAM ARN,Amazon Resource Name (ARN) : S3バケットのARN
  • 作成したポリシーをバケットポリシーにコピー(IDなどは削除しておく)
  • ブロックパブリックアクセスをオンに戻す

terraformブロック

terraformブロックにbackend属性を追加することで、S3にtfstateファイルを保存する。

  1. backend : block : バックエンドを指定。
    • S3の場合
      • bucket
      • key
      • region
      • profile
main.tf,
terraform {
  backend "s3" {
    bucket  = バケット名
    key     = tfstateファイル名
    region  = "ap-northeast-1"
    profile = ユーザー名
  }
}

terraform initでS3に保存される。

$ terraform init

ローカルのtsstateは空になっていること、マネジメントコンソールでS3に保存されていることを確認。

Discussion