Sviluppo remoto su AWS: da Cloud9 a VS Code
20 Novembre 2024 - 2 min. read
Alessio Gandini
Cloud-native Development Line Manager
"Io non complico le cose. Sono così, di per sé" - Martin Riggs, Arma Letale
Progettiamo architetture tenendo conto di tutte le best practice, formiamo i nostri collaboratori per far acquisire loro le migliori competenze e documentiamo tutte le nostre infrastrutture. MA… A volte qualcosa va ancora storto, e la parola “incidente” risuona nelle nostre orecchie.
Ma cos’è un incidente?
Un incidente è un evento che riduce la qualità o le prestazioni di un servizio IT, ne causa l'interruzione o pone un rischio per la sicurezza. Può essere il malfunzionamento di un server, un guasto di rete, un’infezione da malware o una violazione dei dati (data breach).
Anche se facciamo tutto il possibile per fare in modo che non si verifichino e per essere sicuri di esporci al minimo rischio, gli incidenti IT sono inevitabili e possono avere un impatto significativo sulle performance, sulla reputazione e sull’esperienza degli utenti. Gestire gli incidenti non è una competenza facile da acquisire, ma è necessario acquisirla nel corso delle nelle nostre carriere lavorative.
In questo articolo vedremo gli elementi chiave e le migliori pratiche per la gestione degli incidenti. Vi presenteremo anche AWS Systems Manager Incident Manager, una funzionalità di AWS Systems Manager che aiuta a prepararsi ed a rispondere agli incidenti applicativi e infrastrutturali.
Abbiamo detto che la gestione degli incidenti è fondamentale per offrire un servizio affidabile e sicuro. Si tratta di un processo che aiuta a identificare, analizzare e risolvere qualsiasi evento o problema imprevisto che influisce sulla qualità, sulla disponibilità o sulle prestazioni percepite dagli utenti.
Gli incident possono avere diversi livelli di gravità e impatto a seconda del tipo di servizio, del numero di utenti coinvolti, della durata dell’interruzione e delle possibili conseguenze.
Un processo di gestione degli incidenti mira a ripristinare la normale operatività del servizio il più rapidamente possibile. Implementando un processo efficace, possiamo migliorare l'esperienza utente, prevenire gli incidenti e ridurre (o eliminare) il downtime, e il tempo di risoluzione.
Un processo di incident management tipicamente contiene queste fasi:
Un altro punto critico consiste nell'identificare i ruoli responsabili della gestione di ogni fase. Questo dipende dalla dimensione e dalla struttura dell’organizzazione e dalla complessità e natura dell’incidente. Tuttavia, ci sono alcuni ruoli e responsabilità comuni che si trovano nella maggior parte dei team, ad esempio:
A questo punto dobbiamo trovare una soluzione per semplificarci la vita: Incident Manager, con la sua integrazione con gli altri servizi AWS, può aiutarci nelle varie fasi.
Vediamo prima come può mappare le fasi del processo.
Possiamo definire contatti e contact channels da utilizzare negli engagement plans per coinvolgere le persone giuste mantenendo una comunicazione comune chiara e sincronizzata: è sempre la migliore strategia quando si affrontano i problemi.
Con le on-call schedules e gli escalation plans si possono ovviamente definire gli orari di reperibilità e le dovute escalation delle notifiche, quando necessario.
Possiamo anche definire degli Automation Runbooks che sfruttano AWS Systems Manager Automation per automatizzare i task operativi comuni ed evitare operazioni manuali (che possono essere soggette a errori). Sono utili per automatizzare le operazioni di risposta agli incidenti e fornire informazioni dettagliate agli operatori.
Un response plan collega tutti gli elementi di cui abbiamo parlato, definendo cosa deve essere fatto quando si verifica un incidente, come ad esempio chi è tenuto a rispondere, il canale di comunicazione da utilizzare e le azioni automatiche da intraprendere.
Gli incidents possono essere creati in modo automatico, ad esempio sfruttando le regole di EventBridge, i risultati di SecurityHub e gli allarmi di CloudWatch.
Quando si verifica un incidente, AWS Incident Mkanager raccoglie automaticamente i dati sulle risorse AWS interessate, mostrandoli nella scheda Elementi correlati. È possibile anche usare un runbook nel response plan per risolvere il problema.
I dati raccolti sulle risorse AWS interessate possono essere passati al runbook, che potrà usarli per cercare di risolvere automaticamente il problema.
Vediamo un semplice caso d’uso, che può essere poi adattato a diverse esigenze.
Monitoreremo una VPN site-to-site per fare in modo che quando un tunnel non risulta operativo vengano eseguite queste azioni:
Questo è un esempio di template; naturalmente deve essere poi esteso ed adattato per la configurazione reale:
AWSTemplateFormatVersion: 2010-09-09
Description: A template that creates a CloudWatch alarm for a site-to-site VPN connection and an incident response plan for AWS Systems Manager Incident Manager.
Parameters:
VpnConnectionId:
Type: String
Description: The ID of the VPN connection to monitor.
AllowedPattern: ^vpn-[0-9a-f]{8,17}$
ConstraintDescription: Must be a valid VPN connection ID.
Resources:
VpnAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmName: !Sub "VPN connection ${VpnConnectionId} status alarm"
AlarmDescription: An alarm that triggers when the VPN connection status is DOWN.
Namespace: AWS/VPN
MetricName: TunnelState
Dimensions:
- Name: VpnId
Value: !Ref VpnConnectionId
Statistic: Minimum
Period: 60
EvaluationPeriods: 1
Threshold: 1
ComparisonOperator: LessThanThreshold
AlarmActions:
- !Ref IncidentResponsePlan
IncidentResponsePlan:
Type: AWS::SSMIncidents::ResponsePlan
Properties:
Name: !Sub "VPN connection ${VpnConnectionId} incident response plan"
DisplayName: !Sub "VPN connection ${VpnConnectionId} incident response plan"
ChatChannel:
ChatbotSns: !Ref NotificationTopic
IncidentTemplate:
Title: !Sub "VPN connection ${VpnConnectionId} is DOWN"
Impact: 3
Summary: "The VPN connection to the remote site is not working."
DedupeString: !Sub "VPN connection ${VpnConnectionId} is DOWN"
Actions:
- SsmAutomation:
RoleArn: !GetAtt AutomationRole.Arn
DocumentName: AWSSupport-TroubleshootVPN
DocumentVersion: "1"
Parameters:
VpnConnectionId: !Ref VpnConnectionId
NotificationTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: "VPN connection status notification"
TopicName: "vpn-connection-status-notification"
SlackChannelConfiguration:
Type: AWS::Chatbot::SlackChannelConfiguration
Properties:
ConfigurationName: "vpn-connection-status-slack"
IamRoleArn: !GetAtt ChatbotRole.Arn
SlackChannelId: "YourChannelID"
SlackWorkspaceId: "SlackWorkspace"
SnsTopicArns:
- !Ref NotificationTopic
AutomationRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: ssm.amazonaws.com
Action: sts:AssumeRole
Path: "/"
Policies:
- PolicyName: "vpn-troubleshoot-policy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- ec2:DescribeVpnConnections
- ec2:DescribeVpnGateways
- ec2:DescribeCustomerGateways
- ec2:ResetVpnConnection
Resource: "*"
ChatbotRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: chatbot.amazonaws.com
Action: sts:AssumeRole
Path: "/"
Policies:
- PolicyName: "chatbot-policy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- cloudwatch:DescribeAlarms
- cloudwatch:ListMetrics
- cloudwatch:GetMetricData
- cloudwatch:GetMetricStatistics
- cloudwatch:PutMetricData
- ec2:DescribeInstances
- ec2:DescribeRegions
- ec2:DescribeVpnConnections
- ec2:DescribeVpnGateways
- ec2:DescribeCustomerGateways
- ec2:ResetVpnConnection
- sns:ListTopics
- sns:ListSubscriptionsByTopic
- sns:Publish
Resource: "*"
La documentazione AWS fornisce un altro esempio interessante per monitorare e avvisare in caso vengano svolte attività usando il root account.
Gestire gli incidenti è una sfida, e over-ingegnerizzare il processo può rallentare molto. Il nostro consiglio è di iniziare con una mentalità agile, implementando una soluzione semplice ma che soddisfi le esigenze di base: iniziare ad usare Systems Manager Incident Manager ed adattarlo alle proprie esigenze è molto semplice perché si integra rapidamente con tutti i servizi AWS. Una volta messe le basi ed ottenuti i primi feedback è possibile migliorare il processo e l'implementazione con poco sforzo.
Quando parliamo di processi e metodi, non esiste una “soluzione unica per tutti”: ad esempio, abbiamo scoperto che nel nostro caso è utilisssimo organizzare una retrospettiva coinvolgendo i membri del team e tutti gli stakeholder necessari, anche se aggiunge un passaggio aggiuntivo alla fase post-incidente.
Quale pratica trovate efficacie per la preparazione e la gestione degli incidenti sul Cloud?
Fatecelo sapere nei commenti!
Proud2beCloud è il blog di beSharp, APN Premier Consulting Partner italiano esperto nella progettazione, implementazione e gestione di infrastrutture Cloud complesse e servizi AWS avanzati. Prima di essere scrittori, siamo Solutions Architect che, dal 2007, lavorano quotidianamente con i servizi AWS. Siamo innovatori alla costante ricerca della soluzione più all'avanguardia per noi e per i nostri clienti. Su Proud2beCloud condividiamo regolarmente i nostri migliori spunti con chi come noi, per lavoro o per passione, lavora con il Cloud di AWS. Partecipa alla discussione!