Skip to content
Luca Dell'Oca Principal Cloud Architect @Veeam
Virtual To The Core Virtual To The Core

Virtualization blog, the italian way.

  • Media
  • About me
Virtual To The Core
Virtual To The Core

Virtualization blog, the italian way.

Proteggere una istanza EC2 da un arresto involontario

Luca Dell'Oca, February 23, 2010December 4, 2016

Su Amazon Web Services, le virtual machines classiche vengono avviate su richiesta e il loro disco rigido è temporaneo, ovvero esiste e conserva i propri dati solo fintanto che l’instanza stessa è accesa. Un riavvio non provoca danni, ma un semplicissimo comando come:

sudo shutdown -h now

sull’instanza sbagliata (magari il vostro web server produttivo dove ospitate l’e-commerce…) manderà tutto al macero. EC2 infatti spegne e fisicamente cancella il disco rigido non più utilizzato, facendovi perdere tutti i dati. Non a caso, dal pannello di controllo questa operazione viene chiamata “Terminate”, ripensate al film di Cameron…

Che fare allora per proteggere un’instanza da una cancellazione inavvertita?

La prima soluzione, e anche la più semplice, è utilizzare adesso che sono disponibili le istanze con boot da EBS. Questo è uno spazio storage permamente di Amazon, pertanto il disco rigido della nostra istanza continua a vivere anche quando l’istanza è stata terminata. Questa scelta però ha un contro, ovvero i costi: mentre una istanza classica si paga per le ore di utilizzo e il traffico di rete prodotto, un’instanza EBS viene pagata anche per le transazioni I/O che vengono compiute sul disco EBS stesso. Ovvero qualsiasi lettura/scrittura prodotta dal sistema operativo o dagli applicativi. Se scegliete questa soluzione, dovrete in ogni caso evitare il comando shutdown dall’interno dell’istanza, che la termina in ogni caso, e affidarvi a:

ec2-run-instances –instance-initiated-shutdown-behavior stop

In questo modo l’istanza viene messa in uno stato di stop pronta per essere riavviata quando richiesta. Durante lo stato di stop pagherete solo per lo spazio disco occupato da EBS e niente altro.

Secondo metodo: imporre che il disco root ospitato su EBS non venga cancellato in fase di shutdown/terminate. Questo si ottiene tramite la seguente chiamata alle API di AWS:

ec2-run-instances –block-device-mapping /dev/sda1=::false

Possiamo anche usare un comando simile in fase di aggiunta di un volume EBS a una macchina già accesa:

–block-device-mapping /dev/sdh=SNAPSHOTID::false

In entrambi i casi, ovviamente dovremo cancellare manualmente i dischi EBS non più utilizzati una volta terminata l’instanza.

Terzo metodo: senza dubbio il più efficace, viene anch’esso realizzato tramite una chiamata API:

ec2-run-instances –disable-api-termination

Questo comando inibisce su quella istanza la possibilità di essere terminata, sia da shell sia da pannello di controllo. E’ il metodo più efficace perchè inibite completamente questi comandi, e anche perchè potete inserirlo all’interno di uno script di deploy dell’istanza stessa, che quindi può essere avviata già bloccata.

Quando poi dovreste veramente terminare l’instanza, dovrete usare i comandi:

ec2-modify-instance-attribute –disable-api-termination false INSTANCEID

ec2-terminate-instances INSTANCEID

Riepilogo: avviare un’instanza in modalità protetta

ec2-run-instances                                    \
–key $keypair                                     \
–availability-zone $availabilityzone              \
–user-data-file $startupscript                    \
–block-device-mapping /dev/sda1=::false           \
–block-device-mapping /dev/sdh=$snapshotid::false \
–instance-initiated-shutdown-behavior stop        \
–disable-api-termination                          \
$amiid

Modifiche a runtime, se vi siete dimenticati di avviare la macchina in modo protetto:

ec2-modify-instance-attribute –disable-api-termination true INSTANCEID
ec2-modify-instance-attribute –instance-initiated-shutdown-behavior stop INSTANCEID
ec2-modify-instance-attribute –block-device-mapping /dev/sda1=::false INSTANCEID
ec2-modify-instance-attribute –block-device-mapping /dev/sdh=::false INSTANCEID

Share this:

  • Click to share on X (Opens in new window) X
  • Click to share on Facebook (Opens in new window) Facebook
  • Click to share on LinkedIn (Opens in new window) LinkedIn
  • Click to email a link to a friend (Opens in new window) Email
  • Click to share on Tumblr (Opens in new window) Tumblr
  • Click to share on Pinterest (Opens in new window) Pinterest
  • Click to share on Reddit (Opens in new window) Reddit
  • Click to share on WhatsApp (Opens in new window) WhatsApp
  • Click to share on Pocket (Opens in new window) Pocket
Notizie amazonawsec2terminate

Post navigation

Previous post
Next post

Search

Sponsors

Latest Posts

  • Migrate WSL (Windows Subsystem for Linux) to a new computer
  • Pass keystrokes to a pfSense virtual machine to install it automatically
  • Automatically deploy pfSense with Terraform and Ansible
  • My Automated Lab project: #6 Create a S3 Bucket with Terraform
  • My Automated Lab project: #5 Deploy a Linux vSphere VM with Terraform and custom disks
©2025 Virtual To The Core | WordPress Theme by SuperbThemes
We use cookies to ensure that we give you the best experience on our website, and to collect anonymous data regarding navigations stats using 3rd party plugins; they all adhere to the EU Privacy Laws. If you continue to use this site we will assume that you are ok with it.OkNoPrivacy Policy