1. はじめに
Terraform は、インフラをコードで管理する Infrastructure as Code(IaC) ツールの一つであり、AWS、Azure、GCP などのクラウドリソースを 宣言的に 構築・管理できます。
本記事では、Terraform の 導入、基本的な使い方、落とし穴、実際の経験から学んだポイント を詳しく解説します。
2. Terraformの基本概念
Terraform は HCL(HashiCorp Configuration Language) という独自の記法を使用し、クラウドリソースをコードで定義します。
✅ メリット
- コードでインフラ管理 → 手作業のミスを防ぎ、再現性が高い
- クラウドに依存しない → AWS、GCP、Azure などマルチクラウドに対応
- 宣言的な管理 → 望む状態を定義し、Terraformが自動で変更適用
-
状態管理 →
terraform.tfstate
により、リソースの状態をトラッキング
❌ デメリット
- 学習コストがある → HCLに慣れる必要がある
- 状態管理(State Management)が重要 → 破損するとリソース管理が困難
- チームでの運用にはロック機構が必須 → Terraform Cloud などの活用が推奨
3. Terraformのインストールと導入
🛠 Terraformのインストール
1. Terraform CLI をダウンロード
# Macの場合(Homebrew)
brew install terraform
# Linuxの場合
sudo apt-get update && sudo apt-get install -y terraform
2. バージョン確認
terraform -v
4. Terraformの基本操作
Terraform は以下の手順でリソースを管理します。
📝 Terraformの基本フロー
- コードを書く (
.tf
ファイル作成) - 初期化 (
terraform init
) - 計画 (
terraform plan
) - 適用 (
terraform apply
) - 変更の破棄 (
terraform destroy
)
📌 AWS EC2の作成例
1. Terraform 設定ファイルを作成(main.tf
)
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "web" {
ami = "ami-0abcdef1234567890"
instance_type = "t2.micro"
}
2. 初期化(terraform init
)
terraform init
3. 計画(terraform plan
)
terraform plan
4. 適用(terraform apply
)
terraform apply -auto-approve
5. 破棄(terraform destroy
)
terraform destroy -auto-approve
✅ terraform apply
でリソースを作成し、terraform destroy
で削除できます。
5. Terraformの落とし穴と対策
❌ 落とし穴 1: tfstate の管理ミス
Terraform は terraform.tfstate
というファイルでリソースの状態を管理します。このファイルが壊れると リソースの整合性が取れなくなり、最悪の場合インフラが壊れる ことがあります。
✅ 対策:
- Terraform Cloud や S3 バックエンドで tfstate を管理
- チーム運用では
terraform lock
を利用
S3にtfstateを保存する例(backend.tf
)
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "global/s3/terraform.tfstate"
region = "us-west-2"
}
}
❌ 落とし穴 2: terraform destroy
で誤って全削除
terraform destroy
を誤って実行すると 全てのリソースが削除される 危険性があります。
✅ 対策:
-
terraform plan -destroy
で削除プレビュー -
prevent_destroy = true
で重要なリソース削除を防ぐ
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-important-bucket"
lifecycle {
prevent_destroy = true
}
}
❌ 落とし穴 3: Providerバージョンの不整合
Terraform は クラウドプロバイダ(AWS, GCP, Azure)ごとに Provider を利用 します。これが古いと terraform apply
がエラーになります。
✅ 対策:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 3.0"
}
}
}
6. Terraformを本番環境で運用するポイント
✅ 1. S3 + DynamoDBでtfstateを管理する
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "env/prod/terraform.tfstate"
region = "us-west-2"
dynamodb_table = "terraform-lock"
}
}
✅ 2. terraform fmt
でコードフォーマット
terraform fmt
✅ 3. terraform validate
で構文チェック
terraform validate
✅ 4. CI/CDと統合(GitHub Actions)
jobs:
terraform:
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Terraform Init
run: terraform init
- name: Terraform Plan
run: terraform plan
7. まとめ
✅ Terraform を使うことで、インフラをコードで管理し、再現性を確保できる
✅ terraform.tfstate
の管理は S3やTerraform Cloud で行うのが安全
✅ terraform destroy
の誤用に注意し、 prevent_destroy
を設定
✅ GitHub Actionsと連携 してCI/CDを構築すると自動化が進む
Terraformを適切に活用し、安全かつ効率的なインフラ運用を実現しましょう!