Come posso risolvere gli errori 504 che ricevo quando utilizzo un Application Load Balancer?
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:
- Per Amazon EC2, aumenta la dimensione dell'istanza in modo da consentire alla destinazione di utilizzare più risorse di calcolo.
- Per le attività Amazon ECS, aumenta le quote di CPU e memoria nella definizione dell'attività Amazon ECS.
- Per le funzioni Lambda, aumenta la memoria in modo da modificare la capacità delle risorse.
Nota: la quantità di CPU e memoria assegnata alla funzione è proporzionale.
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:
- Per Amazon EC2, utilizza i gruppi EC2 Auto Scaling con una policy di dimensionamento per i picchi di traffico.
- Per Amazon ECS, utilizza il dimensionamento automatico del cluster.
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:
- Aggiungi un'intestazione Server-Timing alle richieste HTTP per misurare la latenza con CloudWatch.
- Utilizza un servizio, come ad esempio AWS X-Ray, per implementare una soluzione di osservabilità nell'applicazione.
- Riduci la distanza fisica tra le risorse per ridurre la latenza.
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
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?
- Argomenti
- Networking & Content Delivery
- Lingua
- Italiano
Video correlati


Contenuto pertinente
AWS UFFICIALEAggiornata 4 anni fa