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 miei log di accesso dell'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 quando un gateway o un proxy scade. Gli errori HTTP 504 dell'Application Load Balancer possono verificarsi per i seguenti motivi:

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

Risoluzione

Verifica che il tuo bilanciatore del carico consenta il traffico con target registrati

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

Per risolverli, controlla i gruppi di sicurezza di rete associati al bilanciatore del carico e ai target del backend. Assicurati che i gruppi di sicurezza di rete consentano il traffico tra il bilanciatore del carico e i target in entrambe le direzioni sulle porte del traffico e del controllo dell'integrità. Verifica che la lista di controllo degli accessi alla rete (ACL) della sottorete consenta il traffico dai target 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 i target sono contrassegnati come Non integro, controlla le metriche di CloudWatch per l'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 per la metrica TargetResponseTime supera spesso il valore di timeout, perché questa configurazione può causare errori 504.

Inoltre, controlla nei target 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 di memoria a CloudWatch, ma puoi inviare una metrica di memoria 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 (Timeout del gateway).

Aumenta la disponibilità delle risorse

Se i tuoi target hanno un utilizzo elevato della CPU, potrebbero non rispondere.

Per risolvere il problema, aumenta le seguenti risorse per raggiungere i tuoi target:

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 il target ha un numero elevato di operazioni di calcolo da completare. Altrimenti, è consigliabile ottimizzare l'utilizzo delle risorse nei target.

Scala i target in base alla domanda

Per scalare i target in base alla domanda, esegui queste azioni per la tua configurazione:

Nota: quando invochi una funzione Lambda, si verifica il dimensionamento automatico della funzione.

Controlla le tue dipendenze esterne

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

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 di 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, esegui queste 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. Suggerisce inoltre le best practice sull'ottimizzazione dei carichi di lavoro.

Informazioni correlate

HTTP 504: Gateway timeout

Come posso risolvere i problemi di latenza elevata sul 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?