コンテンツにスキップ

第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からの実行フロー

Terminal window
# 初期化
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が「現在クラウド上に何が作成されているか」を記録している状態管理ファイル。コードと実環境の差分を計算するために不可欠です。