code: func (s *awsSdkEC2) DescribeInstances(request *ec2.DescribeInstancesInput) ([]*ec2.Instance, error) {
  	// Instances are paged
  	results := []*ec2.Instance{}
  	var nextToken *string
  	requestTime := time.Now()
  	for {
  		response, err := s.ec2.DescribeInstances(request)
  		if err != nil {
  			recordAWSMetric("describe_instance", 0, err)
  			return nil, fmt.Errorf("error listing AWS instances: %q", err)
  		}
  
  		for _, reservation := range response.Reservations {
  			results = append(results, reservation.Instances...)
  		}
  
  		nextToken = response.NextToken
  		if aws.StringValue(nextToken) == "" {
  			break
  		}
  		request.NextToken = nextToken
  	}
  	timeTaken := time.Since(requestTime).Seconds()
  	recordAWSMetric("describe_instance", timeTaken, nil)
  	return results, nil
  }
docs: // Implementation of EC2.Instances