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 オーバーライドファイル。リソース定義を変更するもので、共有すべきではありません。.terraformrcとterraform.rc— Terraform Cloud API トークンを含む可能性がある CLI 設定ファイル。
コミットすべきもの:
*.tf— Infrastructure as Code の定義。.terraform.lock.hcl— プロバイダーの依存関係 lockfile。package-lock.jsonと同様に、すべてのチームメンバーが同一のプロバイダーバージョンを使用することを保証します。terraform.tfvars.example— 実際のシークレット値を含まない、必要な変数を示すテンプレート。
チームにはリモート状態が必須です。 リモート状態がないと、2人の開発者が同時に terraform apply を実行した場合、インフラの状態が不可逆的に破損する可能性があります。
ユースケース
インフラチームが Terraform の状態をローカルファイルから S3 バックエンドに移行し、AWS 認証情報を含む状態ファイルが git にコミットされないようにする必要があります。