Control de errores - Amazon Rekognition

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.

Control de errores

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.

Componentes de un error

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.).

Los SDK de AWS se encargan de transmitir los errores a la aplicación, para que pueda adoptar las medidas apropiadas. 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 continuación se muestra una lista de excepciones que devuelve Amazon Rekognition, agrupados por su código de estado HTTP. Si ¿Reintentar? es , 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

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 <Operación>: el usuario: <ARN de usuario> no está autorizado para realizar: <Operación> en el recurso: <ARN de recurso>

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 trabajo GroupFaces. 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: <Token> que ha solicitado ya está en uso.

Se ha reutilizado un parámetro de entrada ClientRequestToken con una operación, pero al menos uno de los demás parámetros de entrada es distinto 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 a DetectProtectiveEquipment, 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.

¿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.

¿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

InvalidS3ObjectException

Mensajes:

  • La solicitud tiene un objeto de S3 no válido.

  • No se pueden obtener los metadatos de objeto desde S3. Compruebe la clave de objeto, la región o los permisos de acceso.

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. Para obtener información sobre la solución de problemas, consulte Solución de problemas de Amazon S3.

¿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.

Para solicitar un aumento de los límites, siga las instrucciones de Crear un caso para cambiar las cuotas de TPS.

¿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, los SDK de AWS usan una lógica de reintento automático y retardo exponencial. Para obtener más información, consulte Reintentos de error y retardo exponencial en AWS y Retardo exponencial y fluctuación.

¿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.

¿Reintentar? No

Código de estado HTTP 5xx

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 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, los SDK de AWS usan una lógica de reintento automático y retardo exponencial. Para obtener más información, consulte Reintentos de error y retardo exponencial en AWS y Retardo exponencial y fluctuación.

¿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, los SDK de AWS usan una lógica de reintento automático y retardo exponencial. Para obtener más información, consulte Reintentos de error y retardo exponencial en AWS y Retardo exponencial y fluctuación.

¿Reintentar? Sí

Control de errores en la aplicación

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.

Los AWS SDK llevan a cabo sus propios reintentos y comprobaciones de errores. Si se produce algún error al utilizar uno de los SDK de AWS, su código y descripción pueden ayudarle a solucionar el problema.

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.