

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.

# Gestión de errores
<a name="error-handling"></a>

 En esta sección se describen los errores de tiempo de ejecución y se explica cómo controlarlos. También se describen los mensajes y códigos de error específicos de Amazon Rekognition.

**Topics**
+ [Componentes de un error](#error-handling.Components)
+ [Mensajes y códigos de error](#error-handling.MessagesAndCodes)
+ [Control de errores en la aplicación](#error-handling.Handling)

## Componentes de un error
<a name="error-handling.Components"></a>

Cuando el programa envía una solicitud, Amazon Rekognition intenta procesarla. Si la solicitud se lleva a cabo correctamente, Amazon Rekognition devuelve un código de estado HTTP de operación correcta (`200 OK`), así como el resultado de la operación solicitada.

Si la solicitud no se realiza correctamente, Amazon Rekognition devuelve un error. Cada error tiene tres componentes: 
+ Un código de estado HTTP (por ejemplo, `400`).
+ Un nombre de excepción (por ejemplo, `InvalidS3ObjectException`).
+ Un mensaje de error (por ejemplo, `Unable to get object metadata from S3. Check object key, region and/or access permissions.`).

AWS se SDKs encarga de propagar los errores a su aplicación para que pueda tomar las medidas adecuadas. Por ejemplo, en un programa en Java, puede escribir una lógica `try-catch` para controlar una excepción `ResourceNotFoundException`.

Si no utiliza un SDK de AWS, tiene que analizar el contenido de la respuesta de bajo nivel de Amazon Rekognition. A continuación se muestra un ejemplo de este tipo de respuesta:

```
HTTP/1.1 400 Bad Request
Content-Type: application/x-amz-json-1.1
Date: Sat, 25 May 2019 00:28:25 GMT
x-amzn-RequestId: 03507c9b-7e84-11e9-9ad1-854a4567eb71
Content-Length: 222
Connection: keep-alive

{"__type":"InvalidS3ObjectException","Code":"InvalidS3ObjectException","Logref":"5022229e-7e48-11e9-9ad1-854a4567eb71","Message":"Unable to get object metadata from S3. Check object key, region and/or access permissions."}
```

## Mensajes y códigos de error
<a name="error-handling.MessagesAndCodes"></a>

A continuación se muestra una lista de excepciones que devuelve Amazon Rekognition, agrupados por su código de estado HTTP. Si *¿Reintentar?* es *Sí*, puede volver a enviar la misma solicitud. Si *¿Reintentar?* es *No*, debe corregir el problema en el lado del cliente antes de volver a enviar la solicitud.

### Código de estado HTTP 400
<a name="error-handling.MessagesAndCodes.http400"></a>

Un código de estado HTTP `400` indica un problema con su solicitud. Algunos ejemplos de problemas son errores de autenticación, parámetros requeridos que faltan o que superan el rendimiento aprovisionado de una operación. Debe corregir el problema en la aplicación antes de volver a enviar la solicitud.

**AccessDeniedException **  
Mensaje: *Se produjo un error (AccessDeniedException) al llamar a la operación: El usuario: no está autorizado a realizar: en el recurso:.* <Operation><User ARN><Operation><Resource ARN>  
No tiene autorización para realizar la acción. Utilice el nombre de recurso de Amazon (ARN) de un usuario autorizado o un rol de IAM para realizar la operación.  
¿Reintentar? No

**GroupFacesInProgressException **  
Mensaje: *No se pudo programar el GroupFaces trabajo. Existe un trabajo de agrupación de rostros para esta colección.*  
Vuelva a intentar la operación después de que finalice el trabajo existente.  
¿Reintentar? No

**IdempotentParameterMismatchException **  
Mensaje: *El ClientRequestToken: que ha suministrado ya está en uso.* <Token>  
Se reutilizó un parámetro de ClientRequestToken entrada con una operación, pero al menos uno de los demás parámetros de entrada es diferente al de la llamada anterior a la operación.  
¿Reintentar? No

**ImageTooLargeException **  
Mensaje: *El tamaño de la imagen es demasiado grande.*  
La imagen de entrada tamaño supera el límite permitido. Si llama [DetectProtectiveEquipment](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectProtectiveEquipment.html), el tamaño o la resolución de la imagen superan el límite permitido. Para obtener más información, consulte [Directrices y cuotas en Amazon Rekognition](limits.md).  
¿Reintentar? No

**InvalidImageFormatException **  
Mensaje: *La solicitud tiene un formato de imagen no válido.*  
No se admite el formato de imagen proporcionado. Utilice un formato de imagen admitido (.JPEG y.PNG). Para obtener más información, consulte [Directrices y cuotas en Amazon Rekognition](limits.md).  
¿Reintentar? No

**InvalidPaginationTokenException **  
Mensajes  
+ *Token no válido*
+ *Token de paginación no válido*
El token de paginación de la solicitud no es válido. El token podría estar caducado.   
¿Reintentar? No 

**InvalidParameterException **  
Mensaje: *La solicitud tiene parámetros no válidos.*  
Un parámetro de entrada infringió una restricción. Valide los parámetros antes de llamar a la operación de la API de nuevo.  
¿Reintentar? No

**S3 no válido ObjectException **  
Mensajes:  
+ *La solicitud tiene un objeto de S3 no válido.*
+ *No se pueden obtener los metadatos de objeto desde S3. Compruebe la clave del objeto y los permisos de and/or acceso a la región.*
Amazon Rekognition no puede obtener acceso al objeto de S3 que se especificó en la solicitud. Para obtener más información, consulte [Configuración del acceso a S3: administración del acceso de AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). Para obtener información sobre la solución de problemas, consulte [Solución de problemas de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/troubleshooting.html).  
¿Reintentar? No

**LimitExceededException **  
Mensajes:  
+ *Se ha superado el límite de procesador de flujo para la cuenta, límite: <límite actual>*
+ * <Número de trabajos abiertos> trabajos abiertos para el usuario <ARN de usuario>, límite máximo: <límite máximo> *
Se ha superado el límite de servicio de Amazon Rekognition. Por ejemplo, si inicia demasiados trabajos de Amazon Rekognition Vídeo al mismo tiempo, las llamadas para iniciar operaciones, como `StartLabelDetection`, generan una excepción `LimitExceededException` (código de estado HTTP: 400) hasta que el número de trabajos que se ejecutan al mismo tiempo esté por debajo del límite de servicio de Amazon Rekognition.  
¿Reintentar? No

**ProvisionedThroughputExceededException **  
Mensajes:  
+ *Se ha superado la tasa aprovisionada.*
+ *Se ha superado el límite de descarga de S3.*
El número de solicitudes ha superado su límite de rendimiento. Para obtener más información, consulte [Límites de servicio de Amazon Rekognition](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_rekognition).  
Para solicitar un aumento de los límites, siga las instrucciones de [Crear un caso para cambiar las cuotas de TPS](limits.md#quotas-create-case).  
¿Reintentar? Sí

**ResourceAlreadyExistsException **  
Mensaje: *El ID de colección <ID de colección> ya existe.*  
 Ya existe una colección con el ID especificado.  
¿Reintentar? No

**ResourceInUseException **  
Mensajes:  
+ *Nombre del procesador de flujo ya en uso.*
+ *El recurso especificado está en uso.*
+ *El procesador no está disponible para detener el flujo.*
+ *No se puede eliminar el procesador de flujos.*
Vuelva a intentarlo cuando el recurso esté disponible.  
¿Reintentar? No

**ResourceNotFoundException **  
Mensaje: Varios mensajes en función de la llamada a la API.  
El recurso especificado no existe.  
¿Reintentar? No

**ThrottlingException **  
Mensaje: *Vaya más despacio; aumento repentino de la tasa de solicitudes.*  
Su tasa de aumento de solicitudes es demasiado rápida. Reduzca la tasa de solicitudes y auméntela gradualmente. Le recomendamos que interrumpa exponencialmente y vuelva a intentarlo. De forma predeterminada, AWS SDKs utilizan la lógica de reintento automático y el retroceso exponencial. Para obtener más información, consulte [Reintentos de error y retardo exponencial en AWS](https://docs.aws.amazon.com/general/latest/gr/api-retries.html) y [Retardo exponencial y fluctuación](http://www.awsarchitectureblog.com/2015/03/backoff.html).   
¿Reintentar? Sí

**VideoTooLargeException **  
Mensaje: *El tamaño del vídeo en bytes: <Tamaño de vídeo> es mayor que el límite máximo de: <Tamaño máximo> bytes.*  
El tamaño del archivo o la duración del medio suministrado es demasiado grande. Para obtener más información, consulte [Directrices y cuotas en Amazon Rekognition](limits.md).  
¿Reintentar? No

### Código de estado HTTP 5xx
<a name="error-handling.MessagesAndCodes.http5xx"></a>

Un código de estado HTTP `5xx` indica un problema cuya resolución corresponde a AWS. Posiblemente sea un error temporal. Si lo es, puede volver a intentar su solicitud hasta que se ejecute satisfactoriamente. En caso contrario, vaya al [Panel de estado del servicio de AWS](https://status.aws.amazon.com/) para comprobar si existe algún problema funcional con el servicio.

**InternalServerError (HTTP 500) **  
Mensaje: *Error de servidor interno*  
Amazon Lex ha tenido un problema de servicio. Pruebe la llamada de nuevo. Debe efectuar una interrupción exponencial y volver a intentarlo. De forma predeterminada, AWS SDKs utilizan la lógica de reintento automático y el retroceso exponencial. Para obtener más información, consulte [Reintentos de error y retardo exponencial en AWS](https://docs.aws.amazon.com/general/latest/gr/api-retries.html) y [Retardo exponencial y fluctuación](http://www.awsarchitectureblog.com/2015/03/backoff.html).  
¿Reintentar? Sí

**ThrottlingException (HTTP 500)**  
Mensaje: *Servicio no disponible*  
Amazon Lex no puede procesar temporalmente la solicitud. Pruebe la llamada de nuevo. Le recomendamos que interrumpa exponencialmente y vuelva a intentarlo. De forma predeterminada, AWS SDKs utilizan la lógica de reintento automático y el retroceso exponencial. Para obtener más información, consulte [Reintentos de error y retardo exponencial en AWS](https://docs.aws.amazon.com/general/latest/gr/api-retries.html) y [Retardo exponencial y fluctuación](http://www.awsarchitectureblog.com/2015/03/backoff.html).   
¿Reintentar? Sí

## Control de errores en la aplicación
<a name="error-handling.Handling"></a>

Para que la aplicación funcione sin problemas, debe añadir lógica que capture los errores y responda a ellos. Los enfoques habituales incluyen el uso de bloques `try-catch` o instrucciones `if-then`.

La AWS SDKs realiza sus propios reintentos y comprobaciones de errores. Si se produce un error al utilizar uno de los sistemas de AWS SDKs, el código y la descripción del error pueden ayudarle a solucionarlo. 

También debería aparecer el `Request ID` en la respuesta. El `Request ID` puede resultar útil si tiene que acudir a AWS Support para diagnosticar el problema.

En el siguiente fragmento de código Java se intentan detectar objetos en una imagen y se realiza un control de errores rudimentario. En este caso, informa al usuario de que se ha producido un error en la solicitud. 

```
try {
    DetectLabelsResult result = rekognitionClient.detectLabels(request);
    List <Label> labels = result.getLabels();

    System.out.println("Detected labels for " + photo);
    for (Label label: labels) {
        System.out.println(label.getName() + ": " + label.getConfidence().toString());
    }
} 
catch(AmazonRekognitionException e) {
    System.err.println("Could not complete operation");
    System.err.println("Error Message:  " + e.getMessage());
    System.err.println("HTTP Status:    " + e.getStatusCode());
    System.err.println("AWS Error Code: " + e.getErrorCode());
    System.err.println("Error Type:     " + e.getErrorType());
    System.err.println("Request ID:     " + e.getRequestId());
}
catch (AmazonClientException ace) {
    System.err.println("Internal error occurred communicating with Rekognition");
    System.out.println("Error Message:  " + ace.getMessage());
}
```

En este fragmento de código, la construcción `try-catch` controla dos tipos de excepciones diferentes:
+ `AmazonRekognitionException`: esta excepción se produce si la solicitud del cliente se ha transmitido correctamente a Amazon Rekognition, pero éste no ha podido procesarla y ha devuelto una respuesta de error.
+ `AmazonClientException`: esta excepción se genera si el cliente no ha podido obtener una respuesta de un servicio o sí la ha obtenido pero no ha podido analizarla.