第11章: Terraform(OpenTofu)によるIaCコード管理
11.1 なぜ個人開発でもTerraform(IaC)なのか?
DNSレコード(A, CNAME, MX)やリダイレクトルール、Pagesの設定をダッシュボードでポチポチ設定していると、別のドメインで同じ構成を再現したいときや、万が一の誤削除時に復旧が困難になります。
Terraform / OpenTofu のCloudflare Providerを使えば、個人開発インフラ全体をGitでバージョン管理できます。
11.2 最小構成の main.tf
terraform { required_providers { cloudflare = { source = "cloudflare/cloudflare" version = "~> 4.0" } }}
provider "cloudflare" { api_token = var.cloudflare_api_token}
variable "cloudflare_api_token" { type = string sensitive = true}
variable "zone_id" { type = string default = "your-zone-id"}
# 1. サブドメインのDNSレコードresource "cloudflare_record" "api_subdomain" { zone_id = var.zone_id name = "api" content = "192.0.2.1" type = "A" proxied = true}
# 2. Pages プロジェクトの定義resource "cloudflare_pages_project" "frontend" { account_id = "your-account-id" name = "my-saas-frontend" production_branch = "main"}11.3 CLIからの実行フロー
# 初期化terraform init
# 差分確認terraform plan
# 適用terraform apply次章では、Gitリポジトリへのプッシュを契機として自動テストとデプロイを実行する GitHub Actions CI/CD と、障害検知のためのリアルタイムログ監視を学びます。
💡 用語解説コラム
[!NOTE] IaC (Infrastructure as Code)
サーバーやネットワーク、DNS設定などのインフラをコード(HCLやYAML)で宣言・管理する手法。Gitで変更履歴が追え、別ドメインへの複製や再構築が数秒で完了します。
[!NOTE] Stateファイル (terraform.tfstate)
Terraformが「現在クラウド上に何が作成されているか」を記録している状態管理ファイル。コードと実環境の差分を計算するために不可欠です。