Terraformは、HashiCorpが提供するIaC(Infrastructure as Code)ツールです。クラウドリソースをコードで宣言的に定義・管理でき、再現性のあるインフラ運用を実現します。本記事では、Terraformの基本概念と入門手順を解説します。
Terraformとは
Terraformは、AWS・GCP・Azure・Cloudflare・GitHub・Datadogなど多数のプロバイダに対応するマルチクラウドIaCツールです。HCL(HashiCorp Configuration Language)でインフラを記述し、terraform planで差分確認、terraform applyで適用する宣言的アプローチが特徴です。
基本概念
- Provider:操作対象クラウド/サービスのプラグイン
- Resource:作成するリソース定義
- State:現在の構成情報。S3+DynamoDB等にリモート保存するのが定番
- Module:再利用可能なリソース集
最小例(AWS)
terraform {
required_providers {
aws = { source = "hashicorp/aws", version = "~> 5.0" }
}
}
provider "aws" { region = "ap-northeast-1" }
resource "aws_s3_bucket" "site" {
bucket = "my-site-bucket-2026"
}
基本コマンド
terraform init # プロバイダ・モジュール取得
terraform fmt # フォーマット
terraform validate # 構文チェック
terraform plan # 差分確認
terraform apply # 反映
terraform destroy # 削除
変数とOutput
variable "env" { default = "dev" }
resource "aws_s3_bucket" "site" {
bucket = "my-site-${var.env}"
}
output "bucket_name" {
value = aws_s3_bucket.site.id
}
Stateのリモート管理
チーム開発では、Stateファイル(terraform.tfstate)をS3+DynamoDBに保存し、ロックを取りながら更新するのが定番です。
terraform {
backend "s3" {
bucket = "my-tfstate"
key = "prod/terraform.tfstate"
region = "ap-northeast-1"
dynamodb_table = "tf-locks"
}
}
ベストプラクティス
- 環境ごとにディレクトリ・workspaceを分ける
- 変更前は必ず
planを確認 - Stateはリモート+ロックで運用
- 機密はTerraformコードに直書きせず、Secrets Manager等から参照
- tflintやtfsecで静的解析
OpenTofuについて
2023年にTerraformのライセンスがBSLに変更されたことを受け、OSSフォークとしてOpenTofuが誕生しました。コマンド互換のためTerraformの代替として採用するケースも増えています。
まとめ
Terraformは、宣言的に・再現性のあるインフラを構築するための定番ツールです。plan→applyのサイクルとリモートStateを押さえれば、複数人での運用でも事故が起きにくくなります。クラウド時代の必修スキルとして、まず小さなリソースから始めてみるのがおすすめです。