func (be *AwsVpcBackend) detectRouteTableID(instanceID string, ec2c *ec2.EC2) (string, error) { instancesInput := &ec2.DescribeInstancesInput{ InstanceIds: []*string{&instanceID}, } resp, err := ec2c.DescribeInstances(instancesInput) if err != nil { return "", fmt.Errorf("error getting instance info: %v", err) } if len(resp.Reservations) == 0 { return "", fmt.Errorf("no reservations found") } if len(resp.Reservations[0].Instances) == 0 { return "", fmt.Errorf("no matching instance found with id: %v", instanceID) } subnetID := resp.Reservations[0].Instances[0].SubnetId vpcID := resp.Reservations[0].Instances[0].VpcId log.Info("Subnet-ID: ", *subnetID) log.Info("VPC-ID: ", *vpcID) filter := newFilter() filter.Add("association.subnet-id", *subnetID) routeTablesInput := &ec2.DescribeRouteTablesInput{ Filters: filter, } res, err := ec2c.DescribeRouteTables(routeTablesInput) if err != nil { return "", fmt.Errorf("error describing routeTables for subnetID %s: %v", *subnetID, err) } if len(res.RouteTables) != 0 { return *res.RouteTables[0].RouteTableId, nil } filter = newFilter() filter.Add("association.main", "true") filter.Add("vpc-id", *vpcID) routeTablesInput = &ec2.DescribeRouteTablesInput{ Filters: filter, } res, err = ec2c.DescribeRouteTables(routeTablesInput) if err != nil { log.Info("error describing route tables: ", err) } if len(res.RouteTables) == 0 { return "", fmt.Errorf("main route table not found") } return *res.RouteTables[0].RouteTableId, nil }