Monday, May 11, 2009

Amazon EC2 revisited

Nu i helgen har vi arbetat ytterligare lite med Amazons elastiska moln, Amazon EC2. Den trogna läsaren vet att vi gillar Amazon och kör CloudFront och S3 (för statiska filer). Dessbättre har vi under den senaste tiden drabbats av ett angenämt problem - besökarna ökar på Shoppinggatan samtidigt som våra kunder blir fler och större. Trevligt som sagt, men det innebär också att vår flytt från vår nuvarande serverlösning har blivit än viktigare, och en flytt till Amazons EC2 känns som ett rätt stabilt och prisvärt alternativ med tanke på deras stabilitet och skalbarhet.

När jag kikade på EC2 senast var den europeiska parken relativt ny, och det var lite strul med Amazons verktyg framförallt kring arbetet med AMI'er.
Idag är situationen delvis annorlunda - Amazon har skapat ett trevligt litet webinterface som gör det lätt att hantera instanser, och även deras java-tools fungerar numera som förväntat.

Så här såg vår process ut:
1) Vi valde en bra start-ami (centos) och skapade en ny instans
2) Skapade en stor volym (50 gig) och mountade den mot vår instans
3) Konfigurerade ami så att LAMP fanns och levde tillsammans med alla nödvändiga extensions (Tack gode gud för Yum!)
4) Konfigurerade LAMP så att all data ligger på den mountade volymen.
5) Importera data och se att allt fungerar
6) Skapade en ami av den fungerande instansen med ec2-bundle-vol, ec2-upload-bundle och ec2-register.
7) Reservera en eller två ip-adresser så att vår DNS kan pekas rätt
8) Stoppa instansen och starta en ny - fungerar allt som förväntat?
8) Done - allt klart för att köras - och behövs en ny instans så är allt förberett.

Och det härligaste med EC2 - vi bestämde oss för att lägga databasen på en egen instans. Och en timme senare är det klart, allt hänger bara på din initiala AMI!

Några tips:
* Se till att volymerna är tillräckligt stora. 50 gig i en volym är billigt. Ingen fara om de inte är det förstås, då det är superenkelt att skapa nya volymer och skicka över datan dit.
* Dokumentera allt du gör - ordentligt. Linux kan ibland vara lite som en Minoisk labyrint och du vet aldrig när du måste börja om från början.
* Se till att imagen som du skapar med ec2-bundle-vol är tillräckligt stor, för en AMI ändrar du inte lika snabbt som en volym. (Det tar minst 30 minuter, det vet jag av egen erfarenhet när sda plötsligt var tomt på utrymme imorse :-))
* Lägg inte privata nycklar på AMI'n, lägg dem på en volym
* Ha all data utom temporär på volymen (så försvinner inte allt varje gång du stoppar en instans ;))
* Slösa inte tid på iptables - Amazon har ett fullgott skydd med sina inbyggda zoner.
* Rent praktiskt så ändrade jag i /etc/my.conf för att sätta databas till min mountade volym som alltid mountades på samma ställe.
* Samma sak för httpd, jag la till /etc/httpd/conf.d/fnl.conf som i sin tur inkluderade conffiler från den mountade volymen.
På så sätt kan jag alltid ändra uppställningen via den mountade volymen.
* Tänk på regionerna - en dator i usa ger långsam access för oss svenskar. Själva ligger vi i eu-west-1, eller för att vara mer exakt eu-west-1a.
* Googla som en tokig. Det mesta har gjorts förr. Men tack vare Amazons snabba utveckling är en stor del av dokumentationen obsolet, så förvänta dig ingen 1-2-3 tutorial.

No comments: