override.tf — 既存設定をオーバーライドする

1. 概要

  • override.tfとは何か
  • 使い方とファイル名のルール
  • ユースケース(テスト環境のバックエンド上書き・ローカル開発)
  • 注意点とアンチパターン

override.tf(または*_override.tfという名前のファイル)は、既存のTerraform設定を上書きするための特別なファイルです。チームの共通設定を変更せずに、個人の開発環境やテスト環境だけの設定を追加できます。


2. 仕組みと優先順位

通常のTerraformはすべての.tfファイルをマージして1つの設定として処理します。override.tfは同じリソース/変数/output/backendブロックを定義すると、通常のファイルの設定を上書きします。

project/
├── main.tf          # 通常の設定
├── backend.tf       # チームのS3バックエンド設定
└── override.tf      # ローカル開発用の上書き設定(.gitignoreに追加)

3. ファイル名のルール

  • override.tf — 任意のディレクトリに1つ
  • *_override.tfbackend_override.tflocal_override.tfのような名前
  • これらのファイルは通常の.tfファイルと同じディレクトリに置く

4. 実際のユースケース: ローカル開発でS3バックエンドを上書き

# backend.tf(チームの共通設定)
terraform {
  required_version = ">= 1.9"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
  backend "s3" {
    bucket = "my-company-tfstate"
    key    = "prd/terraform.tfstate"
    region = "ap-northeast-1"
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

variable "environment" {
  description = "環境名"
  type        = string
  default     = "prd"
}
# override.tf(ローカル開発用 — .gitignoreに追加)
# S3バックエンドをローカルのtfstateに上書き
terraform {
  backend "local" {
    path = "./local.tfstate"
  }
}

# prd環境の変数をdev用に上書き
variable "environment" {
  default = "dev"
}

5. テスト環境でのバックエンド上書き

# backend_override.tf(テスト用)
terraform {
  backend "s3" {
    bucket = "my-company-tfstate-test"  # テスト用バケット
    key    = "test/terraform.tfstate"
    region = "ap-northeast-1"
  }
}

6. .gitignoreとの組み合わせ

個人のローカル設定は.gitignoreに追加してGitにコミットしないようにします。

# .gitignore
override.tf
*_override.tf
local.tfstate
local.tfstate.backup
.terraform/
.terraform.lock.hcl

ただし、チーム全員で使うoverride.tfはGitにコミットします(例: テスト用のバックエンド設定)。


7. 注意点とアンチパターン

注意点1: override.tfを使いすぎると設定の追跡が困難になる

本来の設定とoverride.tfの設定が離れているため、「どこが上書きされているか」を把握しにくくなります。

注意点2: 部分的な上書きになる(完全置換ではない)

objectやblock内の一部の属性だけを上書きできます。未指定の属性は元の設定が使われます。

アンチパターン:

# ❌ 本来の設定を複雑にするためのoverride.tfは使わない
# チームのコードレビューで見落とされやすい

# ✅ 環境差異はvariableやworkspaceで管理する(推奨)
variable "environment" {
  type = string
}

8. 関連記事


9. まとめ

  • override.tf(または*_override.tf)は既存の設定を上書きする特別なファイル
  • ローカル開発でS3バックエンドをlocal backendに切り替える・変数のデフォルト値を変える用途に使う
  • 個人のローカル設定は.gitignoreに追加してチームに影響を与えない
  • 乱用すると設定の追跡が困難になるため、variableやworkspaceで代替できないか先に検討する

動作確認バージョン: Terraform >= 1.9 公式ドキュメント: https://developer.hashicorp.com/terraform/language/files/override