今回はpath.module と path.rootについてです。
■ はじめに
terraformコード内で何かしらのファイルを参照したり独自作成のテンプレートを参照するときに利用するのがpath.module , path.root です。
■ path.module について
Terraformの組み込みオブジェクトの一つに「path」があります。これに属性(module , root とか)を付与することでパスを取得することができます。
path.moduleは現在のモジュールが配置されているディレクトリを表します。言い換えると、現在のモジュールが配置されているディレクトリを参照します。
以下はサンプルです。
# 現在のモジュール内のファイルを参照する場合:
resource "aws_s3_bucket_object" "example" {
bucket = "my-bucket"
key = "path/to/object"
source = "${path.module}/files/example.zip"
}
# 現在のモジュール内のテンプレートファイルを参照する場合:
data "template_file" "example" {
template = file("${path.module}/templates/example.tpl")
vars = {
example_var = "example_value"
}
}
# 現在のモジュール内のスクリプトファイルを参照する場合:
resource "null_resource" "example" {
provisioner "local-exec" {
command = "${path.module}/scripts/example.sh"
}
}
■ path.root について
Terraformの組み込みオブジェクトの一つに「path」があります。これに属性(module , root とか)を付与することでパスを取得することができます。
path.rootは、ルートモジュールが配置されているディレクトリを表します。
ルートモジュールは、「terraform init コマンドを打ったディレクトリ」と読み替えて差し支えありません。
# ルートモジュール内のファイルを参照する場合:
resource "aws_s3_bucket_object" "example" {
bucket = "my-bucket"
key = "path/to/object"
source = "${path.root}/files/example.zip"
}
# ルートモジュール内のテンプレートファイルを参照する場合:
data "template_file" "example" {
template = file("${path.root}/templates/example.tpl")
vars = {
example_var = "example_value"
}
}
# ルートモジュール内のスクリプトファイルを参照する場合:
resource "null_resource" "example" {
provisioner "local-exec" {
command = "${path.root}/scripts/example.sh"
}
}
以上です。