我正在将旧的 aws 设置转换为 Terraform,并且具有以下内容:
ci
- main.tf
ci/worker
- main.tf
在 ci 中,我有一个 aws 安全组,我想在我的子模块中引用它。目前我有:
vpc_security_group_ids = ["${aws_security_group.vpc-idhere.id}"]
哪些错误:
A managed resource "aws_security_group" "vpc-idhere" has not been declared in ci-workers.
安全组在 ci/main.tf 中定义
如何正确引用子模块中的资源?
答案1
跨模块边界调用时,您需要使用变量/输出来传递对资源的引用;模块无法窥视其他模块内部。
因此您的ci-workers
模块需要声明一个输入变量,例如:
variable "vpc_security_group_ids" {
description = "List of VPC security group IDs"
type = list
}
然后在模块内使用${var.vpc_security_group_ids}
。然后,当您实例化此模块时,您可以传入父级的 ID:
module "ci-workers" {
source = "..."
vpc_security_group_ids = ["${aws_security_group.vpc-idhere.id}"]
}
查看模块文档了解更多信息。