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.ResourceRecordSetView on GitHub (pinned to 4c8573c808)
Solutions
- Check the wrapped error type; grant route53:ListResourceRecordSets on the zone if AccessDenied.
- Verify the hosted zone ID still exists (`aws route53 get-hosted-zone --id ...`).
- Retry on throttling — the SDK's standard retryer handles transient 5xx/throttle; reduce call rate if persistent.
- 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
- Grant route53:ListResourceRecordSets (and ListHostedZones) to the caller.
- Use exponential backoff for Throttling errors.
- Verify hosted zone IDs before querying.
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
- error fetching DNS HostedZone %q: %v
- error listing DNS HostedZones: %v
- error fetching DNS HostedZone by id %q: %v
- error creating DNS HostedZone %q: %v
- error applying DNS changeset for zone %s: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/357b9217579e4d70.
Report an issue: GitHub.