Terraform でモジュールを参照する際の相対パスの指定方法について、よくあるケースと注意点を説明します。
同じディレクトリ階層のモジュールを参照する場合
以下のような構成でmodules/random_str
に random_string
リソースを含むモジュールがあるとします:
modules/random_str/main.tf
resource "random_string" "random" {
length = 16
special = true
override_special = "/@£$"
}
このモジュールをルートディレクトリの main.tf
から参照する場合は、以下のように記述します:
main.tf
module "test" {
source = "./modules/random_str"
}
重要な注意点
パスの指定には必ず ./
から始める必要があります。
source = "modules/random_str"
のように ./
を省略すると、以下のようなエラーが発生します:
╷
│ Error: Invalid module source address
│
│ on main.tf line 2, in module "test":
│ 2: source = "modules/random_str"
│
│ Terraform failed to determine your intended installation method for remote module package "modules/random_str".
│
│ If you intended this as a path relative to the current module, use "./modules/random_str" instead. The "./" prefix indicates that the address is a relative filesystem path.
╵
異なるディレクトリ階層からモジュールを参照する場合
例えば environments/development
ディレクトリから、上記の modules/random_str
を参照する場合は、共通の親ディレクトリまで ../
で遡って指定します:
environments/development/main.tf
module "test" {
source = "../../modules/random_str"
}
ディレクトリ構成例
参考までに、上記の例で想定しているディレクトリ構成は以下のようになります:
├── modules
│ └── random_str
│ └── main.tf
└── environments
└── development
└── main.tf
このように構造化することで、環境ごとの設定とモジュールの再利用が容易になります。