Koki's personal blog

Koki's personal blog

Another fine, responsive site template by HTML5 UP.

tfstateファイルをS3経由で共有 (チームでTerraformを運用する際に必須の設定について)

この記事では、tfstateファイルをS3経由で共有・管理する方法、また、なぜそれが必要なのかについて説明します。

Koki

2 分で読めます

この記事では、tfstateファイルをS3経由で共有・管理する方法、また、なぜそれが必要なのかについて説明します。

この記事の内容です。

対象読者

  • チームで、tfstateファイルをローカルではなくS3経由で共有・管理したい方

環境

  • Terraform v1.5.0

前提条件

  • なし

なぜtfstateをS3経由で共有管理する必要があるのか

なぜtfstateをS3経由で共有・管理する必要があるのか?について説明します。

まず、tfstateファイルはAWSへデプロイしたインフラ構成を記録・管理するためのファイルです。
そのため、1人でインフラ構成を管理をしているなら問題は発生しないのですが、チームでインフラ構成を管理していると誰の環境に最新のtfstateファイルが存在しているのかわからなくなってしまいます。
そのまま運用を行うと、デグレードが発生しやすくなり、問題が発生しやすくなります。

これをどのように解決するのかについてですが、S3でtfstateファイルを管理し、それを各メンバーの環境から参照させることで、常に最新のtfstateファイルが1つだけでかつそれを参照させる解決します。

tfstateをS3で管理

設定追加

main.tfのterraformブロックへ、backendブロックを追加します。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "5.5.0"
    }
  }

  # 以下を追加
  backend "s3" {
    key    = "terraform.tfstate" # S3に保存する際のパスおよびファイル名指定
    region = "ap-northeast-1" # S3バケットのリージョン
    bucket = "test-bucket" # 保存先のバケット名
  }
}

設定反映

もし、既にTerraformを運用している際は、tfstateファイルをS3で管理するようにした設定を反映させる必要があります。
これは簡単で、対象のmain.tfが存在するディレクトリで以下のコマンドを実行するだけです。

terraform init

上記コマンドを実行すると、処理を継続してもよいかを問われるので

yes

を入力しEnter/Returnを押してください。

参考にしたページ

Backend Configuration - Configuration Language | Terraform | HashiCorp Developer
Use the `backend` block to control where Terraform stores state. Learn about the available state backends, the backend block, initializing backends, partial backend configuration, changing backend configuration, and unconfiguring a backend.
developer.hashicorp.com
No Image

最近の投稿

カテゴリー