Gestione degli errori in Elastic Transcoder - Amazon Elastic Transcoder

Risparmia sui costi e ottieni più funzionalità con AWS Elemental MediaConvert

MediaConvert è un nuovo servizio di transcodifica video basato su file che offre una suite completa di funzionalità di transcodifica avanzate, con tariffe su richiesta a partire da 0,0075 USD/minuto. Leggi di più.

Usi già Amazon Elastic Transcoder? È semplice migrare verso. MediaConvert Per ulteriori informazioni, consulta questa panoramica che include informazioni preziose sul processo di migrazione e collegamenti a risorse aggiuntive.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Gestione degli errori in Elastic Transcoder

Quando invii richieste e ricevi risposte dall'API Elastic Transcoder, potresti riscontrare due tipi di errori API:

  • Errori del client: gli errori del client sono indicati da un codice di risposta HTTP 4xx Gli errori del client indicano che Elastic Transcoder ha riscontrato un problema con la richiesta del client, ad esempio un errore di autenticazione o la mancanza di parametri obbligatori. Risolvi il problema nella tua applicazione client prima di inviare nuovamente la richiesta.

  • Errori del server: gli errori del server vengono indicati da un codice di risposta HTTP 5xx e devono essere risolti da Amazon. Puoi ripetere o rinviare la richiesta finché non va a buon fine.

Per ogni errore API, Elastic Transcoder restituisce i seguenti valori:

  • Un codice di stato, ad esempio 400

  • Un codice di errore, ad esempio ValidationException

  • Un messaggio di errore, ad esempio Supplied AttributeValue is empty, must contain exactly one of the supported datatypes

Per un elenco dei codici di errore restituiti da Elastic Transcoder per gli errori del client e del server, consultaCodici di errore API (Errori client e server).

Potrebbero inoltre verificarsi errori durante l'elaborazione del lavoro da parte di Elastic Transcoder. Per ulteriori informazioni, consulta Errori durante l'elaborazione del processo.

Codici di errore API (Errori client e server)

I codici di stato HTTP indicano se un'operazione è stata eseguita correttamente o no.

Il codice di risposta 200 indica che l'operazione è riuscita. Altri codici di errore indicano un errore del client (4xx) o un errore del server (5xx).

Nella tabella seguente sono elencati gli errori restituiti da Elastic Transcoder. Alcuni errori vengono risolti semplicemente ripetendo la stessa richiesta. Nella tabella sono indicati gli errori probabilmente risolvibili con ripetizioni successive. Se il valore della colonna Riprova è:

  • Sì: viene la stessa richiesta.

  • No: devi risolvere il problema sul lato client prima di inviare una nuova richiesta.

Per ulteriori informazioni sulla ripetizione delle richieste, consulta Ripetizione dei tentativi in caso di errore e backoff esponenziale.

Codice di stato HTTP Codice di errore Message Causa Riprova
400 Eccezione per verifica condizionale non riuscita La richiesta condizionale ha avuto esito negativo. Esempio: il valore previsto non corrispondeva a quello memorizzato nel sistema. No
400 Eccezione per firma incompleta La firma della richiesta non è conforme agli standard AWS. La firma nella richiesta non include tutti i componenti obbligatori. Consultare Contenuti nell'intestazione HTTP. No
403 Eccezione per token di autenticazione mancante La richiesta deve contenere un ID chiave di accesso AWS valido (registrato). La richiesta non include x-amz-security-token, che è obbligatorio. Consultare Effettuare richieste HTTP a Elastic Transcoder. No
400 Eccezione per convalida Diversi. Uno o più valori in una richiesta è mancante o non valido; ad esempio un valore è vuoto o è superiore al valore massimo valido. No
403 AccessDenied Eccezione
  • Non è consentito eliminare un set di impostazioni di sistema: account =<accountId>, presetId =<presetId>.

  • Errore di autenticazione generico. Il client non ha firmato correttamente la richiesta. Consultare Firmare le richieste.

Hai tentato di eliminare una preimpostazione di sistema, la firma in una chiamata all'API Elastic Transcoder non era valida o un utente non è autorizzato a eseguire l'operazione.

No
404 ResourceNot Eccezione trovata
  • Impossibile trovare la <risorsa> specificata: <resourceId>.

  • Impossibile trovare il processo specificato: account=<accountId>, jobId=<jobId>.

  • Impossibile trovare la pipeline specificata: account=<accountId>, pipelineId=<pipelineId>

  • Impossibile trovare il set di impostazioni specificato: account=<accountId>, presetId=<presetId>

Esempio: la pipeline a cui stai tentando di aggiungere un processo non esiste o è ancora in fase di creazione. No
409 InUse Eccezione relativa alle risorse
  • La <risorsa> era già in uso: accountId=<accountId>, resourceId=<resourceId>.

  • La pipeline attiva contiene processi: account=<accountId>, pipeline=<pipelineId>.

Esempio: tentativo di eliminazione di una pipeline attualmente in uso. No
429 Eccezione per limite superato
  • L'account ha già raggiunto il numero massimo di pipeline consentite: account=<accountId>, numero massimo di pipeline=<massimo>

  • L'account ha già raggiunto il numero massimo di set di impostazioni consentiti: account=<accountId>, numero massimo di set di impostazioni=<massimo>

  • L'account ha già raggiunto il numero massimo di processi per ogni pipeline nel backlog: account =<accountId>, numero massimo di processi in backlog per la pipeline=<massimo>

L'account AWS corrente ha superato i limiti per gli oggetti Elastic Transcoder. Per ulteriori informazioni, consulta Limiti al numero di pipeline, job e preset di Elastic Transcoder.
429 Eccezione Provisioned Throughput Exceeded È stato superato il throughput assegnato massimo consentito.

Esempio: la frequenza di richieste è troppo elevata. Gli SDK AWS per Elastic Transcoder riprovano automaticamente le richieste che ricevono questa eccezione. La richiesta ha infine esito positivo, a meno che la coda dei tentativi ripetuti sia troppo estesa per terminare. Riduci la frequenza delle richieste. Per ulteriori informazioni, consulta Ripetizione dei tentativi in caso di errore e backoff esponenziale.

Se stai eseguendo il polling per determinare lo stato di una richiesta, valuta la possibilità di farlo tramite le notifiche. Per ulteriori informazioni, consulta Notifiche sullo stato di un processo.

429 Eccezione per throttling La velocità delle richieste supera il throughput consentito.

L'invio delle richieste, ad esempio per creare nuovi processi, è troppo rapido.

Se stai eseguendo il polling per determinare lo stato di una richiesta, valuta la possibilità di farlo tramite le notifiche. Per ulteriori informazioni, consulta Notifiche sullo stato di un processo.

500 Errore interno Il server ha riscontrato un errore interno nel tentativo di soddisfare la richiesta. Il server ha riscontrato un errore durante l'elaborazione della richiesta.
500 Errore interno del server Il server ha riscontrato un errore interno nel tentativo di soddisfare la richiesta. Il server ha riscontrato un errore durante l'elaborazione della richiesta.
500 Eccezione interna del servizio Il servizio ha riscontrato un'eccezione imprevista nel tentativo di soddisfare la richiesta.
500 Eccezione per servizio non disponibile Il servizio è al momento occupato o non disponibile. Si è verificato un errore imprevisto del server durante l'elaborazione della richiesta.

Risposta di errore di esempio

Di seguito è riportata una risposta HTTP indicante che il valore di inputBucket era null, che non è un valore valido.

HTTP/1.1 400 Bad Request x-amzn-RequestId: b0e91dc8-3807-11e2-83c6-5912bf8ad066 x-amzn-ErrorType: ValidationException Content-Type: application/json Content-Length: 124 Date: Mon, 26 Nov 2012 20:27:25 GMT {"message":"1 validation error detected: Value null at 'inputBucket' failed to satisfy constraint: Member must not be null"}

Errori durante l'elaborazione del processo

Quando Elastic Transcoder rileva un errore durante l'elaborazione del lavoro, lo segnala in due modi:

  • Stato del Job e stato di output: Elastic Transcoder imposta l'Job:Statusoggetto e l'Outputs:Statusoggetto su cui l'output non riuscitoError. Inoltre, Elastic Transcoder imposta l'oggettoOutputs:StatusDetail JSON per l'output non riuscito su un valore che spiega l'errore.

  • Notifica SNS: se hai configurato la pipeline per inviare una notifica SNS quando Elastic Transcoder rileva un errore durante l'elaborazione, Elastic Transcoder include un oggetto JSON nella notifica nel seguente formato:

    { "state" : "PROGRESSING|COMPLETED|WARNING|ERROR", "errorCode" : "the code of any error that occurred", "messageDetails" : "the notification message you created in Amazon SNS", "version" : "API version that you used to create the job", "jobId" : "value of Job:Id object that Elastic Transcoder returns in the response to a Create Job request", "pipelineId" : "value of PipelineId object in the Create Job request", "input" : { job Input settings }, "outputKeyPrefix" : "prefix for file names in Amazon S3 bucket", "outputs": [ { applicable job Outputs settings, "status" : "Progressing|Complete|Warning|Error" }, {...} ], "playlists": [ { applicable job playlists settings } ], "userMetadata": { "metadata key": "metadata value" } }
Valore di errorCode Valore di messageDetails Causa
1000 Errore di convalida Durante l'elaborazione del lavoro, Elastic Transcoder ha determinato che uno o più valori nella richiesta non erano validi.
1001 Errore di dipendenza Elastic Transcoder non è riuscito a generare la playlist perché ha riscontrato un errore con una o più dipendenze delle playlist.
2000 Impossibile assumere il ruolo Elastic Transcoder non può assumere ilAWS Identity and Access Management ruolo specificato nell'Roleoggetto nella pipeline per questo lavoro.
3000 Errore di storage non classificato
3001 Input non esistente Non esistono file con il nome specificato nell'oggetto Input:Key per questo processo. Il file deve esistere nel bucket Amazon S3 specificato nell'InputBucketoggetto nella pipeline per questo job.
3002 Output già esistente Esiste già un file con il nome specificato nell'oggetto Outputs:Key (o Output:Key) per questo processo. Il file non può esistere nel bucket Amazon S3 specificato nell'OutputBucketoggetto nella pipeline per questo job.
3003 Autorizzazione in lettura mancante Il ruolo IAM specificato nell'Roleoggetto della pipeline che hai usato per questo lavoro non dispone dell'autorizzazione per leggere dal bucket Amazon S3 che contiene il file che desideri transcodificare.
3004 Autorizzazione in scrittura mancante Il ruolo IAM specificato nell'Roleoggetto della pipeline che hai usato per questo lavoro non dispone dell'autorizzazione per scrivere nel bucket Amazon S3 in cui desideri salvare file transcodificati o file di miniatura.
3005 Bucket non esistente Il bucket S3 specificato non esiste: bucket= {1}.
3006 Autorizzazione in scrittura mancante Elastic Transcoder non è riuscito a scrivere la chiave= {1} in bucket= {2}, poiché la chiave non si trova nella stessa regione del bucket
4000 File di input non valido Il file specificato nell'Input:Keyoggetto per questo lavoro è in un formato attualmente non supportato da Elastic Transcoder.
4001 File di input non valido La dimensione larghezza x altezza del file specificato nell'oggetto Input:Key per questo processo supera la dimensione massima consentita in larghezza x altezza.
4002 File di input non valido La dimensione del file specificato nell'oggetto Input:Key per questo processo supera la dimensione massima consentita.
4003 File di input non valido Elastic Transcoder non è in grado di interpretare il file specificato in uno degliOutputs:Watermarks:InputKey oggetti per questo lavoro.
4004 File di input non valido La dimensione larghezza x altezza di un file specificato in uno degli oggetti Outputs:Watermarks:InputKey per questo processo supera la dimensione massima consentita in larghezza x altezza.
4005 File di input non valido La dimensione di un file che hai specificato per uno dei {1} oggetti supera la dimensione massima consentita: bucket= {2}, key= {3}, size {4}, dimensione massima= {5}.
4006 File di input non valido Elastic Transcoder non è riuscito a transcodificare il file di input perché il formato non è supportato.
4007 File di input non gestito Elastic Transcoder ha rilevato un tipo di file generalmente supportato, ma non è stato in grado di elaborarlo correttamente. Questo errore ha aperto automaticamente una pratica di supporto e abbiamo avviato la ricerca della causa del problema.
4008 File di input non valido

La causa alla base di questo errore è la mancata corrispondenza tra il set di impostazioni e il file di input. Esempi includono:

  • Il set di impostazioni include le impostazioni audio, ma nel file di input manca l'audio.

  • Il set di impostazioni include le impostazioni video, ma nel file di input manca il video.

4009 File di input non valido Elastic Transcoder non è riuscito a inserire tutte le copertine dei tuoi album nel file di output perché hai superato il numero massimo di stream di grafica.
4010 File di input non valido Elastic Transcoder non è in grado di interpretare il file grafico per il quale hai specificatoAlbumArt:Artwork:InputKey.
4011 File di input non valido Elastic Transcoder ha rilevato un flusso di grafica incorporato, ma non è riuscito a interpretarlo.
4012 File di input non valido L'immagine specificata per AlbumArt:Artwork supera le dimensioni massime consentite in larghezza x altezza: 4096 x 3072.
4013 File di input non valido Le dimensioni in larghezza x altezza dell'immagine incorporata superano le dimensioni massime consentite in larghezza x altezza: 4096 x 3072.
4014 Input non valido Il valore specificato per l'ora di inizio di una clip è successivo alla fine del file di input. Elastic Transcoder non è riuscito a creare un file di output.
4015 Input non valido Elastic Transcoder non è riuscito a generare un file manifest perché i segmenti generati non corrispondevano.
4016 Input non valido Elastic Transcoder non è riuscito a decrittografare il file di input da {1} utilizzando {2}.
4017 Input non valido La chiave AES è stata crittografata con una chiave di crittografia a {2} bit. AES supporta solo chiavi di crittografia a 128, 192 e 256 bit. MD5= {1}.
4018 Input non valido Elastic Transcoder non è riuscito a decrittografare la chiave cifrata con MD5= {1}
4019 Input non valido Elastic Transcoder non è stato in grado di generare una chiave dati utilizzando la chiave KMS ARN {0}.
4020 Input non valido Per la crittografia AES-128 la chiave deve essere a 128 bit. MD5= {1}, {2} bit.
4021 Input non valido La tua chiave deve essere a 128 bit per il PlayReady DRM. MD5= {1}, resistenza= {2} bit.
4022 Input non valido La dimensione combinata dei {1} file multimediali specificati supera la dimensione massima consentita: bucket= {2}, size= {3}.
4023 Input non valido I file di input {1} specificati per la concatenazione non creeranno un output con una risoluzione coerente con il preset specificato. Utilizza un set con impostazioni diverse per PaddingPolicy, SizingPolicy, MaxWidth e MaxHeight.
4024 Input non valido I file di input {1} specificati per la concatenazione non creeranno miniature con una risoluzione coerente con il preset specificato. Utilizza un set con impostazioni di anteprima diverse per PaddingPolicy, SizingPolicy, MaxWidth e MaxHeight.
4025 Input non valido Almeno un file multimediale (input # {1}) non corrisponde agli altri. Il video deve essere contenuto in tutti i file multimediali o in nessuno.
4026 Input non valido Almeno un file multimediale (input # {1}) non corrisponde agli altri. L'audio deve essere contenuto in tutti i file multimediali o in nessuno.
4100 File di input non valido Elastic Transcoder ha rilevato una traccia di didascalie incorporata ma non è riuscita a interpretarla.
4101 File di input non valido Elastic Transcoder non è in grado di interpretare il file di didascalie specificato per Amazon S3 bucket= {1}, key= {2}.
4102 File di input non valido Elastic Transcoder non è riuscito a interpretare il file di didascalie specificato poiché non era codificato in UTF-8: Amazon S3 bucket= {1}, key= {2}.
4103 File di input non valido Elastic Transcoder non è riuscito a elaborare tutte le tracce dei sottotitoli perché hai superato {1}, il numero massimo di tracce di sottotitoli.
4104 File di input non valido Elastic Transcoder non è in grado di generare una playlist principale perché l'output desiderato contiene {1} didascalie incorporate, quando il massimo è 4.
4105 File di input non valido Elastic Transcoder non può incorporare le tracce dei sottotitoli perché il frame rate {1} non è supportato per CEA-708, ma sono supportati solo i frame rate [29.97, 30].
4106 File di input non valido Elastic Transcoder non può incorporare le tracce dei sottotitoli perché format {1} supporta solo {2} tracce di sottotitoli.
9000 Errore interno del servizio
9001 Errore interno del servizio
9999 Errore interno del servizio

Intercettazione di errori

Per il buon funzionamento dell'applicazione, devi integrare la logica che permette di intercettare gli errori e rispondere in modo adeguato. Un approccio tipico consiste nell'implementare la tua richiesta all'interno di un blocco try o di un'istruzione if-then.

Gli SDK AWS eseguono le proprie ripetizioni di tentativi e le proprie verifiche degli errori. Se rilevi un errore durante l'utilizzo di uno degli SDK AWS, dovresti visualizzare il codice e la descrizione dell'errore, nonché un valore Request ID. IlRequest ID valore può aiutare a risolvere i problemi con il supporto di Elastic Transcoder.

L'esempio seguente impiega il kit SDK AWS per Java per eliminare una voce all'interno di un blocco try e utilizza un blocco catch per rispondere all'errore. In questo caso, avvisa che la richiesta non è riuscita. L'esempio utilizza la classe AmazonServiceException per recuperare informazioni su eventuali errori operativi, incluso il Request ID. L'esempio utilizza inoltre la classe AmazonClientException nel caso in cui la richiesta non sia riuscita per altri motivi.

try { DeleteJobRequest request = new DeleteJobRequest(jobId); DeleteJobResult result = ET.deleteJob(request); System.out.println("Result: " + result); // Get error information from the service while trying to run the operation } catch (AmazonServiceException ase) { System.err.println("Failed to delete job " + jobId); // Get specific error information System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); // Get information in case the operation is not successful for other reasons } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means"+ " the client encountered " + "an internal error while trying to " + "communicate with Elastic Transcoder, " + "such as not being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); }

Ripetizione dei tentativi in caso di errore e backoff esponenziale

Numerosi componenti di una rete, ad esempio server DNS, switch, sistemi di bilanciamento del carico e altri, possono generare errori in qualsiasi fase del ciclo di vita di una richiesta specifica.

La tecnica che viene generalmente utilizzata per gestire queste risposte di errore in un ambiente di rete consiste nell'implementare nuovi tentativi nell'applicazione client. Questa tecnica aumenta l'affidabilità dell'applicazione e consente di ridurre i costi operativi per lo sviluppatore.

Ogni SDK AWS che supporta Elastic Transcoder implementa una logica di ripetizione automatica. Il kit SDK AWS per Java ripete automaticamente le richieste e le impostazioni relative alle ripetizioni sono configurabili tramite la classe ClientConfiguration. Ad esempio in alcune occasioni, come nel caso di una pagina Web che fa una richiesta con latenza minima e senza ulteriori tentativi, è possibile disattivare la logica di ripetizione. Usa la classe ClientConfiguration e specifica per maxErrorRetry il valore 0 per disattivare i tentativi.

Se non utilizzi un SDK AWS, dovresti riprovare le richieste originali che ricevono errori del server (5xx). Tuttavia, gli errori del client (4xx, tranne ThrottlingException o ProvisionedThroughputExceededException) indicano che è necessario modificare la richiesta per correggere il problema prima di riprovare.

Nota

Se stai eseguendo un sondaggio per determinare lo stato di una richiesta e se Elastic Transcoder restituisce il codice di stato HTTP 429 con un codice di errore pari aProvisioned Throughput Exceeded Exception oThrottling Exception, considera l'utilizzo delle notifiche anziché del polling per determinare lo stato. Per ulteriori informazioni, consulta Notifiche sullo stato di un processo.

Oltre a semplici tentativi, consigliamo di utilizzare un algoritmo di backoff esponenziale per migliorare il controllo del flusso. L'idea che sottende al backoff esponenziale è di utilizzare attese progressivamente più lunghe tra i tentativi per le risposte di errore consecutive. Ad esempio è possibile lasciar passare un secondo prima del primo nuovo tentativo, quattro secondi prima del secondo, 16 secondi prima del terzo e così via. Tuttavia, se la richiesta non è riuscita dopo un minuto, il problema potrebbe essere dovuto a un limite rigido e non alla frequenza della richiesta. Ad esempio potresti aver raggiunto il numero massimo di pipeline consentite. Imposta l'arresto del numero massimo di tentativi a circa un minuto.

Di seguito è riportato un flusso di lavoro che illustra una logica di ripetizione dei tentativi. Per prima cosa la logica del flusso di lavoro determina se si tratta di un errore del server (5xx). In caso affermativo, il codice ripete la richiesta originale.

currentRetry = 0 DO set retry to false execute Elastic Transcoder request IF Exception.errorCode = ProvisionedThroughputExceededException set retry to true ELSE IF Exception.httpStatusCode = 500 set retry to true ELSE IF Exception.httpStatusCode = 400 set retry to false fix client error (4xx) IF retry = true wait for (2^currentRetry * 50) milliseconds currentRetry = currentRetry + 1 WHILE (retry = true AND currentRetry < MaxNumberOfRetries) // limit retries