Terraform 嵌套模块中联机嵌套模块的引用输出

Terraform 嵌套模块中联机嵌套模块的引用输出,terraform,Terraform,我有以下文件结构: ├── lambda │   ├── main.tf ├── main.tf main.tf从lambda文件夹中创建my\u custom\u lambda\u函数模块 module "my_custom_lambda_function" { source = "./lambda" function_name = "some-name" } 然后,我在lambda中有一个嵌套模块,它引用了一个在线模块:

我有以下文件结构:

├── lambda
│   ├── main.tf
├── main.tf
main.tf
lambda
文件夹中创建
my\u custom\u lambda\u函数
模块

module "my_custom_lambda_function" {
  source = "./lambda"
  function_name = "some-name"
}
然后,我在
lambda
中有一个嵌套模块,它引用了一个在线模块:

# lambda/main.tf
variable "function_name" {
  type = string
}

module "lambda_template" {
  source = "terraform-aws-modules/lambda/aws"
  function_name = "{var.function_name}"
}
我需要从
模块.my_custom_lambda_函数
访问模块
模块.lambda_模板
中的输出。但是,当我尝试这样做时:

# lambda/main.tf
output "function_arn" {
  value = module.lambda_template.this_lambda_function_arn
}
我得到以下错误:

No module call named "lambda_function" is declared in the root module.
这很有意义,因为此语法指的是根目录中的模块。但是我想访问与我当前所在的模块相对应的模块。我还没有找到这样做的方法。比如:

# lambda/main.tf
output "function_arn" {
  value = module.${this}.module.lambda_function.this_lambda_function_arn
}
其中,
的值将是
my\u custom\u lambda\u函数


这段代码不是有效的语法,但它表达了我需要的东西。在Terraform中是否有这样做的方法?

基于评论和聊天讨论

我试图复制设置,但我发现它没有任何问题。一切正常


它现在也适用于OP。在聊天讨论中,该问题可能是由模块或输出名称中的拼写错误引起的。

您能澄清您的设置吗?如果您编写的
输出“function\u name”
位于
A/main.tf
中,则所有功能都应该正常工作。如何使用
main.tf
?它不会显示在您的代码中。您在
main.tf
中如何创建
模块“A”
?嘿@Marcin我继续并添加了一些说明。本质上,我需要访问嵌套两层的模块的输出。因此,
module.${this}.module.lambda_函数。这个lambda_函数的名称
是从根
main.tf
调用的,或者您编写的
a/main.tf
调用的?或者,您的根
main.tf
是什么。你的
lambda/main.tf没有问题。不,它是从我的模块一级调用的。但显然有点不对劲,因为我得到的错误是它需要在根模块中声明。