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没有问题。不,它是从我的模块一级调用的。但显然有点不对劲,因为我得到的错误是它需要在根模块中声明。