Terraform実践中級編|tfstateの管理・モジュール設計・CIでのterraform plan自動化

現場実践|Terraform中級
Terraform実践中級編|tfstateの管理・モジュール設計・CIでのterraform plan自動化
「Terraformの基礎は分かったが本番環境での運用方法が分からない」——TerraformのS3リモートstateバックエンド・DynamoDBによる状態ロック・モジュール化・GitHub ActionsでのPR時plan自動化を解説します。
💡 ローカルにtfstateを置いてTerraformを運用するのはチーム開発では即座にNG。S3+DynamoDBのリモートバックエンドへの移行とモジュール設計がチームでのTerraform運用の第一歩です。
1. S3リモートバックエンドの設定
terraform {
backend "s3" {
bucket = "my-terraform-state-bucket"
key = "production/terraform.tfstate"
region = "ap-northeast-1"
encrypt = true
dynamodb_table = "terraform-state-lock"
}
}
# S3バケットとDynamoDBテーブルを先に作成
# aws s3api create-bucket --bucket my-terraform-state-bucket \
# --region ap-northeast-1 \
# --create-bucket-configuration LocationConstraint=ap-northeast-1
# aws dynamodb create-table --table-name terraform-state-lock \
# --attribute-definitions AttributeName=LockID,AttributeType=S \
# --key-schema AttributeName=LockID,KeyType=HASH \
# --billing-mode PAY_PER_REQUEST2. モジュール設計のベストプラクティス
- 再利用可能なモジュールを作る:「EC2+セキュリティグループ+IAMロール」のようなよく使う組み合わせをモジュール化して複数環境で再利用する
- 環境別の変数ファイルを作る:modules/・envs/dev・envs/prod のディレクトリ構成で環境間の設定差分をvariables.tfで管理する
- tfvarsファイルをgitignoreに追加:シークレット情報を含むterraform.tfvarsはGitにコミットしない。AWS Secrets ManagerやSSMパラメータストアで管理する
3. GitHub Actionsでterraform planを自動化
name: Terraform Plan
on: pull_request
jobs:
plan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789:role/github-tf
aws-region: ap-northeast-1
- name: Terraform init
run: terraform init
- name: Terraform plan
run: terraform plan -no-color 2>&1 | tee plan.txt
- name: Comment PR with plan
uses: actions/github-script@v7
with:
script: |
const fs = require("fs");
const plan = fs.readFileSync("plan.txt", "utf8");
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: "## Terraform Plan\n" + plan
});📌 この記事のポイント
- S3+DynamoDBのリモートバックエンドでtfstateを複数人で安全に管理する
- modules/・envs/ディレクトリ構成でモジュールを環境別に再利用するのがTerraformのベストプラクティス
- GitHub Actionsでターゲット時にterraform planを実行してPRコメントに表示するCI設定が実務標準
キャリアの疑問、一緒に解決しませんか?
Route Bloomでは、インフラ系ITエンジニアを目指す方への個別サポートを行っています。2026年7月からフリーランス講師として本格始動予定です。
ABOUT ME




