terraform - 在另一个模块或资源中使用输出
问题描述
我已经看到很多关于将模块的输出传递到另一个模块的帖子。出于某种原因,我无法让它工作。
我可以毫无问题地获得模块的输出
$ terraform output this_sg_id = sg-xxxxxxxxxxxxxxxxx
但是,当我调用资源中的模块或另一个模块时,它会要求我提供安全组 ID。
$ terraform plan var.vpc_security_group_ids Security Group ID Enter a value:
这是我的文件结构:
── dev │ └── service │ └── dev_instance │ ├── main.tf │ ├── outputs.tf │ ├── variables.tf ├── modules │ ├── ec2 │ │ ├── build_ec2.tf │ │ ├── outputs.tf │ │ └── variables.tf │ └── sg │ ├── build_sg.tf │ ├── outputs.tf │ └── variables.tf
不确定这是否正确,但在 dev/service/dev_instance/main.tf 中:
module "build_sg" { source = "../../../modules/sg/" vpc_id = var.vpc_id sg_name = var.sg_name sg_description = var.sg_description sg_tag = var.sg_tag sg_tcp_ports = var.sg_tcp_ports sg_tcp_cidrs = var.sg_tcp_cidrs sg_udp_ports = var.sg_udp_ports sg_udp_cidrs = var.sg_udp_cidrs sg_all_ports = var.sg_all_ports sg_all_cidrs = var.sg_all_cidrs } module "build_ec2" { source = "../../../modules/ec2/" vpc_security_group_ids = ["${module.build_sg.this_sg_id}"] }
在 dev/service/dev_instance/output.tf 中:
output "this_sg_id" { description = "The security group ID" value = "${module.build_sg.this_sg_id}" }
我的 ec2 模块 build_ec2.tf 文件具有以下内容:
resource "aws_instance" "ec2" { vpc_security_group_ids = ["${module.build_sg.this_sg_id}"] }
解决方案
你有一个var "vpc_security_group_ids"
定义的地方,我假设在你的一个variables.tf
文件中。Terraform 不会自动知道用模块的输出填充它。您需要删除var
定义并仅在模板中使用模块输出引用。
变量用于从命令行传入值。它们不以任何方式绑定到模块输出。如果您希望值来自您正在使用的模块,那么您不应该将该值也定义为变量。
推荐阅读
- mysql - 如何使用 Laravel eloquent 选择子查询并做 UNION?
- javascript - 固定位置的div内的内容只能滚动一半的内容
- django - 如何根据 request.user 限制 Django 过滤器的选择
- javascript - 有什么方法可以根据文本更改 igx-grid-cell 的文本颜色
- vb.net - 如何对数据表中的列求和并使用 DataTable.Compute 进行检查?
- reactjs - 如何使用 Jest 和 Enzyme 对在其 useEffect 函数中有 API 调用的 React 组件进行单元测试
- node.js - 尝试在打字稿中使用猫鼬和 bcrypt 比较密码
- java - 如何集成可扩展的浮动操作按钮
- node.js - Pusher 调试控制台未在 NodeJS、MongoDB 中显示我的事件
- python - 如何使用循环查找索引方法。不使用内置方法