Una guida sistematica per la risoluzione dei problemi di qualsiasi servizio AWS
Utilizza un flusso di lavoro di troubleshooting AWS ripetibile per isolare i problemi dei servizi, controllare i log, verificare le autorizzazioni e ridurre il tempo di ripristino.
Una Guida Sistematica per la Risoluzione di Qualsiasi Problema dei Servizi AWS
Quando si verifica un problema con un servizio AWS, indovinare spreca tempo e spesso peggiora l'incidente. Un flusso di lavoro di troubleshooting AWS sistematico ti aiuta a definire il sintomo, controllare le prove giuste, isolare la causa e risolvere il problema senza modificare tre cose contemporaneamente.
Usa questa guida quando hai a che fare con un'istanza EC2 irraggiungibile, un errore AccessDenied, una chiamata API limitata, una funzione Lambda che fallisce o qualsiasi altro problema dei servizi AWS in cui la causa principale non è ovvia.
La Metodologia di Troubleshooting Sistematico
Il troubleshooting efficace non consiste nell'indovinare; si tratta di seguire un processo logico e ripetibile. Adottare una metodologia strutturata garantisce di raccogliere tutte le informazioni necessarie, formulare ipotesi plausibili e testarle in modo efficiente. Ecco una suddivisione dei passaggi fondamentali:
1. Definisci il Problema Chiaramente
Prima di immergerti nei log, prenditi un momento per comprendere a fondo il problema. Chiediti:
- Qual è esattamente il problema? (es., istanza EC2 irraggiungibile, caricamenti S3 falliti, timeout della funzione Lambda).
- Quando è iniziato? È costante o intermittente? Ci sono orari specifici in cui si verifica?
- Dove sta accadendo? Quale regione, zona di disponibilità, servizio o risorsa specifica?
- Chi è interessato? Tutti gli utenti, un gruppo specifico o sistemi interni?
- Con quale frequenza si verifica? È un evento una tantum o un modello ricorrente?
- Qual è l'impatto? È di gravità critica, alta, media o bassa?
Suggerimento: Controlla i deployment recenti, le modifiche a Terraform o CloudFormation, le modifiche IAM, gli aggiornamenti delle tabelle di instradamento e le modifiche ai gruppi di sicurezza prima di approfondire.
2. Raccogli Informazioni e Osserva
È qui che entrano in gioco i potenti strumenti di monitoraggio e logging di AWS. Raccogli quanti più dati pertinenti possibile senza apportare modifiche.
- Controlla il Dashboard di Stato AWS: Cerca eventi specifici dell'account, eventi di servizio regionali o manutenzione programmata.
- Rivedi le Metriche di CloudWatch: Esamina le metriche pertinenti per il tuo servizio (es., utilizzo CPU, I/O di rete, tassi di errore, richieste limitate).
- Analizza i Log di CloudWatch: Approfondisci i log delle applicazioni, i log di VPC Flow, i log di Lambda, ecc., per errori o modelli insoliti.
- Consulta i Log di CloudTrail: Identifica le chiamate API recenti, specialmente se sospetti accessi non autorizzati o configurazioni errate.
- Esamina la Configurazione: Usa AWS Config per vedere se le configurazioni delle risorse sono cambiate di recente.
- Controlla lo Stato delle Risorse: Verifica lo stato di istanze, database, bilanciatori di carico nelle rispettive console.
3. Formula un'Ipotesi
Sulla base delle informazioni raccolte, proponi una o più cause probabili del problema. La tua ipotesi dovrebbe essere specifica e verificabile. Ad esempio:
- "L'istanza EC2 è irraggiungibile perché il suo gruppo di sicurezza non consente il traffico SSH in entrata."
- "I caricamenti S3 falliscono a causa di un errore
Access Denied, che indica una policy IAM errata." - "La funzione Lambda va in timeout perché sta raggiungendo un limite di concorrenza del servizio."
4. Testa l'Ipotesi e Isola le Variabili
Progetta un test semplice per provare o confutare la tua ipotesi. Se il test iniziale non risolve il problema, perfeziona la tua ipotesi e testa di nuovo. Quando testi, apporta una modifica alla volta per identificare facilmente la causa-effetto.
- Esempio (Connettività): Se sospetti un problema del gruppo di sicurezza, testa da un indirizzo IP sorgente noto e una porta. Se questo dimostra che la regola è il problema, sostituisci il test temporaneo con la regola ristretta di cui hai effettivamente bisogno.
- Esempio (Autorizzazioni): Usa il Simulatore di Policy IAM per testare diverse policy IAM rispetto alle azioni che stanno fallendo.
5. Risolvi e Verifica
Una volta identificata la causa principale, implementa la correzione appropriata. Dopo aver applicato la soluzione, verifica attentamente che il problema sia risolto e che non siano stati introdotti nuovi problemi.
6. Documenta e Impara
Dopo la risoluzione, documenta il problema, i passaggi di diagnosi, la causa principale e la soluzione. Questo crea una preziosa base di conoscenza per incidenti futuri e aiuta a migliorare la resilienza del tuo sistema. Considera un'analisi post-mortem per i problemi critici per identificare misure preventive.
Strumenti e Risorse Chiave per il Troubleshooting AWS
AWS fornisce una ricca suite di strumenti essenziali per diagnosticare i problemi.
Amazon CloudWatch
Il tuo strumento principale per monitorare risorse e applicazioni. CloudWatch offre:
- Metriche: Punti dati in tempo reale su praticamente ogni servizio AWS (utilizzo CPU, I/O di rete, conteggi richieste S3, eventi limitati DynamoDB, invocazioni/errori Lambda). Crea metriche personalizzate per dati specifici dell'applicazione.
- Log: Logging centralizzato per quasi qualsiasi fonte (EC2, Lambda, log VPC Flow, CloudTrail, log applicazioni). Usa CloudWatch Logs Insights per interrogazioni e analisi potenti.
- Allarmi: Imposta soglie sulle metriche per attivare notifiche (tramite SNS) o azioni automatizzate (es., auto-scaling).
- Dashboard: Crea dashboard personalizzati per visualizzare metriche e log chiave, fornendo un unico pannello di controllo per lo stato operativo.
AWS CloudTrail
CloudTrail registra l'attività API nel tuo account AWS, mostrando chi ha fatto cosa, quando, da dove e con quale risultato. È indispensabile per indagini di sicurezza, audit di conformità e, in modo critico, per risolvere problemi relativi ad autorizzazioni o modifiche involontarie alle risorse.
- Utilizzo: Cerca eventi
Access Denied, operazioniUPDATE,DELETEoCREATEche coincidono con l'inizio del problema. - Esempio di query Athena per log CloudTrail in S3:
SELECT eventtime, eventsource, eventname, useridentity.arn, errorcode, errormessage FROM cloudtrail_logs WHERE eventtime > current_timestamp - interval '1' hour AND (errorcode LIKE '%AccessDenied%' OR errormessage LIKE '%denied%') ORDER BY eventtime DESC LIMIT 100
Console di Gestione AWS
Ogni console di servizio fornisce dashboard specifici, pagine di stato e dettagli di configurazione. Questo è spesso il primo posto dove controllare lo stato e le impostazioni delle risorse. Ad esempio, la console EC2 mostra lo stato dell'istanza, i gruppi di sicurezza e le interfacce di rete.
AWS CLI/SDK
Per controlli programmatici, automazione e query ad-hoc rapide, l'interfaccia a riga di comando (CLI) e i kit di sviluppo software (SDK) di AWS sono preziosi. Ti permettono di recuperare informazioni, modificare configurazioni e interagire con i servizi direttamente dal tuo terminale o applicazione.
- Esempio (Controlla Regole Gruppo di Sicurezza):
aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0
Dashboard di Stato AWS
Fornisce informazioni personalizzate sullo stato dei servizi AWS e del tuo account. È fondamentale per capire se un problema è specifico dell'account o un evento di servizio AWS più ampio. Mostra problemi operativi, manutenzione programmata e avvisi personalizzati.
AWS Config
Registra le modifiche alla configurazione delle tue risorse AWS. Se una risorsa si comporta improvvisamente in modo inaspettato, Config può mostrarti la sua cronologia delle configurazioni, individuando quando e come è stata apportata una modifica.
Categorie Comuni di Problemi AWS e Soluzioni
La maggior parte dei problemi AWS rientra in poche categorie ricorrenti. Comprendere questi modelli aiuta a formulare ipotesi accurate.
1. Problemi di Connettività
Quando le risorse non possono comunicare, controlla il percorso di rete:
- Gruppi di Sicurezza e ACL di Rete (NACL): Questi sono i colpevoli più comuni. I gruppi di sicurezza sono stateful e si applicano a istanze/ENI; le NACL sono stateless e si applicano alle subnet. Verifica che le regole di ingresso/uscita consentano il traffico necessario.
- Suggerimento: Ricorda che i gruppi di sicurezza sono liste di consenso. Le NACL hanno sia regole di consenso che di diniego. L'ordine è importante per le NACL.
- Tabelle di Instradamento: Assicurati che le tue subnet abbiano rotte corrette verso internet (tramite Internet Gateway), altre VPC (peering) o reti on-premises (VPN/Direct Connect).
- Risoluzione DNS: Se le risorse non riescono a risolvere i nomi host, controlla le impostazioni DNS della VPC, le configurazioni di Route 53 o le impostazioni DNS a livello di applicazione.
- Log di VPC Flow: Per la risoluzione approfondita dei problemi di rete, i log di Flow registrano tutto il traffico IP da e verso le interfacce di rete nella tua VPC. Analizzali in CloudWatch Logs Insights per vedere le connessioni accettate/rifiutate.
fields @timestamp, @message | filter logStatus = 'OK' | filter action = 'REJECT' | filter srcAddr = '192.0.2.1' or dstAddr = '192.0.2.1' -- IP di interesse | sort @timestamp desc
2. Errori di Autorizzazione (Access Denied)
Questi sono frequenti e indicati da messaggi Access Denied, UnauthorizedOperation o Forbidden.
- Policy IAM: Controlla le policy IAM allegate per l'utente, il ruolo o il gruppo che esegue l'azione. Verifica che abbiano dichiarazioni
Allowper l'Actionspecifica sullaResourcecorretta.- Suggerimento: Le policy IAM sono
nega per impostazione predefinita. È necessario unconsensoesplicito.
- Suggerimento: Le policy IAM sono
- Policy delle Risorse: Alcuni servizi, tra cui S3, SQS, KMS, SNS e Lambda, supportano policy basate sulle risorse che concedono o negano l'accesso direttamente sulla risorsa. Queste devono allinearsi con le policy di identità IAM.
- Esempio di policy del bucket S3 per un account AWS, non accesso pubblico:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowReadFromAppRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/app-readonly-role" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::example-private-bucket/*" ] } ] }
- Esempio di policy del bucket S3 per un account AWS, non accesso pubblico:
- Policy di Controllo dei Servizi (SCP): Se usi AWS Organizations, le SCP possono impostare le autorizzazioni massime disponibili in un account. Un consenso IAM non può sovrascrivere una restrizione SCP.
- CloudTrail: Cerca errori
Access Deniednei log di CloudTrail per identificare la chiamata API esatta, l'entità e la risorsa coinvolta. - Simulatore di Policy IAM: Un potente strumento nella console IAM per testare gli effetti di diverse policy su azioni specifiche.
3. Limiti del Servizio e Limitazione
I servizi AWS hanno limiti soft e hard. Raggiungere questi limiti può causare errori o degrado delle prestazioni (ThrottlingException, TooManyRequestsException).
- Metriche CloudWatch: Monitora le metriche specifiche del servizio per segni di limitazione, come
ReadThrottleEventsdi DynamoDB oThrottlesdi Lambda. - Console delle Quote di Servizio: Questa console elenca tutte le quote dei tuoi servizi AWS, il loro utilizzo corrente e ti consente di richiedere aumenti per le quote regolabili.
- Backoff Esponenziale e Riprova: Implementa questi modelli nelle tue applicazioni quando interagisci con le API AWS per gestire con garbo la limitazione temporanea.
4. Configurazioni Errate delle Risorse
Risorse configurate in modo errato sono una causa frequente di problemi.
- Archiviazione: Autorizzazioni del bucket S3 errate (accesso pubblico), volumi EBS non crittografati, IOPS insufficienti per EBS.
- Calcolo: Tipo di istanza EC2 sbagliato, AMI errata, dati utente configurati male, problemi del gruppo di auto-scaling.
- Database: Problemi con la stringa di connessione, configurazione errata del gruppo di sicurezza, impostazioni del gruppo di parametri.
- Bilanciatori di Carico: Regole del listener errate, gruppi di destinazione non sani, problemi del gruppo di sicurezza.
- AWS Config: Usa Config per tracciare le modifiche alle configurazioni delle risorse nel tempo, aiutando a identificare quando è stata introdotta una configurazione errata.
5. Problemi Specifici dell'Applicazione
Anche con i servizi AWS perfettamente funzionanti, il codice dell'applicazione può avere problemi.
- Log dell'Applicazione: Assicurati che i log della tua applicazione fluiscano in CloudWatch Logs. Analizzali per errori, eccezioni o comportamenti imprevisti.
- Metriche dell'Applicazione: Emetti metriche CloudWatch personalizzate dalla tua applicazione (es., conteggi errori, latenza richieste, profondità coda) per approfondimenti più dettagliati.
- AWS X-Ray: Per applicazioni distribuite, X-Ray fornisce visibilità end-to-end, tracciando le richieste mentre fluiscono attraverso vari servizi e identificando colli di bottiglia delle prestazioni o errori.
Best Practice per Ridurre l'MTTR
Una buona preparazione riduce il lavoro investigativo necessario durante un incidente.
- Monitoraggio e Avvisi Proattivi: Implementa allarmi CloudWatch completi per metriche critiche (utilizzo CPU, tassi di errore, latenza, spazio su disco, errori API). Integra con SNS per inviare notifiche a PagerDuty, Slack o email.
- Logging Centralizzato: Aggrega i log da tutti i tuoi servizi (EC2, Lambda, container, ecc.) in CloudWatch Logs o in un data lake basato su S3 per una facile ricerca e analisi.
- Infrastruttura come Codice (IaC): Usa CloudFormation, AWS CDK o Terraform per definire la tua infrastruttura. Questo garantisce coerenza, riduce gli errori manuali e rende più semplice annullare le modifiche.
- Runbook e Playbook: Documenta i problemi comuni, i loro sintomi, i passaggi di diagnosi e le procedure di risoluzione. Questo consente al tuo team di risolvere i problemi in modo rapido e coerente.
- Abbraccia il Framework AWS Well-Architected: Progetta i tuoi sistemi tenendo a mente l'eccellenza operativa, la sicurezza, l'affidabilità, l'efficienza delle prestazioni e l'ottimizzazione dei costi. Una progettazione proattiva previene molti problemi.
- Audit e Revisioni Regolari: Rivedi periodicamente le regole dei gruppi di sicurezza, le policy IAM e le configurazioni delle risorse per assicurarti che siano allineate con le best practice e i requisiti attuali.
- Sfrutta il Supporto AWS: Per problemi complessi che non riesci a risolvere, o se sospetti un problema del servizio lato AWS, apri un caso di supporto se il tuo piano di supporto lo consente. Includi ID risorsa, regioni, timestamp con fusi orari, messaggi di errore, ID richiesta e i passaggi che hai già provato.
Conclusione
Inizia ogni problema del servizio AWS con lo stesso ritmo: definisci il sintomo, controlla le modifiche recenti, raccogli log e metriche, testa un'ipotesi alla volta, quindi documenta la correzione. Questa abitudine mantiene il tuo troubleshooting calmo quando l'incidente non lo è.