kubernetes/kops · error
error describing instances: %v
Error message
error describing instances: %v
What it means
ListInstances paginates EC2 DescribeInstances; any failure fetching a page is wrapped as 'error describing instances: %v', aborting the resource listing. This is used when enumerating instances for `kops delete cluster` / rolling-update inspection.
Source
Thrown at pkg/resources/aws/aws.go:380
func ListInstances(cloud fi.Cloud, vpcID, clusterName string) ([]*resources.Resource, error) {
ctx := context.TODO()
c := cloud.(awsup.AWSCloud)
klog.V(2).Infof("Querying EC2 instances")
filters := BuildEC2Filters(cloud)
filters = append(filters, awsup.NewEC2Filter("vpc-id", vpcID))
filters = append(filters, awsup.NewEC2Filter("instance-state-name", string(ec2types.InstanceStateNameRunning)))
request := &ec2.DescribeInstancesInput{
Filters: filters,
}
var resourceTrackers []*resources.Resource
paginator := ec2.NewDescribeInstancesPaginator(c.EC2(), request)
for paginator.HasMorePages() {
page, err := paginator.NextPage(ctx)
if err != nil {
return nil, fmt.Errorf("error describing instances: %v", err)
}
for _, reservation := range page.Reservations {
for _, instance := range reservation.Instances {
id := aws.ToString(instance.InstanceId)
resourceTracker := &resources.Resource{
Name: FindName(instance.Tags),
ID: id,
Type: string(ec2types.ResourceTypeInstance),
GroupDeleter: DeleteInstances,
GroupKey: fi.ValueOf(instance.SubnetId),
Dumper: DumpInstance,
Obj: instance,
}
var blocks []string
blocks = append(blocks, "subnet:"+aws.ToString(instance.SubnetId))
blocks = append(blocks, "vpc:"+aws.ToString(instance.VpcId))View on GitHub (pinned to 4c8573c808)
Solutions
- Read the wrapped cause for the AWS error code; fix credentials/region if AuthFailure
- Add ec2:DescribeInstances to the IAM policy/instance profile in use
- Re-run after a pause if the cause is throttling; reduce concurrent jobs
- Use `aws ec2 describe-instances` with the same credentials to validate access outside kops
Defensive patterns
Strategy: retry
Validate before calling
// pre-flight: verify credentials and permissions before listing
out, err := sts.GetCallerIdentity(ctx, &sts.GetCallerIdentityInput{})
if err != nil {
return fmt.Errorf("AWS credentials invalid: %w", err)
}
_, err = ec2Client.DescribeInstances(ctx, &ec2.DescribeInstancesInput{MaxResults: aws.Int32(5)})
if err != nil {
return fmt.Errorf("EC2 DescribeInstances preflight failed: %w", err)
} Try / catch
instances, err := ListInstances(ctx, c, clusterName)
if err != nil {
if isThrottling(err) { // e.g. code RequestLimitExceeded / Throttling
time.Sleep(2 * time.Second)
instances, err = ListInstances(ctx, c, clusterName)
}
if err != nil {
return fmt.Errorf("instance listing failed: %w", err)
}
} Prevention
- Run `aws sts get-caller-identity` and a small `aws ec2 describe-instances` to preflight credentials/region
- Grant ec2:DescribeInstances in the kops IAM policy
- Back off on throttling; reduce concurrent kops operations against the same account
When it happens
Trigger: DescribeInstances returns AuthFailure (bad credentials/region), UnauthorizedOperation (missing ec2:DescribeInstances), Throttling/RequestLimitExceeded, or transient network/5xx errors during pagination.
Common situations: Expired or mis-scoped AWS credentials (AWS_PROFILE/region mismatch), IAM policies without ec2:DescribeInstances, heavy parallel kops usage hitting EC2 rate limits.
Related errors
- error listing AutoScaling LaunchTemplates: %v
- describing instance for arn %q
- error terminating instances: %v
- error describing addresses: %v
- error describing volumes: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/b667763711c925dd.
Report an issue: GitHub.