Terragruntでは、子設定と組み合わせてterraformブロックを使用することで、単一のTerragrunt設定ファイルから複数のTerraformモジュールを呼び出すことができる。これは通常、各モジュールが独自のTerragruntファイルで参照されるが、親Terragruntファイルを使用して中央管理されるようにTerragrunt設定を階層化して整理することで実現される。

基本的な構成の概要は以下の通り:

  1. 親Terragruntファイルを作成する: このファイルはリソースを直接デプロイせず、共通設定の構成とモジュールデプロイメントのオーケストレーションに使用される。
  2. 各モジュールの子Terragruntファイルを作成する: 各モジュールには、Terraformモジュールのソースと必要な入力を指定する独自のTerragrunt設定ファイルがある。

構成例

ディレクトリ構成の例は以下の通り:

/terraform-live
|-- terragrunt.hcl  # 親設定
|-- network
|   |-- terragrunt.hcl  # network用モジュール設定
|-- app
|   |-- terragrunt.hcl  # app用モジュール設定

親 Terragrunt.hcl

# /terraform-live/terragrunt.hcl
remote_state {
  backend = "s3"
  config = {
    bucket         = "my-terraform-state"
    key            = "${path_relative_to_include()}/terraform.tfstate"
    region         = "us-west-1"
    encrypt        = true
    dynamodb_table = "my-lock-table"
  }
}

すべての子設定を含める

include { path = find_in_parent_folders() }

子 Terragrunt.hcl(例: Network用)

# /terraform-live/network/terragrunt.hcl
terraform {
  source = "git::https://example.com/network-module.git?ref=v1.0"
}

networkモジュール固有の入力

inputs = { vpc_id = “vpc-123456” }

使用方法

すべてのモジュールを適用するには、通常各モジュールディレクトリに移動してterragrunt applyなどのTerragruntコマンドを実行する。また、モジュールディレクトリを反復してTerragruntコマンドを実行するスクリプトやCI/CDワークフローでこれを自動化することもできる。

このセットアップにより、関心の明確な分離、再利用可能なコード、環境間での一貫性を維持しながら、集中設定から複数モジュールのデプロイメントを管理できる。