抜錨
技術

TerraformでAWSを管理してみた(GitOps) #2

公開日

aws terraform

この記事のゴール

- 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 / IAM
9├── personal-blog.tf … ブログ画像用の S3 / IAM
10├── outputs.tf … 作った結果の「出力」(バケット名やキー)
11
12├── bootstrap/ … 最初に一度だけ流すスクリプト
13│ ├── 01-tfstate-backend.sh … state 用 S3 を作る
14│ ├── 02-github-oidc.sh … GitHub 認証(OIDC)用の設定を作る
15│ └── policies/IAM ポリシーの JSON
16
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)の中身を実際に書こうと思います。