I'm in the process of converting a legacy aws setup into Terraform and have the following:
ci
- main.tf
ci/worker
- main.tf
In ci I have an aws security group which I want to reference in my submodules. Currently I have:
vpc_security_group_ids = ["${aws_security_group.vpc-idhere.id}"]
Which errors with:
A managed resource "aws_security_group" "vpc-idhere" has not been declared in ci-workers.
The security group is defined in ci/main.tf
How do I correctly reference a resource in a sub module?
Best Answer
When calling across module boundaries you need to use variables/outputs to pass references to resources; modules can't peek inside other modules.
So your
ci-workers
module will need to declare an input variable such as:You then use
${var.vpc_security_group_ids}
within the module. Then when you instantiate this module, you can pass in the IDs from the parent:See the module documentation for more information.