個人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 / IAM9├── personal-blog.tf … ブログ画像用の S3 / IAM10├── outputs.tf … 作った結果の「出力」(バケット名やキー)11│12├── bootstrap/ … 最初に流すスクリプト13│ ├── 01-tfstate-backend.sh … state 用 S3 を作る14│ ├── 02-github-oidc.sh … GitHub 認証用の設定を作る15│ └── policies/ … IAM ポリシーの JSON16│17├── .github/workflows/18│ └── terraform.yml … CI/CD(自動で plan / apply するパイプライン)19│20└── .tflint.hcl … Terraform コードの静的チェック設定
簡単なフロー図
1GitHub Repository (Kagayama0208/iac-aws)2 │ push / pull_request3 ▼4GitHub Actions ──(OIDCトークン)──▶ AWS STS5 │ │ AssumeRoleWithWebIdentity6 │ ▼7 │ IAM 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)
