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

如何以编程方式获取Terraform模块名称?,terraform,hcl,Terraform,Hcl,我已经定义了以下地形模块: module "lambda" { source = "../lambda" region = "us-west-1" account = "${var.account}" } 如何利用模块名称设置带有插值的源参数?我希望这样: module "lambda" { source = "../${this.name}" regio

我已经定义了以下地形模块:

module "lambda" {
  source                = "../lambda"
  region                =  "us-west-1"
  account               = "${var.account}"
}
如何利用模块名称设置带有插值的
参数?我希望这样:

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

我认为这是不可能的。有一个允许您在资源中引用属性的标识符,但该标识符不是属性。此外,
self
仅允许在供应器中使用

我想实现您想要的唯一方法是模板化
.tf
文件,如:

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

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

我不相信你能做到-你给它起的名字变成了一个隐式的“变量”,你可以在脚本的其他地方使用,因此如果你的模块在这里有一个
xyz
的输出,您可以通过
module.lambda.xyz
引用它-我认为在这上面没有其他插值层。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选民。这看起来是一段有用的代码,但它只在模块内部起作用。最初的问题是询问如何访问模块块中的名称。
locals {
  module = basename(abspath(path.module))
}

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