Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How can I retrieve the subnets in a given VPC with Terraform?

I was trying to retrieve the subnets in a given VPC, in my case the default VPC, however I keep getting an error:

data "aws_vpc" "default_vpc" {
  default = true
}

data "aws_subnet" "subnets" {
  vpc_id = data.aws_vpc.default_vpc.id
}

output "subnets_out" {
  value = data.aws_subnet.subnets
}

Error: multiple EC2 Subnets matched; use additional constraints to reduce matches to a single EC2 Subnet

The first data call works, I get my default VPC id, however the second one fails.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Originally I had 1 subnet in my default VPC and at that time, the second data call worked too but to my surprise it returned the subnet as a map instead of a map within a set. So I was curious what would happen if there was more than one subnets in my VPC but then the data call failed.

What I find really confusing is that the Terraform documentation says:

This resource can be useful for getting back a set of subnet IDs.

If it’s supposed to return a set of subnet IDs, then why is it an issue that multiple subnets were matched?

>Solution :

aws_subnet is a resource for a specific subnet. Its not for a collection of subnets. so when you pass the VPC_ID, aws is finding more than one subnet in that VPC. Its not possible to store more than one subnets in aws_subnet

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnet

aws_subnet provides details about a specific VPC subnet.

It sounds like you should be using aws_subnets https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnets

This resource can be useful for getting back a set of subnet IDs.

This will return you a list of subnet ID’s which you can then use in a foreach in aws_subnet to get the specific details of each subnet

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading