Amazonin EC2-palvelu on kätevä tapa ajaa väliaikaisia virtuaalipalvelimia, joita käynnistellään ja sammutellaan aina tarpeen mukaan. Joskus on kuitenkin tarvetta ajaa yksittäistä palvelinta, joka on jatkuvasti päällä. Tällöin ongelmaksi tulee se, että tavallisten EC2-virtuaalikoneiden kovalevy tyhjenee aina niiden sammuessa.

Paras ratkaisu pysyvän palvelimen ajamiseen näyttäisi olevan käyttää EBS-pohjaista Ubuntu-AMI-imagea (tässä esimerkissä ami-fb9ca98f eli Ubuntu 10.10 32-bit EBS). Käyttöönotto vaatii muutaman kohdan, jotka kirjoitan auki tähän omaksi ja muiden iloksi.

Ensimmäinen käynnistyskerta

Käynnistetään ensin Amazonin EC2-konsolista uusi instanssi, jonka AMI on ami-fb9ca98f ja tyyppi t1.micro. Samalla AWS luo automaattisesti uuden 8GB EBS-levyn tälle instanssille. Jos EC2-instanssin nyt terminoisi, tämä EBS-levy tuhoutuisi lopullisesti. Sen sijaan instanssi pysäytetään (Instance Actions | Stop), jolloin EBS-levy jää eloon.

EBS-levyn koon kasvattaminen

EBS-levy irrotetaan pysäytetystä instanssista (Deattach Volume). Sen jälkeen siitä tehdään snapshot (Create Snapshot from Volume). Tehdystä snapshotista voi nyt tehdä uuden EBS-levyn, ja tällä kertaa määritellä sille isomman koon, kuten vaikkapa 32GB (Create Volume from Snapshot). Nyt tämän uuden EBS-levyn voi liittää aiemmin pysäytettyyn instanssiin (Attach Volume ja laitteeksi /dev/sda1). Vanhat levyt ja snapshotit voi tässä vaiheessa siivota pois.

Toinen käynnistyskerta

Aiemmin pysäytetty EC2-instanssi käynnistetään uudelleen (Instance Actions | Start). Nyt se käyttää uutta 32GB-EBS-levyä, joka kuitenkin sisältää edelleen vanhan 8GB tiedostojärjestelmän. Linuxissa tiedostojärjestelmän kokoa voi kasvattaa helposti lennossa kirjautumalla koneeseen sisään ssh:lla ja ajamalla komennon:

resize2fs /dev/sda1

Tämän jälkeen Linux on käyttövalmis ja tiedostojärjestelmä on lopullisessa 32GB koossaan.

Terminoinnin estäminen

Amazon EC2 -palvelu mahdollistaa instanssien suojaamisen siten, ettei niitä voi vahingossa terminoida. Tämä tapahtuu valitsemalla konsolista Instance Actions | Change Termination Protection. Sama valinta vaihtaa asetuksen päälle tai pois, joten kannattaa tarkistaa, kumman on valitsemassa.

Lisäksi instansseilla on toinen asetus, joka määrittelee mitä niille tapahtuu, kun käyttöjärjestelmä sammuttaa itse itsensä. Tämä on oletuksen Stop, eli instanssi ei pääse vahingossa terminoitumaan shutdown-komennon ajamalla. Asetuksen voi halutessaan tarkistaa EC2-komentorivityökaluilla:

$ ec2-describe-instance-attribute i-xxxxxxxx --instance-initiated-shutdown-behavior
instanceInitiatedShutdownBehavior i-xxxxxxxx stop

Häiriötilanteista toipuminen

Aiemmin luotu 32GB-EBS-levy säilyy olemassa ikuisesti, vaikka EC2-instanssi välillä pysähtyisi tai vaikka se terminoituisikin. Käyttöjärjestelmän ja sen tiedostojen tila siis pysy tallessa myös häiriötilanteissa ja rebooteissa.

Stopin jälkeen saman EC2-instanssin ajoa voi aina jatkaa Start-valinnalla. Jos se kuitenkin jostain syystä pääsee terminoitumaan, on käynnistettävä kokonaan uusi instanssi Ubuntun alkuperäisestä 8GB-AMI-imagesta, pysäytettävä se, irrotettava vanha 8GB-EBS-levy, liitettävä oma 32GB-EBS-levy tähän uuteen instanssiin, sekä käynnistettävä instanssi lopuksi uudelleen. Minulle on jäänyt vähän epäselväksi, voiko instanssi joskus terminoitua esimerkiksi Amazonin datacenterin rikkoutuessa, mutta ainakin tämän pitäisi olla hyvin harvinaista.