kubernetes/kops · error

error listing resource record sets: %w

Error message

error listing resource record sets: %w

What it means

Zone rrset List() pages through Route53 ListResourceRecordSets for the hosted zone. Any paginator NextPage failure (API error, throttling, auth, networking) is wrapped with this message and returned to the caller.

Source

Thrown at dnsprovider/pkg/dnsprovider/providers/aws/route53/rrsets.go:47

// Compile time check for interface adherence
var _ dnsprovider.ResourceRecordSets = ResourceRecordSets{}

type ResourceRecordSets struct {
	zone *Zone
}

func (rrsets ResourceRecordSets) List() ([]dnsprovider.ResourceRecordSet, error) {
	input := &route53.ListResourceRecordSetsInput{
		HostedZoneId: rrsets.zone.impl.Id,
	}

	var list []dnsprovider.ResourceRecordSet
	paginator := route53.NewListResourceRecordSetsPaginator(rrsets.zone.zones.interface_.service, input)
	for paginator.HasMorePages() {
		page, err := paginator.NextPage(context.TODO())
		if err != nil {
			return nil, fmt.Errorf("error listing resource record sets: %w", err)
		}
		for _, rrset := range page.ResourceRecordSets {
			list = append(list, &ResourceRecordSet{&rrset, &rrsets})
		}
	}
	return list, nil
}

func (rrsets ResourceRecordSets) Get(name string) ([]dnsprovider.ResourceRecordSet, error) {
	// This list implementation is very similar to the one implemented in
	// the List() method above, but it restricts the retrieved list to
	// the records whose name match the given `name`.
	input := &route53.ListResourceRecordSetsInput{
		HostedZoneId:    rrsets.zone.impl.Id,
		StartRecordName: aws.String(name),
	}

	var list []dnsprovider.ResourceRecordSet

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check the wrapped error type; grant route53:ListResourceRecordSets on the zone if AccessDenied.
  2. Verify the hosted zone ID still exists (`aws route53 get-hosted-zone --id ...`).
  3. Retry on throttling — the SDK's standard retryer handles transient 5xx/throttle; reduce call rate if persistent.
  4. Refresh expired/invalid AWS credentials.
Defensive patterns

Strategy: retry

Validate before calling

// pre-flight IAM check
out, err := exec.Command("aws", "route53", "list-hosted-zones").Output()
if err != nil {
    return fmt.Errorf("route53 read access missing: %w", err)
}
_ = out

Try / catch

rrsets, err := zone.RecordSets().List()
if err != nil {
    var opErr *smithy.OperationError
    if errors.As(err, &opErr) && strings.Contains(err.Error(), "Throttling") {
        time.Sleep(backoff); // retry
    }
    if strings.Contains(err.Error(), "AccessDenied") {
        return fmt.Errorf("grant route53:ListResourceRecordSets: %w", err)
    }
}

Prevention

When it happens

Trigger: Calling List() on a Route53 zone when ListResourceRecordSetsPages fails: AccessDenied, Throttling, invalid hosted zone ID, or network failure.

Common situations: IAM policy lacking route53:ListResourceRecordSets; zone ID pointing to a deleted zone (NoSuchHostedZone); Route53 API throttling; expired credentials.

Related errors


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/357b9217579e4d70. Report an issue: GitHub.