TerraformとTerragrunt入門!インフラ構成管理をもっと簡単に!

terraform terragrunt ITインフラ
この記事は約7分で読めます。

この記事の最終更新日: 2025年5月14日

Infrastructure as Code (IaC) を導入すると、サーバーやネットワークなどのインフラ資産を「コード」として管理できるため、再現性・可読性・自動化が飛躍的に向上します。本記事では代表的な IaC ツール Terraform と、その運用を強力にサポートする Terragrunt を、初心者にもわかりやすく解説します。

terraform terragrunt

Terraform とは?

Terraform は HashiCorp 社 が開発・公開しているオープンソースの IaC ツールです。インフラの構築・管理を人手ではなく「コード」で実施することで、作業ミスを減らし、チームでの開発・運用がスムーズになります。

Terraform では HCL(HashiCorp Configuration Language) という専用の記述言語を使って、AWS や GCP、Azure などのクラウドサービスに対するインフラの定義を行います。

主な特徴

  • 宣言的構文:どう作るかではなく「こうなっていてほしい」という完成形を書くスタイル
  • マルチクラウド対応:AWSやGCPなど、異なるクラウドを同じ形式で管理可能
  • 状態ファイル (state):現在のインフラ構成を .tfstate というファイルに保持。変更が必要な部分を自動で検出
  • プランニング機能terraform plan を使うことで、実行前に何が変わるかを事前に確認可能
  • モジュール機能:構成を部品化(モジュール化)して再利用しやすくできる

Point:「リソースの設計書をHCLで書く」→「Terraformが実際にクラウドに構築してくれる」という仕組みです。


Terraform の基本ワークフロー

Terraform を使う際は、以下の手順で操作します。

ステップコマンド目的
初期化terraform init使用するクラウドやモジュールの情報を準備(初期設定)
変更確認terraform plan実際に構築する前に、何が変わるかを確認(安全性向上)
適用terraform apply実際にクラウドへ構成を反映(インフラの構築)
状態の可視化terraform show適用済みインフラの情報を人間が見やすく表示
破棄terraform destroy作成したリソースを安全に削除

補足:ワークスペース (Workspace) とは?

ワークスペースは、開発環境・本番環境といった「複数のインフラ環境」を 1 つのコードベースで使い分ける機能です。

terraform workspace new dev
terraform workspace select dev

これにより、例えば dev ワークスペースでは開発用リソース、本番では prod ワークスペースを使って安全に分離できます。


Terraform の主要コンポーネント

Terraform を扱う上でよく出てくる用語について、簡単に説明します。

  • Provider(プロバイダー):クラウドと Terraform をつなぐもの。AWS や GCP を使いたい場合はそれぞれの Provider を指定します。
  • Resource(リソース):作りたいクラウドの部品(例:S3バケットやEC2)を定義します。
  • Data Source(データソース):既に存在する外部リソースの情報を参照します。例えば最新のAMI IDなどを取得可能。
  • Module(モジュール):複数のリソースをまとめて再利用する単位。大規模化に欠かせません。
  • Backend(バックエンド):Terraform の状態ファイル(state)を保存する仕組み。チームで共有するために S3 や Terraform Cloud を使用します。

Terraform ベストプラクティス(初心者向け5選)

  1. Remote Backend(リモートバックエンド)を活用:state ファイルを安全に共有・管理
  2. バージョン固定:プロジェクトで使用する Terraform のバージョンを統一(トラブル防止)
  3. 公式モジュールを活用terraform-aws-modules など、信頼できる既存モジュールで効率化
  4. CI/CD パイプラインと統合:GitHub Actions などを使って自動構築・テストを導入
  5. Git 管理:コードの変更履歴を Git で追跡し、レビューやロールバックを容易に

Terragrunt とは?

Terraform は非常に強力ですが、実際の運用ではこんな悩みが生まれがちです:

  • 複数の環境(dev/stg/prod)で同じようなコードをコピペしている
  • state ファイルの保存先を毎回手動で書いている
  • 複数のモジュールの順序関係が分かりにくい

そこで登場するのが Terragrunt(テラグラント) です。 Terraform をより効率よく、安全に運用するための「補助ツール」であり、Terraform を内部で使っています(実行時に terraform を呼び出す)。

Terragrunt を使うと、共通設定の集約やモジュール管理の効率化、環境の切り替えが簡単になります。


Terragrunt の仕組みとメリット

Terragrunt は terragrunt.hcl というファイルを使って、Terraform の設定をラップ(包み込む)する形で運用します。

主な仕組み

  • include:共通設定を親ディレクトリから継承(重複コードを排除)
  • inputs:Terraform の変数に値を渡す
  • remote_state:バックエンド(state保存先)の設定も共通化可能

メリットまとめ

  • コードの再利用性が向上:同じ構成を複数の環境で使い回せる
  • 設定の一元管理が可能:stateや変数などを1か所で管理
  • 大規模構成に対応しやすい:複数のリソースをまたぐ構成でも整理しやすい
  • 一括操作が可能:複数の環境をまとめて一気に plan や apply できる

Terragrunt 実践ディレクトリ構成例

Terragrunt を用いる際は、以下のようなディレクトリ構成で管理するとわかりやすく、保守性も高まります。

infra-live/
├── terragrunt.hcl          # 共通設定(backend など)
├── dev/
│   └── s3/terragrunt.hcl   # dev 環境の S3 バケット定義
└── prod/
    └── s3/terragrunt.hcl   # 本番環境の S3 バケット定義

infra-modules/
└── s3/main.tf              # 実際の Terraform モジュール

このように、「環境ごとの構成」は infra-live/ に、「共通モジュール」は infra-modules/ に分けるのが一般的です。


Terraform と Terragrunt の使い分け

特徴Terraform 単体Terraform + Terragrunt
学習コストやや低いやや高い(記述が複雑)
小規模プロジェクト向け○(少し過剰な場合あり)
大規模プロジェクト向け△(管理が煩雑になりがち)◎(共通化でスッキリ)
自動化との相性◎(run-allなど便利機能あり)

まとめ

Terraform と Terragrunt は、クラウド時代に欠かせないインフラ自動化のためのツールです。

  • Terraform は「インフラをコードで管理」する中心的な存在
  • Terragrunt は Terraform の運用を大幅に楽にしてくれる補助ツール

最初は Terraform だけで十分ですが、環境の数が増えたり、構成が複雑になってきたら Terragrunt の導入を検討してみてください。


今後学ぶべきポイント

  • HCLの構文ルールとベストプラクティス
  • Terraformモジュールの作り方・使い方
  • Terragruntでの環境分離や依存管理の実践方法
  • CI/CDとの連携方法(GitHub ActionsやGitLab CIなど)
  • Terraform CloudやS3 + DynamoDBによるバックエンド構成


この記事は 2025 年 4 月時点の情報をもとに執筆しています。

コメント

タイトルとURLをコピーしました