in internal/deployers/eksapi/node.go [626:655]
func (m *nodeManager) getValidAvailabilityZonesFilter(opts *deployerOptions, infra *Infrastructure) ([]string, error) {
if !opts.EFA {
// no filter needed, leaves scheduling to EC2 provisioner
return []string{}, nil
}
describeFilters := []ec2types.Filter{
{
Name: aws.String("instance-type"),
Values: opts.InstanceTypes,
},
{
Name: aws.String("location"),
Values: infra.availabilityZones,
},
}
describeResponse, err := m.clients.EC2().DescribeInstanceTypeOfferings(context.TODO(), &ec2.DescribeInstanceTypeOfferingsInput{
Filters: describeFilters,
LocationType: ec2types.LocationTypeAvailabilityZone,
})
if err != nil {
return nil, fmt.Errorf("failed to describe instance type offerings: %v", err)
}
if describeResponse == nil || len(describeResponse.InstanceTypeOfferings) == 0 {
return nil, fmt.Errorf("no instance type offerings in current region with filters %v", describeFilters)
}
// EFA traffic cannot cross an AZ https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html#efa-limits
targetAZ := aws.ToString(describeResponse.InstanceTypeOfferings[0].Location)
klog.Infof("Found availability zone %q with offering for instance types %v", targetAZ, opts.InstanceTypes)
return []string{targetAZ}, nil
}