Terraformの基本|IaCを始めるための入門ガイド

インフラ・クラウド

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を押さえれば、複数人での運用でも事故が起きにくくなります。クラウド時代の必修スキルとして、まず小さなリソースから始めてみるのがおすすめです。