func filterSubnetsWithNATorTransitGatewayTargets()

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
}