in cmd/resource/aws.go [276:328]
func filterSubnetsWithNATorTransitGatewayTargets(ec2client ec2iface.EC2API, subnets []*string) (filtered []*string, err error) {
resp, err := ec2client.DescribeSubnets(&ec2.DescribeSubnetsInput{
SubnetIds: subnets,
})
if err != nil {
return filtered, err
}
for _, subnet := range resp.Subnets {
resp, err := ec2client.DescribeRouteTables(&ec2.DescribeRouteTablesInput{
Filters: []*ec2.Filter{
{
Name: aws.String("association.subnet-id"),
Values: []*string{subnet.SubnetId},
},
{
Name: aws.String("vpc-id"),
Values: []*string{subnet.VpcId},
},
},
})
if err != nil {
return filtered, err
}
if IsZero(resp.RouteTables) {
resp, err = ec2client.DescribeRouteTables(&ec2.DescribeRouteTablesInput{
Filters: []*ec2.Filter{
{
Name: aws.String("association.main"),
Values: []*string{aws.String("true")},
},
{
Name: aws.String("vpc-id"),
Values: []*string{subnet.VpcId},
},
},
})
if err != nil {
return filtered, err
}
}
for _, route := range resp.RouteTables[0].Routes {
if route.NatGatewayId != nil || route.TransitGatewayId != nil {
filtered = append(filtered, subnet.SubnetId)
break
}
}
}
if len(filtered) > LambdaMaxSubnets {
log.Printf("Found more subnets than the Lambda supported limit... Limiting the subnet to %v", LambdaMaxSubnets)
return getMaxSubnets(ec2client, filtered, LambdaMaxSubnets)
}
return filtered, err
}