Terraform 嵌套模块调用和输出
Posted
技术标签:
【中文标题】Terraform 嵌套模块调用和输出【英文标题】:Terraform Nested Module Calling and Outputs 【发布时间】:2019-06-16 20:49:19 【问题描述】:我正在处理基础架构配置,因此我将模块称为嵌套。
这是我的文件系统树。
├── main.tf
└── modules
├── client.tf
└── in
└── main.tf
我的文件如下所示。
#main.tf
module "my_vpc"
source = "./modules"
# modules/client.tf
provider "aws"
region = "us-east-2"
module "inner"
source = "./in"
# in/main.tf
provider "aws"
region = "us-east-2"
resource "aws_vpc" "main"
cidr_block = "10.0.0.0/16"
output "vpc_id"
value = "$aws_vpc.main.id"
所以在我的例子中,我想获得来自 in/main.tf 中资源创建模块的输出。但是当我运行 terraform apply 命令时没有输出。
我该如何解决这个问题?
【问题讨论】:
'Not a valid output for module' when using output variable with terraform的可能重复 【参考方案1】:您使用了两个模块,但只有一个输出语句。
./main.tf
从 ./modules/client.tf
创建模块 my_vpc
在client.tf
中,您从./modules/in/main.tf
创建模块inner
模块inner
有一个输出vpc_id
定义在./modules/in/main.tf
您还需要在./modules/client.tf
级别进行输出语句。您想要输出的任何模块都必须具有该变量的输出语句,即使输出链接内部模块的输出也是如此。
# ./modules/client.tf
provider "aws"
region = "us-east-2"
module "inner"
source = "./in"
output "vpc_id"
value = "$modules.inner.vpc_id"
现在./modules/client.tf
中定义的模块在顶层输出你想要的值。您可以像这样在./main.tf
中与它进行交互:
#main.tf
module "my_vpc"
source = "./modules"
locals
vpc_id = "$modules.my_vpc.vpc_id"
# output the vpc id if you need to
output "vpc_id"
value = "$modules.my_vpc.vpc_id"
附带说明,随着您扩大 terraform 和模块的使用,保持一致会有所帮助。如果您要在另一个模块中包含一个模块,我建议您使用一致的文件夹结构,如下所示。
├── main.tf
└── modules
├── vpc
├── modules
├ └── in
├ └── main.tf
└── client.tf
└── another_module
└── main.tf
【讨论】:
我也将输出称为嵌套,谢谢兄弟! 很高兴我能帮上忙,如果答案解决了您的问题,您能否将答案标记为已接受?以上是关于Terraform 嵌套模块调用和输出的主要内容,如果未能解决你的问题,请参考以下文章
Terraform 是不是支持带有少量操作的 CloudFormation 模板