Terraform の .gitignore 設定

Terraform および OpenTofu プロジェクト向けの安全な .gitignore。.terraform ディレクトリ、状態ファイル、シークレットを含む tfvars、プランファイル、クラッシュログを解説します。

DevOps

詳細な説明

Terraform の .gitignore 要件はセキュリティ上極めて重要です。状態ファイルや変数ファイルには、インフラのシークレット、データベースパスワード、クラウドプロバイダーの認証情報が平文で含まれていることが多いためです。

Terraform の必須無視パターン:

.terraform/
*.tfstate
*.tfstate.*
*.tfplan
crash.log
crash.*.log
*.tfvars
*.tfvars.json
override.tf
override.tf.json
*_override.tf
*_override.tf.json
.terraformrc
terraform.rc

各パターンが重要な理由:

  • .terraform/ — プロバイダープラグインとモジュールキャッシュディレクトリ。ダウンロードされたプロバイダーバイナリ(AWS、Azure、GCP)を含み、数百メガバイトに達することがあります。terraform init で再生成されます。
  • *.tfstate*.tfstate.*重大なセキュリティ上の懸念。 Terraform の状態ファイルにはインフラの完全な現在の状態が含まれます。リソース ID、IP アドレス、データベース接続文字列、時にはパスワードが平文で記録されます。状態ファイルは決してコミットしないでください。リモートバックエンド(S3、GCS、Terraform Cloud、Azure Blob Storage)を使用してください。
  • *.tfplan — 保存された実行プランファイル。バイナリ形式でマシン固有です。
  • *.tfvars — 通常、API キーやサービスアカウント認証情報などのシークレットを含む変数定義ファイル。デフォルトで常に無視し、機密値には環境変数やシークレットマネージャーを使用してください。
  • crash.log — スタックトレースに機密状態データを含む可能性がある Terraform クラッシュレポート。
  • override.tf*_override.tf — ローカルテスト用の Terraform オーバーライドファイル。リソース定義を変更するもので、共有すべきではありません。
  • .terraformrcterraform.rcTerraform Cloud API トークンを含む可能性がある CLI 設定ファイル。

コミットすべきもの:

  • *.tf — Infrastructure as Code の定義。
  • .terraform.lock.hcl — プロバイダーの依存関係 lockfile。package-lock.json と同様に、すべてのチームメンバーが同一のプロバイダーバージョンを使用することを保証します。
  • terraform.tfvars.example — 実際のシークレット値を含まない、必要な変数を示すテンプレート。

チームにはリモート状態が必須です。 リモート状態がないと、2人の開発者が同時に terraform apply を実行した場合、インフラの状態が不可逆的に破損する可能性があります。

ユースケース

インフラチームが Terraform の状態をローカルファイルから S3 バックエンドに移行し、AWS 認証情報を含む状態ファイルが git にコミットされないようにする必要があります。

試してみる — .gitignore Generator

フルツールを開く