Terragruntとは?Terraformをもっと便利にする相棒についてわかりやすくご紹介!

  • 2025年10月2日
  • 2025年10月7日
  • 未分類

インフラをコードで管理する「IaC(Infrastructure as Code)」は、AWSやGCPを扱うエンジニアにとって欠かせない考え方になっています。その代表格がTerraform。私も初めてTerraformを使ったときは、数行のコードからEC2を立ち上げられるのに感動しました。

ですが、実際のプロジェクトでは「環境ごとの変数管理が大変」「モジュールをたくさん作るとコードが散らばる」「ステート管理が複雑」といった課題にぶつかります。
そこで登場するのがTerragruntです。

Terragruntの概要

Terragruntは、Terraformをラップして便利に使えるようにするツールです。Terraform自体を置き換えるものではなく、「Terraformの上にかぶせる追加ツール」と考えると分かりやすいです。

特に役立つのは以下のようなポイントです。

  • 環境ごとの変数管理を楽にする
    dev / stg / prod といった環境を簡単に切り替え可能。
  • モジュールの再利用性を高める
    一度作ったコードを複数環境で流用しやすい。
  • ステート管理を整理
    バックエンド(S3, DynamoDBなど)の設定を共通化できる。
  • 依存関係を考慮した実行
    VPC → サブネット → EC2 のように順番を意識してapply可能。

つまり、Terraform単体では「小さな構築」には十分ですが、チーム開発や大規模インフラではTerragruntを併用したほうが運用が楽になるというわけです。

TerraformだけでEC2を作る場合

まずTerraformだけでシンプルにEC2を立ち上げる例です。

provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_instance" "example" {
  ami           = "ami-12345678"
  instance_type = "t2.micro"
}

このコードを main.tf に書いて、

terraform init
terraform apply

すればEC2が立ち上がります。とても簡単ですが、もし dev 用と prod 用に別々のインスタンスを作りたい場合、変数ファイルを分けたり、コードをコピペして書き換えたりする必要が出てきます。

Terragruntを使うとどうなるか?

Terragruntを導入すると、共通部分はモジュール化し、環境ごとの設定は terragrunt.hcl に切り分けられます。

例として「EC2を立ち上げるモジュール」を作り、それを devprod で使い分けてみます。

1. モジュール(modules/ec2/main.tf)

variable "instance_type" {}
variable "ami" {}

resource "aws_instance" "this" {
  ami           = var.ami
  instance_type = var.instance_type
}

2. terragrunt.hcl(live/dev/ec2/terragrunt.hcl)

terraform {
  source = "../../../modules/ec2"
}

inputs = {
  instance_type = "t2.micro"
  ami           = "ami-12345678"
}

3. terragrunt.hcl(live/prod/ec2/terragrunt.hcl)

terraform {
  source = "../../../modules/ec2"
}

inputs = {
  instance_type = "t3.medium"
  ami           = "ami-87654321"
}

これで dev 環境では小さなEC2、prod 環境では大きめのEC2を簡単に切り替えてデプロイできます。

実行方法もシンプルです。

cd live/dev/ec2
terragrunt apply

これで dev 用のEC2が立ち上がります。prod に切り替えたいときは、live/prod/ec2 に移動して同じコマンドを打つだけです。

TerraformとTerragruntの使い分け

  • 小規模・個人利用ならTerraformだけで十分
    例:個人検証用のEC2を立ち上げたい場合。
  • 複数環境・チーム開発ならTerragruntを導入
    例:開発・検証・本番環境をコードで分けたい、大規模AWSインフラを管理したい場合。

Terraformを「エンジン」、Terragruntを「効率的に運転するドライバー補助機能」とイメージすると理解しやすいと思います。

まとめ

  • Terraform:IaCの基本ツール。宣言的にAWSなどのリソースを構築できる。
  • Terragrunt:Terraformを便利に管理するためのラッパーツール。特に環境管理やモジュール再利用に強い。
  • メリット:環境ごとに設定を分離、ステートや依存関係の整理が容易になる。

私自身、最初はTerraformだけで満足していましたが、プロジェクト規模が大きくなるほどTerragruntのありがたみを感じています。「環境の違いをコードにどう表現するか?」という課題に直面している方は、ぜひ一度Terragruntを試してみると良いでしょう。

NO IMAGE
最新情報をチェックしよう!