{"record":{"id":"b667763711c925dd","repo":"kubernetes/kops","slug":"error-describing-instances-v","errorCode":null,"errorMessage":"error describing instances: %v","messagePattern":"error describing instances: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/resources/aws/aws.go","lineNumber":380,"sourceCode":"func ListInstances(cloud fi.Cloud, vpcID, clusterName string) ([]*resources.Resource, error) {\n\tctx := context.TODO()\n\tc := cloud.(awsup.AWSCloud)\n\n\tklog.V(2).Infof(\"Querying EC2 instances\")\n\tfilters := BuildEC2Filters(cloud)\n\tfilters = append(filters, awsup.NewEC2Filter(\"vpc-id\", vpcID))\n\tfilters = append(filters, awsup.NewEC2Filter(\"instance-state-name\", string(ec2types.InstanceStateNameRunning)))\n\trequest := &ec2.DescribeInstancesInput{\n\t\tFilters: filters,\n\t}\n\n\tvar resourceTrackers []*resources.Resource\n\n\tpaginator := ec2.NewDescribeInstancesPaginator(c.EC2(), request)\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error describing instances: %v\", err)\n\t\t}\n\t\tfor _, reservation := range page.Reservations {\n\t\t\tfor _, instance := range reservation.Instances {\n\t\t\t\tid := aws.ToString(instance.InstanceId)\n\n\t\t\t\tresourceTracker := &resources.Resource{\n\t\t\t\t\tName:         FindName(instance.Tags),\n\t\t\t\t\tID:           id,\n\t\t\t\t\tType:         string(ec2types.ResourceTypeInstance),\n\t\t\t\t\tGroupDeleter: DeleteInstances,\n\t\t\t\t\tGroupKey:     fi.ValueOf(instance.SubnetId),\n\t\t\t\t\tDumper:       DumpInstance,\n\t\t\t\t\tObj:          instance,\n\t\t\t\t}\n\n\t\t\t\tvar blocks []string\n\t\t\t\tblocks = append(blocks, \"subnet:\"+aws.ToString(instance.SubnetId))\n\t\t\t\tblocks = append(blocks, \"vpc:\"+aws.ToString(instance.VpcId))","sourceCodeStart":362,"sourceCodeEnd":398,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/resources/aws/aws.go#L362-L398","documentation":"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.","triggerScenarios":"DescribeInstances returns AuthFailure (bad credentials/region), UnauthorizedOperation (missing ec2:DescribeInstances), Throttling/RequestLimitExceeded, or transient network/5xx errors during pagination.","commonSituations":"Expired or mis-scoped AWS credentials (AWS_PROFILE/region mismatch), IAM policies without ec2:DescribeInstances, heavy parallel kops usage hitting EC2 rate limits.","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"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// pre-flight: verify credentials and permissions before listing\nout, err := sts.GetCallerIdentity(ctx, &sts.GetCallerIdentityInput{})\nif err != nil {\n\treturn fmt.Errorf(\"AWS credentials invalid: %w\", err)\n}\n_, err = ec2Client.DescribeInstances(ctx, &ec2.DescribeInstancesInput{MaxResults: aws.Int32(5)})\nif err != nil {\n\treturn fmt.Errorf(\"EC2 DescribeInstances preflight failed: %w\", err)\n}","typeGuard":null,"tryCatchPattern":"instances, err := ListInstances(ctx, c, clusterName)\nif err != nil {\n\tif isThrottling(err) { // e.g. code RequestLimitExceeded / Throttling\n\t\ttime.Sleep(2 * time.Second)\n\t\tinstances, err = ListInstances(ctx, c, clusterName)\n\t}\n\tif err != nil {\n\t\treturn fmt.Errorf(\"instance listing failed: %w\", err)\n\t}\n}","preventionTips":["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"],"tags":["aws","ec2","api-error","pagination"],"backgroundTag":"aws-api-error","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}