如何以编程方式获取 Terraform 模块名称?

How can I get the Terraform module name programmatically?

我定义了以下 Terraform 模块:

module "lambda" {
  source                = "../lambda"
  region                =  "us-west-1"
  account               = "${var.account}"
}

如何利用模块名称来设置带有插值的 source 参数?我想要这样的东西:

module "lambda" {
  source                = "../${this.name}"
  region                =  "us-west-1"
  account               = "${var.account}"
}

我觉得不可能。有一个 self 允许您在资源中引用属性,但标识符不是属性。此外,self 只允许在供应商中使用。

我想完成你想要的唯一方法是模板化 .tf 文件,例如:

module {{ my-module}} {
  source                = "../{{ my-module }}"
  region                =  "us-west-1"
  account               = "${var.account}"

但您应该在 terraform init 之前渲染模板。在 CI 管道中设置很简单,但我发现在本地工作时很麻烦。

locals {
  module = basename(abspath(path.module))
}

{
...
  some-id = local.module
...
}