この記事のゴール
- Terraform プロジェクトの基本ファイルの役割を理解する
- 「何を・どのファイルに書くか」というディレクトリ構成の意図を整理する
- GitHub Actions → OIDC → AWS という全体のフローを俯瞰する
中身のコードは次回以降に書いていきます。
改めてディレクトリ構造全体を見よう
1terraform-tf/2├── versions.tf … Terraform / AWS Provider のバージョン指定3├── providers.tf … AWS の接続設定(リージョン・共通タグ)4├── backend.tf … state の保存先(S3)5├── variables.tf … 変数の「定義」6├── terraform.tfvars … 変数の「値」(実値・git には載せない)7├── terraform.tfvars.example … 値のテンプレート(こちらは git に載せる)8├── keiba-db.tf … keiba-db バックアップ用の S3 / KMS / IAM9├── personal-blog.tf … ブログ画像用の S3 / IAM10├── outputs.tf … 作った結果の「出力」(バケット名やキー)11│12├── bootstrap/ … 最初に一度だけ流すスクリプト13│ ├── 01-tfstate-backend.sh … state 用 S3 を作る14│ ├── 02-github-oidc.sh … GitHub 認証(OIDC)用の設定を作る15│ └── policies/ … IAM ポリシーの JSON16│17├── .github/workflows/18│ └── terraform.yml … CI/CD(自動で plan / apply するパイプライン)19│20└── .tflint.hcl … Terraform コードの静的チェック設定
設定系 - プロジェクトの前提を決める
- versions.tf ... Terraform本体とAWS Providerのバージョンを定義する。これを固定することで手元とCIバージョンの差異を防げます。
- providers.tf ... どのリージョンにつなぐか、全リソース共通でつけるタグなどの接続設定。
- backend.tf ... stateをどこに置くか。今回はS3にネイティブロックで保存します。
変数系 - 変数と値を置く
- variables.tf ... 変数の定義(名前・型・説明)。
- terraform.tfvars ... 変数の実際の値。バケット名など環境固有の値が入る。.gitignoreでリポジトリの管理外にする。
リソース系 - 実際に作るもの
- keiba-db.tf ... CNPGバックアップのS3バケット、暗号化のKMS、書き込み用のIAM
- personal-blog.tf ... ブログ画像用のS3とIAM
- outputs.tf ... 作成結果(バケット名やキーなど)の出力。
bootstrap - 初期スクリプト
- 01-tfstate-backend.sh … state 保存用の S3 を先に作る
- 02-github-oidc.sh … GitHub Actions が AssumeRole できるよう OIDC プロバイダと IAM ロールを作る
- policies/ … 上記で使う IAM ポリシーの JSON
CI / 静的チェック
- .github/workflows/terraform.yml … push / pull_request をトリガーに fmt → lint → plan(PR時)→ apply(main マージ時)を自動実行するパイプライン。
- .tflint.hcl … Terraform コードの静的解析設定。
次回
次は、ここで挙げた 設定系ファイル(versions.tf / providers.tf / backend.tf)の中身を実際に書こうと思います。

