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 del error

Cuando el programa envía una solicitud, Amazon Rekognition intenta procesarla. Si la solicitud se realiza 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 devueltas por 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

: Message An error failed (AccessDeniedException) when calling the <Operation>operation: Usuario: <User ARN>no está autorizado a realizar: <Operation>en el recurso: <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

: Message 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

: Message 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

: Message El tamaño de la imagen es demasiado grande.

La imagen de entrada tamaño supera el límite permitido. Si estás llamandoDetectProtectiveEquipment, 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 de Amazon Rekognition.

¿Reintentar? No

InvalidImageFormatException

: Message 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 de 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

: Message 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, consulteConfigurar el acceso a S3: AWS S3 Administración del acceso. 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>.

  • <Number of Open Jobs>open Trabajos para el usuario <User ARN>Límite máximo: <Maximum Limit>

Se ha superado un límite de servicio de Amazon Rekognition. Por ejemplo, si inicia demasiados trabajos de Amazon Rekognition Video al mismo tiempo, las llamadas para iniciar operaciones, comoStartLabelDetection, levante unLimitExceededExceptionexcepción (código de estado HTTP: 400) hasta que el número de trabajos ejecutados simultáneamente se encuentre 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, consulteLímites del servicio de Amazon Rekognition.

Para solicitar un aumento del límite, siga las instrucciones deCrear un caso para cambiar las cuotas TPS.

¿Reintentar? Sí

ResourceAlreadyExistsException

: Message El identificador de la colección: <Collection Id>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

: Message Varios mensajes en función de la llamada a la API.

El recurso especificado no existe.

¿Reintentar? No

ThrottlingException

: Message Desaceleración; 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

: Message Tamaño del vídeo en bytes: <Video Size>es mayor que el límite máximo de: <Max Size>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 de 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)

: Message Error interno de servicio

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)

: Message Service Unavailable

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í

Administración 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 Amazon Rekognition no ha podido procesarla y ha devuelto una respuesta de error.

  • AmazonClientException: esta excepción se produce si el cliente no ha podido obtener una respuesta de un servicio o sí la ha obtenido pero no ha podido analizarla.