抜錨
技術

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

著者

Kosuke

公開日

個人AWSをGitOpsで安全に立ち上げる#1 ― Terraform + OIDC + CI/CD

個人AWS環境を Terraform + Github Actions で管理してみました。

https://github.com/Kagayama0208/iac-aws


概要

- ここでは基本的な目的、ディレクトリ構造、概要のみ載せて詳細は次から書きます。


目的

- 自宅の Kubernetes で動かしている DB(CloudNativePG、以下 CNPG)のバックアップをクラウドへ行いたい

- このブログ(同じく自宅k8s上)の画像の保存先が欲しい

- 学習のついでにS3をTerraform + Github Actionsで管理を行う



ディレクトリ構造


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 認証用の設定を作る
15│ └── policies/IAM ポリシーの JSON
16
17├── .github/workflows/
18│ └── terraform.yml … CI/CD(自動で plan / apply するパイプライン)
19
20└── .tflint.hcl … Terraform コードの静的チェック設定



簡単なフロー図

1GitHub Repository (Kagayama0208/iac-aws)
2 │ push / pull_request
3
4GitHub Actions ──(OIDCトークン)──▶ AWS STS
5 │ │ AssumeRoleWithWebIdentity
6 │ ▼
7IAM Role: GitHubActions-iac-aws(一時クレデンシャル)
8 ▼ │
9 terraform plan/apply ───────────────┘
10 ├── State : S3 (kosuke-iac-tfstate)
11 └── Managed resources:
12 └── keiba-db backup(S3 + KMS + IAM user)