Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Te recomendamos que utilices la paginación cuando llames a acciones que puedan arrojar un gran número de resultados, como: DescribeInstances
El uso de la paginación limita el número de elementos devueltos por una llamada de descripción y el tiempo que tarda en devolverse la llamada. Si dispone de una gran cantidad de recursos, es posible que las llamadas no paginadas se limiten y se agote el tiempo de espera. Por lo tanto, la latencia general es mejor con las llamadas paginadas que con las no paginadas, ya que las llamadas paginadas se realizan correctamente de forma constante.
Para obtener más información, consulta Paginación en Amazon EC2 API Reference.
Prácticas recomendadas
Siempre que sea posible, especifique una lista de recursos IDs en la descripción de las llamadas. Esta es la forma más rápida de describir una gran cantidad de recursos. Tenga en cuenta que no debe especificar más de 1000 IDs en una sola llamada. A continuación se muestra un ejemplo.
private List<Reservation> describeMyInstances(List<String> ids){
if (ids == null || ids.isEmpty()) {
return ImmutableList.of();
}
final DescribeInstancesRequest request = new DescribeInstancesRequest()
.withInstanceIds(ids);
return ec2.describeInstances(request).getReservations();
}
Si no puedes especificar un recurso IDs en la descripción de las llamadas, te recomendamos encarecidamente que utilices la paginación. A continuación se muestra un ejemplo.
private List<Reservation> describeMyInstances(final Collection<Filter> filters){
final DescribeInstancesRequest request = new DescribeInstancesRequest()
.withFilters(filters)
.withMaxResults(1000);
List<Reservation> reservations = new ArrayList<>();
String nextToken = null;
do {
request.setNextToken(nextToken);
final DescribeInstancesResult response = ec2.describeInstances(request);
reservations.addAll(response.getReservations());
nextToken = response.getNextToken();
} while (nextToken != null);
return reservations;
}
Si necesitas volver a intentar una llamada paginada, utiliza el retardo exponencial con fluctuación.
Problemas comunes
Los siguientes son ejemplos de código que realiza llamadas no paginadas de forma inadvertida.
ejemplo Ejemplo de problema: pasar una lista vacía de recursos IDs
El código siguiente usa una lista deIDs. Sin embargo, si la lista está vacía, el resultado es una llamada sin paginar.
private List<Reservation> describeMyInstances(List<String> ids){
final DescribeInstancesRequest request = new DescribeInstancesRequest()
.withInstanceIds(ids);
return ec2.describeInstances(request).getReservations();
}
Para corregir este problema, asegúrese de que la lista no esté vacía antes de realizar la llamada descrita.
private List<Reservation> describeMyInstances(List<String> ids){
if (ids == null || ids.isEmpty()) {
return ImmutableList.of();
// OR
return Lists.newArrayList();
// OR
return new ArrayList<>();
}
final DescribeInstancesRequest request = new DescribeInstancesRequest()
.withInstanceIds(ids);
return ec2.describeInstances(request).getReservations();
}
ejemplo Problema de ejemplo: no configurar MaxResults
El siguiente código comprueba y utilizanextToken
, pero no estableceMaxResults
.
private List<Reservation> describeMyInstances(final Collection<Filter> filters){
final DescribeInstancesRequest request = new DescribeInstancesRequest()
.withFilters(filters);
List<Reservation> reservations = new ArrayList<>();
String nextToken = null;
do {
request.setNextToken(nextToken);
final DescribeInstancesResult response = ec2.describeInstances(request);
reservations.addAll(response.getReservations());
nextToken = response.getNextToken();
} while (nextToken != null);
return reservations;
}
Para corregir este problema, añada withMaxResults
lo siguiente.
private List<Reservation> describeMyInstances(final Collection<Filter> filters){
final DescribeInstancesRequest request = new DescribeInstancesRequest()
.withFilters(filters)
.withMaxResults(1000);
List<Reservation> reservations = new ArrayList<>();
String nextToken = null;
do {
request.setNextToken(nextToken);
final DescribeInstancesResult response = ec2.describeInstances(request);
reservations.addAll(response.getReservations());
nextToken = response.getNextToken();
} while (nextToken != null);
return reservations;
}