Rails hosting op EC2?

Amazon Elastic Compute Cloud, afgekort als EC2, is een nieuwe webservice van Amazon welke ontwikkelaars in staat stelt "web-scale computing" gemakkelijker te maken. Huh? Wat? EC2 is een webservices gestuurde omgeving waar virtuele servers beheerd kunnen worden. Uhm.. Okee.. Dus met wat cryptische commando's kan je een virtuele Linux server (Xen instances) aanmaken en opstarten welke ergens in een datacenter van Amazon draait met Internet verbinding en (virtuele) schijfruimte.

Cool! Een soort colo of dedicated server oplossing waarbij ik alleen maar de software hoef te leveren! Ik heb een bloedhekel aan hardware; het staat in de weg, maakt herrie en kan in de fik vliegen. Tijdens mijn onderzoek voor dit artikel is m'n thuis-in-de-meterkast-server ermee opgehouden, dit kan geen toeval zijn! Software kan ik repareren, of ik heb in ieder geval een idee wat er mis zou kunnen zijn, maar als hardware ermee ophoudt sta ik erbij en kijk ik ernaar.. een beetje beteuterd..

Is EC2 bruikbaar voor het hosten van een Ruby on Rails applicatie? Ja, je kan een Rails applicatie draaien op een EC2 instance, het is namelijk gewoon een (virtuele) Linux doos. Er zijn echter een paar dingen om rekening meer te houden.

Geen persistentie

Een standaard EC2 instance heeft 3 drives; sda1, sda2 en sda3. Drive sda3 is een 256Mb swap schrijf voor bij je 1,7Gb geheugen.

Drive sda1 is de opstart schrijf. Dit is kopie van een gekozen image, AMI (Amazon Machine Image) genaamd. De grootte van deze schrijf kan variëren. Amazon stelt 5 standaard AMI's beschikbaar; een "getting-started" AMI en 4 verschillende Fedora Core 4 installaties; base, apache, mysql en apache-mysql. Maar let op dit is een image! Als je een AMI opstart, daar extra software op installeert, hem weer stopt en later weer eens opstart is die extra software weg. Je kan het vergelijken met zo'n Ubuntu Live CD. Gelukkig kan je zelf AMI's maken, in een latere post meer hierover.

De andere drive, sda2, is een lege schrijf van ongeveer 100Gb en, je raadt het al, deze is helemaal leeg bij het opstarten. Wat je er ook opzet, bij opnieuw opstarten is het verdwenen.

Hmm, op het eerste gezicht lijkt dit een onoverkomelijk probleem. Hoe kan ik nou een applicatie hierop draaien als m'n schrijven verdwijnen bij een eventuele shutdown of crash? Dan zijn m'n logs en mysql database's dus ook foetsie!

Backups. Gemakkelijk vergeten als je een machine de colo binnen sjouwt. Bij EC2 kan je er niet omheen. En laat Amazon nou net een paar maanden eerder hun "Simple Storage Service" of wel S3 uitgerold hebben. Voor 15 dollar cent per Gb per maand kan je "buckets" met "items" vullen.

Dus wat heb je nodig:

  • een opstart script in init.d welke je database's uit je S3 backup haalt
  • een cron job die regelmatig een backup maakt voor het geval je instance crashed
  • en een shutdown script die dezelfde backup maakt

S3 heeft een REST interface en rsh3ll is goed als basis te gebruiken als je backup-scripts gaat bouwen. Nog even voor de goede orde deze scripts worden dus onderdeel van je AMI!

Een dagelijkse backup geeft dus het risico dat je een dag aan transacties kwijt bent. Je kan natuurlijk meerdere instances maken en database replicatie doen daar tussen maar de applicaties die ik voor ogen heb zijn niet kritiek genoeg voor de extra moeite.

Geen vast IP adres

Elke keer als je een nieuwe instance van je server opstart krijgt deze een nieuw IP adres m.b.v. DHCP. Dat is erg vervelend, vooral omdat je oude IP adres meteen aan een ander uitgedeeld kan worden. Je zult dus opzoek moeten gaan naar een Dynamic DNS oplossing.

Op het EC2 Forum wordt veel geklaagd over het gebrek aan statische IP adressen en ik denk ook dat Amazon hier een oplossing voor gaat zoeken. Of er echt vaste IP adressen gaan komen? Waarschijnlijk niet, de kans wordt groter geacht dat Amazon Dynamic DNS gaat leveren.

Overigens zijn de forums op Amazon's Developer Connection site erg goed!

De prijs

Als je je registreert voor EC2 en/of S3 heb je een creditcard nodig. De kosten die je maakt worden maandelijks afgeschreven.

EC2 kost per instance 10 dollar cent per uur en 20 dollar cent per Gb verkeer van/naar buiten Amazon. Verkeer van en naar S3 is gratis. S3 kost 15 dollar cent per Gb per maand en het zelfde bedrag voor verkeer. Deze bedragen zijn exclusief belasting.

Een voorbeeld sommetje: 24 uur maal 31 dagen maal 20 dollar cent is ongeveer 58 euro. Daar gaat 19% belasting over, wordt het 69 euro. Met ongeveer 18 euro cent per Gb (inclusief belasting) komen we met 70 euro per maand op maximaal 5Gb verkeer. Auw, valt me een beetje tegen..

De verkeer kosten lijken me vrij laag, ik vind echter geen mogelijkheid om een limit op te geven. Ik zou graag aangeven dat ze maximaal 75 euro mogen afschrijven per maand en als de kosten daar overheen gaan dat ze dan m'n S3 data niet meer beschikbaar maken van buiten af en m'n instances stoppen. Als de server DoS attack om z'n oren krijgt, betaal jij de rekeningen..

Limited Bèta

EC2 is op dit moment nog in limited bèta. Dit wil zeggen dat er beperkt ruimte is, m'n eerste poging tot aanmelding werd geweigerd maar enkele dagen later kreeg ik een vriendelijk e-mailtje dat er weer wat plaats was.

En bèta kan alles betekenen; dat de prijs nog kan veranderen, dat er features veranderen (bijvoorbeeld de 100Gb schrijf verdwijnt of iets dergelijks), dat je niet mag klagen dat je instance af en toe crashed (ik kan geen enkele post op het forum vinden dat dit ook daadwerkelijk wel eens gebeurd), dat Amazon plotseling kan besluiten ermee op te houden etc. etc.

Conclusie

Ik denk dat dit een groot succes gaat worden en ik ben niet de enige. Amazon gaat niet plotseling besluiten dat de stekker eruit gaat. Volgens mij is dit de manier waarop hosting de komende 10 jaar eruit gaat zien. M'n vader vind het een beetje "back to the future", "vroeger deden we ook time sharing op mainframes" maar volgens mij is het grote verschil dat hardware nu niet meer interessant is (yay!). Met behulp van virtualizatie software en grote clusters (wolken!) goedkope hardware, kunnen ontwikkelaars hun eigen omgevingen bouwen en is de macht weer terug bij de mensen ipv IBM, Honeywell of wat voor mainframe boer dan ook.

Maar weer even van m'n wolk af; is het een goede optie voor Ruby On Rails applicaties?

De voordelen:

  • geen hardware!
  • je kan meerder instances van je server draaien
    • voor load balancing
    • om upgrades voor te bereiden
  • een backup in S3
  • gemakkelijk te beveiligen omdat AMI's read-only zijn
  • betrouwbaarder dan shared hosting, hoop ik
  • nog steeds geen hardware!

De nadelen:

  • nog in bèta; betrouwbaarheid moet zich nog bewijzen
  • dynamisch IP adres
  • enorme rekening bij DoS attacks
  • geen ruimte voor exotische hardware (MPEG-encoder e.d.)
  • wat ingewikkelder om op te zetten
  • duurder dan co-locatie, veel duurder dan shared hosting

Later op deze blog meer over het opzetten van een AMI voor Ruby on Rails applicaties.

Oja, m'n inspiratie bron voor dit artikel is de blog post Exploring Amazon EC2.

Remco van 't Veer — 2006-10-01 Sun 12:09