Salta al contenuto

Come posso risolvere gli errori 504 che ricevo quando utilizzo un Application Load Balancer?

6 minuti di lettura
0

Desidero risolvere l'errore ELB_504 che ricevo nei log di accesso del mio Application Load Balancer o nelle metriche di Amazon CloudWatch. Oppure ricevo un errore HTTP 504 quando mi connetto al mio servizio tramite un Application Load Balancer.

Breve descrizione

Un errore HTTP 504 si verifica in caso di timeout di un gateway o di un proxy. Gli errori HTTP 504 di un Application Load Balancer possono verificarsi per i seguenti motivi:

  • Il bilanciatore del carico non è riuscito a stabilire una connessione con la destinazione entro il termine del timeout per la connessione di 10 secondi.
  • Il bilanciatore del carico ha ricevuto un timeout dell'handshake SSL durante la connessione a una destinazione.
    Nota: non puoi modificare il timeout dell'handshake SSL di 10 secondi.
  • Il bilanciatore del carico ha stabilito una connessione con la destinazione, ma la destinazione non ha risposto entro il termine del timeout di inattività.
  • La destinazione ha restituito un valore dell'intestazione Content-Length maggiore del corpo dell'entità e si è verificato il timeout del bilanciatore del carico.
  • L'elevato traffico ha fatto sì che le destinazioni rispondessero più lentamente.
  • La destinazione è una funzione AWS Lambda e il servizio non ha risposto prima del termine del timeout per la connessione.

Risoluzione

Verifica che il bilanciatore del carico consenta il traffico con le destinazioni registrate

Controlla la metrica TargetConnectionErrorCount di CloudWatch e la statistica Sum. Se vedi punti dati positivi anziché 0, sono presenti problemi di connessione tra il bilanciatore del carico e la destinazione.

Per risolverli, controlla i gruppi di sicurezza di rete associati al bilanciatore del carico e alle destinazioni di backend. Assicurati che i gruppi di sicurezza di rete consentano il traffico tra il bilanciatore del carico e le destinazioni in entrambe le direzioni sulle porte di controllo dell'integrità e del traffico. Verifica che la lista di controllo degli accessi alla rete (ACL) della sottorete consenta il traffico dalle destinazioni ai nodi del bilanciatore del carico sulle porte effimere (1024-65535).

Nota: è consigliabile utilizzare regole del gruppo di sicurezza specifiche per l'Application Load Balancer.

Controlla le metriche del bilanciatore del carico

Per determinare il motivo per cui le destinazioni sono contrassegnate come Non integra, controlla le metriche di CloudWatch relative all'Application Load Balancer. Se non sono presenti dati delle metriche HTTPCode_ELB_504_Count, gli errori 504 vengono restituiti dai server delle applicazioni, non dal bilanciatore del carico. Controlla se il valore massimo della metrica TargetResponseTime supera spesso il valore del timeout, perché questa configurazione può causare errori 504.

Inoltre, controlla per le destinazioni le seguenti metriche di utilizzo della CPU e della memoria in base al tipo di risorsa:

  • Per Amazon Elastic Compute Cloud (Amazon EC2), controlla la metrica CPUUtilization. Per impostazione predefinita, le istanze EC2 non inviano metriche riguardanti la memoria a CloudWatch, ma puoi inviare una metrica personalizzata.
  • Per le attività di Amazon ECS, controlla le metriche CPUUtilization e MemoryUtilization. Se il valore per una delle due è 1 (100%), l'attività non risponde.
  • Per le funzioni Lambda, controlla la metrica Duration. Se Duration dura più a lungo del valore del timeout di inattività del bilanciatore del carico, viene visualizzato un errore Gateway timeout.

Aumenta la disponibilità delle risorse

Se le destinazioni hanno un utilizzo elevato della CPU, potrebbero non rispondere.

Per risolvere il problema, aumenta le seguenti risorse per raggiungere le destinazioni:

Aggiorna il codice dell'applicazione per renderla più efficiente quando risponde alle richieste HTTP. Assicurati che l'applicazione non impieghi più tempo per rispondere rispetto al timeout di inattività configurato. Per impostazione predefinita, il timeout di inattività per un Application Load Balancer è di 60 secondi. Se necessario, aumenta il timeout di inattività del bilanciatore del carico.

Nota: è consigliabile aumentare il valore del timeout di inattività solo quando la destinazione ha un numero elevato di operazioni di calcolo da completare. Altrimenti, è consigliabile ottimizzare l'utilizzo delle risorse delle destinazioni.

Scala le destinazioni in base alla domanda

Per scalare le destinazioni in base alla domanda, intraprendi le seguenti azioni in base alla configurazione in uso:

Nota: quando invochi una funzione Lambda, la funzione scala automaticamente.

Controlla le dipendenze esterne

Quando un'applicazione utilizza un'architettura di microservizi, le dipendenze esterne, come database o API, influiscono sul tempo di risposta della destinazione.

Verifica se sono presenti problemi derivanti dalle seguenti dipendenze esterne comuni:

  • Per i database Amazon Relational Database Service (Amazon RDS), controlla le metriche ReadLatency, WriteLatency e DatabaseConnections di CloudWatch.
  • Per le code Amazon Simple Queue Service (Amazon SQS), controlla le metriche ApproximateAgeOfOldestMessage e NumberOfMessagesDelayed di CloudWatch.
  • Per i bucket Amazon Simple Storage Service (Amazon S3), controlla le metriche FirstByteLatency, TotalRequestLatency, 4xxErrors e 5xxErrors di CloudWatch.
  • Per i servizi di autenticazione Amazon Cognito, controlla la metrica TokenRefreshSuccesses di CloudWatch e verifica la presenza di errori ThrottlingException.

Per determinare l'origine di un collo di bottiglia nelle prestazioni, intraprendi le seguenti azioni:

Utilizza il Sistema di ottimizzazione del calcolo per evitare problemi futuri

Utilizza il Sistema di ottimizzazione del calcolo AWS per ottenere informazioni dettagliate sull'utilizzo delle risorse di Amazon EC2, Amazon ECS e Lambda. Il Sistema di ottimizzazione del calcolo rileva quando l'utilizzo delle risorse è troppo elevato per aiutarti a evitare i timeout, suggerendo inoltre le best practice sull'ottimizzazione dei carichi di lavoro.

Informazioni correlate

HTTP 504: Gateway timeout

Come posso risolvere i problemi di latenza elevata del mio Application Load Balancer in Elastic Load Balancing?

Come posso risolvere i problemi di autenticazione nel mio Application Load Balancer?

Come posso risolvere gli errori 504 restituiti durante l'utilizzo di un Classic Load Balancer?