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 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
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ónLimitExceededException
(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
- 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.