Šta je potrebno da biste svoj sajt podigli na AWS?

AWS je koristan, upotrebljiv i brzo dostupan servis koji nudi mogućnosti koje je jako teško ostvariti u sličnom vremenskom intervalu i po sličnoj ceni. Naravno, kao i svaka usluga, i ova košta, da li je cena opravdana ili nije, zavisi od namene i vaših potreba.

Miloš Savić - 11. Februar, 2016.

Teorija bez prakse…

Pretpostavimo da imate web sajt pravljen u WordPressu, i želite da ga podignete na AWS. Hajde da vidimo šta nam je potrebno (sem naloga na Amazonu). Treba vam jedna instanca sa zakačenim storageom, treba vam registrovan domen (mada može i bez toga za početak), jedna baza podataka. To je dovoljno od hardvera i servisa. Na small instancu ćemo smestiti apache web server, koristićemo mysql bazu, odnosno RDS servis. Nećemo se igrati sa naprednijim funkcijama, ali bi trebalo da imamo živ sajt na kraju. Od softvera, treba nam apache. To je sve, za početak.

Korak 0: Otvaranje naloga

Za otvaranje naloga na Amazonu potrebna je važeća platna kartica sposobna za plaćanje na Internetu. U ove svrhe će sasvim dobro poslužiti npr. i Intezina Visa Internet kartica, koja je besplatna, debitna kartica – po principu prepaid kredita. Ukoliko je nemate, možete je izvući u roku od 7 dana sa ličnom kartom. Posetite http://aws.amazonaws.com, i izaberite Sign Up. Popunite formular vašim ličnim podacima, i potvrdite email.

Amazon koristi višestruku proveru vaših podataka, tako da ćete na vaš uneti broj telefona dobiti poziv, pored provere podataka platne kartice. Ovde može biti problema: na ekranu ćete dobiti PIN, koji ćete uneti kada vas pozove Amazonov automat za proveru. U mom slučaju, veza je bila užasno loša, instrukcije automata sam jedva razaznavao, a PIN koji sam uneo nije bio prihvaćen. Ako se desi da pogrešite PIN dva puta, bićete onemogućeni da izvršite proveru telefona u sledećih 12 sati.

U tom slučaju pronađite opciju Support, podnesite novi zahtev za podršku (New case), i zatražite da vas pozovu (Call me now). Opet, pozvaće vas automat, i dati vam izbor opcija za podršku, izaberite adekvatnu za AWS (nemojte se zbuniti, automat će spelovati skraćenicu), i uskoro će vam se javiti agent podrške (na engleskom). Izložite mu problem, zatražiće vam broj telefona radi provere, i ručno vam otključati nalog. Ovim ćete zaobići taj problem. U svakom slučaju, i pisana podrška preko sistema tiketa radi odlično, i nećete dugo čekati da vam odgovore, a usmeriće vas adekvatno na sledeće korake.

Preostala je još provera platne kartice. Morate imati iznos od barem 1$ na kartici, plus obavezni iznos preko koji zahteva banka (u Intezi je to 60% iznosa, čini mi se). Ovaj iznos neće biti naplaćen, ali će biti dovoljno Amazonu da zna da vaša kartica postoji. Imajte u vidu da može da postoji prilična zadrška u ovoj proveri (meni je trebalo oko 6h upornog kliktanja, iako su neki drugi servisi imali momentalan pristup kartici), budite strpljivi – ne možete ubrzati proces, samo se uverite da su podaci koje ste uneli tačni. Kada je i ova provera završena, od Amazona ćete dobiti mail da možete koristiti vaše servise, i biće vam omogućen pristup servisima za koje ste se prijavili – obično celom setu standaradnih servisa.

Korak 1: AWS Management Console

Ulogujte se svojim nalogom na konzolu. Izaberite EC2 servis. Pri vrhu sa desne strane uverite se da je vaš izabrani region Us East (N. Virginia). Kliknite Launch Instance u sredini.

Dijalog koji se otvara omogućava izbor Wizarda za pokretanje nove instance. Za početak, označićemo Classic Wizard, i izabrati Continue. Marketplace je izuzetno zanimljiva opcija koja omogućava da sami napravite svoju namensku mašinu i ponudite je drugima za određenu cenu. Spisak softvera koji možete dobiti spremnog za upotrebu je neverovatno širok, i definitivno je opcija koju vredi pogledati.

Proces pokretanja instance sadrži nekih pet koraka, kroz koje ćemo proći. Prvi korak je izbor AMI-ja nad kojim pokrećete vašu instancu. U suštini, birate operativni sistem na kojem će se vrteti vaš web sajt, ili neko od gotovih rešenja drugih korisnika (Community AMIs ili AWS Marketplace tab) spremno za korišćenje. Za ovu priliku izaberite Amazon Linux AMI ili Ubuntu Server 12.04 LTS u tabu Quick Start. Izaberite 64 bitnu verziju i kliknite Select pored nje. Ukoliko pored dugmeta Select postoji zvezdica, ta mašina se može koristiti u okviru Free Tier besplatne opcije, koja je pomenuta ranije. U zavisnosti od vašeg izbora razlikuju se i neke od komandi koje ćemo kasnije koristiti, ali ćemo pokriti oba slučaja, barem okvirno.

Drugi korak je Instance details. Ovde se bavimo hardverskim detaljima instance. Za prvi put, nećemo se previše udubljivati, izabraćemo “m1.small” u Instance type dropdown-u, i ostaviti po defaultu jednu instancu, i No preference za Availability zone. Continue.

Još uvek smo na istom koraku, ali u odeljku Advanced Instance Options. Ovde možemo izabrati željenu verziju kernela i RAM diska, uključiti CloudWatch monitoring, podesiti default ponašanje mašine kada se izvrši shutdown (default je stop, koji omogućava da se instanca ponovo pokrene, ukoliko je bazirana na EBS-u, druga opcija je terminate, koja u svakom slučaju uništava instancu), zaštititi instancu od slučajnog uništavanja (Termination protection). Ostavićemo sve na defaultu i kliknuti Continue.

Storage device configuration omogućava baratanje storage-om instance. Po defaultu se instanca zasniva na EBS storage-u, ali postoje i AMI-ji koji se baziraju na privremenom storageu, što je preferirano u slučaju kada imate AutoScaling. Po tipu izabrane instance određuje se broj privremenih diskova koje možete prikačiti (small instance dozvoljavaju jedan privremeni disk od 150GB), a pretpostavljeni glavni disk (Root Volume) će biti 8GB EBS. Ovo je dovoljno za početak. Vaš glavni disk će po defaultu biti pod imenom /dev/sda1. Ovo je bitno zapamtiti za kasnije. Kliknite Continue.

Sledeći odeljak omogućava da postavite različite tagove na vašu instancu. Pomoću njih je moguće razlikovati pojedine mašine, a naročito je bitan tag Name, jer se ispisuje neposredno pored vaše instance u Dashboardu. Nije krucijalno kada imate dve ili tri mašine, ali već sa desetak postaje teško snaći se u gužvi. Unesite neko ime koje će vam biti očigledno, na primer “webserver”. Kliknite Continue.

Treći korak je Create keypair. Key pair je vaš sertifikat – ključ kojim se povezujete na vašu instancu. Ključ se koristi uz putty (ssh klijent na Windowsu) ili ssh (kllijent na Linuxu), s tim što je na Windowsu potrebno konvertovati ključ u .ppk format pomoću programa puttygen (besplatan je). Ključ važi za određenog korisnika, koji je za Ubuntu AMI ubuntu, a za Amazon AMI ec2-user. Izaberite Create a new key pair, unestie neko smisleno ime, i kliknite Create & Download your Key Pair. Čuvajte ovaj ključ, jer bez njega nećete moći da pristupite nijednoj mašini koje su vezane za njega, a ne postoji mogućnost menjanja. Ako se desi da izgubite ključ, ipak postoji rešenje, ali je bolje ne doći u situaciju da morate da ga koristite, zar ne? Kliknite Continue.

Pretposlednji, i jako bitan korak, je Configure Firewall. Bezbednost je izuzetno bitna za vaše mašine. Kada podignete novu instancu, ona je dostupna bilo kome iz Amazonove interne mreže. Zato je potrebno zatvoriti sve portove koji predstavljaju potencijalnu bezbednosnu rupu. Za ove potrebe, Amazon nudi koncept Bezbednosnih grupa (Security group). Svaka instanca pripada jednoj grupi, za koju važe određena pravila. Njih podešavate ili prilikom kreiranja nove grupe (Create a new Security group), tab Inbound, ili naknadno. Podešavanje se svodi na izbor portova po kojima želite da određena grupa prima zahteve, i od koga želite da ih dobijate. Izbor porekla se vrši ili unošenjem IP adrese ili opsega, ili izborom neke od postojećih security grupa – ukoliko želite da obezbedite međusobnu komunikaciju svojim mašinama, ali nikome van njih – sjajna opcija. Za naše potrebe, otvorićemo port 22 (SSH servis) za opseg 0.0.0.0/0 (ceo Internet), i port 80 za isti opseg – Create a new Security group, unesite neko smisleno ime i opis, iz padajućeg menija izaberite SSH, kao source ostavite 0.0.0.0/0, kliknite Add Rule, i ponovite za HTTP protokol. Kliknite Continue.

Ukoliko se odlučite za neku od prepodešenih grupa, na raspolaganju su vam default i quick-start. Quick start donosi pomenuta podešavanja za SSH i HTTP sa sobom, tako da možete bez brige izabrati nju.

Poslednji korak je Review. Ovde možete proći kroz vaša podešavanja, i ukoliko je potrebno, vratiti se na neki od prethodnih koraka i promeniti podešavanja. Kada ste zadovoljni, kliknite Launch. Čestitamo! Upravo ste pokrenuli svoju prvu instancu!

U opciji Instances vašeg EC2 Dashboarda sada će se naći novi red, koji će sadržati ime vaše instance koje ste odabrali u odeljku sa tagovima, kao i detalje o tipu instance, oznaci, kernelu, security grupi i statusu. Pratite kolonu Status checks, kada vaša instanca bude spremna za upotrebu, ova kolona će dobiti zelenu oznaku i natpis 2/2 Status checks passed. Ukoliko dobijete žutu oznaku ili natpis 1/2, postoji problem u softverskom delu, obično sa storageom. Više detalja u tom slučaju možete dobiti desnim klikom na instancu i izborom opcije View system log. U svakom trenutku levim klikom na red instance levim dugmetom dobijate detaljne podatke u panelu ispod.

Kada je sve ok (potrebno je minut-dva), možete se zakačiti na vašu novu mašineriju. Za kačenje koristite ili Java klijent koji nudi Amazon (desni klik, Connect, pa izaberite Java klijent). U ovom prozoru ćete dobiti i detaljne instrukcije za povezivanje. I u jednom i u drugom slučaju će vam biti potreba ključ koji ste maločas generisali. U detaljima instance pronađite adresu, koja će biti oblika ec2-xxx-yyy-zzz-qqq.compute-1.amazonaws.com, ili IP adresu.

Ukoliko koristite ssh, možete se najlakše povezati unošenjem sledeće komande:

ssh -i putanja-do-kljuca/kljuc.pem ubuntu@adresa-instance

odnosno

ssh -i putanja-do-kljuca/kljuc.pem ec2-user@adresa-instance

u zavisnosti od toga da li ste podigli instancu nad Ubuntu ili Amazon Linuxom. Za korisnike Windowsa, skinite alate putty i puttygen. Pokrenite puttygen, uvezite .pem ključ koji ste generisali preko Management Console, i sačuvajte ga u .ppk formatu. Pokrenite putty, unesite adresu instance kao host name, pronađite opciju Connection i unesite ubuntu ili ec2-user kao korisničko ime, a zatim pronađite i opciju za unošenje ključa, te uputite putty na njega u vašem fajl sistemu. Sačuvajte vašu sesiju (Save), i izvršite povezivanje. Ukoliko koristite Java klijent iz čitača u okviru Management konzole, zatražiće vam se isti parametri, s tim što ćete putanju do vašeg ključa morati da unosite ručno.

Kada je sve ok, dobićete (uobičajeni) Linux prompt.

Korak 2: Linux

Iako se neki, čak i napredniji korisnici ježe od pomisli na korišćenje konzole, ovde nećete moći da je izbegnete (osim ako ne pokrenete Windows mašinu – onda klikćite do mile volje). Za naše potrebe, zadržaćemo se na minimumu koji je potreban da poteramo naše rešenje. Treba nam u suštini samo Apache Web server.

Kada ste dobili strašni crni ekran, izvršićete osvežavanje repozitorijuma paketa za vašu odabranu distribuciju (Ubuntu ili Amazon AMI). Paket menadžer u suštini pokriva 95% potreba koje možete imati za softverom, tako da najverovatnije nećete morati da se bakćete sa ručnim traženjem. Za Ubuntu, baziran na Debian Linuxu, paket menadžer je aptitude, koji koristi .deb pakete, dok Amazon AMI koristi Red Hat kao osnovu, pa je njegov paket menadžer yum, koji koristi .rpm.

Izvršite sledeće:

sudo su (da biste dobili root – administratorske privilegije na vašem sistemu – odziv sistema će dobiti # umesto $ na kraju. Pazite prilikom rada, jer kao root možete lako napraviti probleme na vašem sistemu)

apt-get update odn, yum update (da izvršite osvežavanje)

Sada ćemo zatražiti instalaciju Apache web servera i još nekih korisnih alatki:

apt-get install zip unzip mc apache2 php5 php5-mysql php5-curl phpmyadmin  odn.

yum install zip unzip mc httpd php5 php5-mysql php5-curl

zip, unzip – linux varijante poznatog arhivera

mc – midnight commander, okruženje za rad sa fajlovima u konzoli na linuxu, koji podseća na Total Commander, ili Norton Commander. Svesrdno preporučujem, pokreće se sa mc <enter>

apache2, php5… – Apache web server, sa podrškom za php5 i potrebnim modulima za povezivanje sa mySQL bazom.

phpmyadmin – verovatno najpoznatiji paket za upravljanje mySQL bazom podataka. Ubuntu ima u svom repozitorijumu paket sa njegovom instalacijom, ali ćete za Amazon ami morati da se snađete na zvaničnom sajtu, i otpakujete u vaš document root na način sličan ovom koji ćemo opisati za vaše fajlove.

Paket menadžer će se pobrinuti da se instaliraju sve potrebne biblioteke. Ukoliko koristite Ubuntu, bićete pitati da li želite da podesite phpmyadmin za rad sa Apacheom, uradite to. Kada dođe do pitanja o korisnicima za phpmyadmin, odustanite, jer ćete to odraditi naknadno.

Ostatak instalacije bi trebalo da prođe bez trzavica. Za Ubuntu izvršite sledeće:

a2enmod rewrite

što će uključiti mod_rewrite modul za Apache. Nakon toga, restartuje Apache:

apache2ctl restart (za Amazon, apachectl restart)

Sada možete poslati vaše fajlove na server. Najlakše je da ih zapakujete u jednu zip arhivu, zbog brzine i lakoće prenosa. Sa windowsa iskoristite neki SFTP klijent koji ćete snabdeti vašim ključem (preporučujem WinSCP ili Filezilla), dok će se Linux korisnici snaći sa scp-om:

scp -i vas_kljuc imefajla.zip ubuntu@adresa-instance:/home/ubuntu (odn. ec2-user za Amazon)

Za Filezilla-u, File->Site manager, New Site, Host: adresa instance, Protocol: SFTP, Logon type: Normal, User: ubuntu (ili ec2-user). Kliknite OK da zatvorite prozor, a zatim Edit -> Settings, Connection->FTP->SFTP, Add keyfile, i pronađite .ppk fajl koji ste generisali za Putty pre povezivanja na instancu. Zatvorite prozor, i vratite se na File->Site manager, odaberite vašu novu konekciju, i kliknite Connect, prihvatite potpis vašeg servera i dodajte ga u keš (Always trust this host), i uskoro ćete dobiti klasični ftp panel, prevucite vaš fajl na server.

Kada ste preneli fajl, sa vašeg računara na server, potrebno ga je smestiti u document root vašeg Web servera. Za Ubuntu, to je /var/www, za Amazon AMI, to je /var/www/html po default (naravno, može se menjati). Premestite fajl koristeći mc ili izvršite

mv vas_fajl.zip /var/www/  (odn. /var/www/html)

cd /var/www (odn. /var/www/html)

unzip vas_fajl.zip

ovim ćete otpakovati kompletan sadržaj u root direktorijum. Sada već možete prozvati vaš sajt u browseru sa http://adresa_instance/.

Ne zaboravite da je bitan deo rada u Linuxu bezbednost, odnosno prava pristupa pojedinih korisnika na sistemu. Vaš Apache Web server se izvršava pod imenom www-data na Ubuntuu ili apache na Amazon linuxu, i u slučaju da imate problema sa prenošenjem fajlova, najverovatniji problem su privilegije (naročito uploads direktorijum WordPressa). Probleme možete videti u default log fajlu koji se nalazi u /var/log/apache2/error.log (odn. /var/log/httpd/error.log) za Amazon. Koristite mc za šetanje levo-desno i brzi pregled i editovanje fajlova (ima ugrađen viewer i editor fajlova – mcedit, koji su dosta lakši od standardnih Linuxovih rešenja), a mogućnost pregleda dva direktorijuma istovemeno će vam umnogome olakšati rad.

Ako je sve ok, dobićete standardni WordPress “Error establishing a database connection” odziv na sajtu. Vreme je da dodamo bazu.

Korak 3: RDS

Amazon daje besplatan paket za korišćenje micro instance njihove RDS mySQL-based instance, pa ćemo iskoristiti ovu mogućnost. Opteretiti EC2 micro instancu ovim bi bilo već previše.

U AWS Management konzoli pod Database kategorijom izaberite servis RDS, i prateći interfejs kliknite Launch instance. U nešto kompleksnijem formularu izaberite micro instancu, mySQL community kao engine, podesite željeni bekap interval i maintenance vreme u kojem dozvoljavate Amazonu da vrši eventualne radove na vašem sistemu. Ostavite ponuđenu default verziju mySQL servera. Napravite vašeg administrativnog korisnika i odredite naziv svojoj instanci. Ostali parametri su  uglavnom nebitni za sada. Pokretanje RDS instance traje nešto duže, ali kada završite, dobićete prikaz u AWS konzoli, sa vašom instancom. Kliknite na nju, i potražite među svojstvima instance red koji se zove Endpoint. To je adresa vaše instance, iskopirajte je. Pronađite opciju Security groups sa leve strane, i dodajte adresu vaše mašine ili Security grupu među dozvoljene.

Vašoj RDS instanci ne možete prići direktno ni na koji način, tako da je potrebno koristiti ili mysql-client ili phpmyadmin. Budući da smo već instalirali phpmyadmin u prethodnom koraku, iskoristićemo tu mogućnost. Ukoliko ste koristili Ubuntu paket, u konzoli vaše instance, kao root izmenite fajl /etc/phpmyadmin/config.inc.php, i u promenljivu host unesite adresu vaše RDS instance. Ukoliko ste svukli phpmyadmin sa zvaničnog sajta, i otpakovali ga u document root, u njegovom direktorijumu izmenite isti fajl. Prozovite http://adresa_instance/phpmyadmin i trebalo bi da budete nagrađeni formularom za unos vašeg administratorskog naloga za RDS instancu.

Koristeći phpmyadmin napravite ili uvezite vašu WordPress bazu, a zatim napravite korisnika sa ograničenim privilegijama za tu bazu – ovaj nalog će koristiti vaša EC2 mašina za povezivanje. Nemojte koristiti vaš administratorski nalog za ovo.

Kada ste napravili novi nalog, na vašoj EC2 mašini izmenite wp-config.php i unesite potrebne podatke za povezivanje na bazu.

Korak 4: Troubleshooting

Sada bi trebalo da vaš sajt radi. Ako ne, vreme je da krenete sa traženjem problema. Proverite da li ste dozvolili pristup portu 80 na vašoj EC2 instanci, i da li ste dozvolili pristup vašoj EC2 instanci RDS instanci. Instalirajte mysql klijent na EC2, i pokušajte da se povežete direktno na RDS (mysql -h rds_instanca -u username -p). Proverite error log vašeg Apache servera. To su najčešći problemi koji se javljaju.

Korak 5: Uživanje

Koristite vaš sveži novi servis i ponosno se šepurite po Internetu. Naravno, imajte u vidu da je ovo samo početak, da treba još poraditi na bezbednosti servera, zakupiti domen i usmeriti ga na server, itd itd. Poslu nikad kraja :)

Neki drugi pogledi

Naravno, svetu je teško ugoditi, i uvek će se naći neko ko će upreti prstom u neke očigledne mane, rizike i manjkavosti sistem kao što je AWS, dići nos, i reći “Pf.. Vidi ovo, xyz daje ovo za n puta manje para. Performanse qrs su bolje od ovih. Kad sabereš ovo i ovo i ovo, plus ovo, plus ono, i još pdv, možeš da platiš normalan hosting za n godina, i da te boli uvo…”.

Amazon ume da ima problema, u 2012-toj – http://www.techspot.com/news/50573-amazon-web-services-outage-takes-down-reddit-netflix-pinterest.html, u aprilu 2011-te, takođe. Tom prilikom, stradali su Netflix, Reddit, Pinterest i mnogi drugi, a posledice nisu bile sanirane i tokom nekoliko dana. O vesti se brujalo i mnogo duže. Nažalost, činjenica je da su ovakva dešavanja maltene neizbežna, i da će se desiti kad tad. Da li je to dovoljan razlog da se AWS izbegava, ostaje na svakom pojedinačno da razmisli.

Druga stvar koja se često zamera AWS-u su performanse. Jedan od takvih tekstova, a ima ih mnogo na temu Amazona, performansi, i svega ostalog – malo guglanja – je i sledeći:

http://blog.carlmercier.com/2012/01/05/ec2-is-basically-one-big-ripoff/

Ako imate želje, volje i potrebe da se informišete o ovome – Google je vaš prijatelj. AWS je dugo prisutan, i mnogi su izneli svoja pozitivna i negativna iskustva. Prilikom odlučivanja da li je AWS za vas, iskustva drugih su verovatno među najrelevantnijim kriterijumima za donošenje odluke. Uzmite ih sa rezervom, naravno, stvari se menjaju, različitim ljudima su i potrebe različite, tako da prednosti i mane za druge mogu biti mane i prednosti za vas.

I za kraj…

Umesto kraja, početak. AWS je koristan, upotrebljiv i brzo dostupan servis koji nudi mogućnosti koje je jako teško ostvariti u sličnom vremenskom intervalu i po sličnoj ceni. Naravno, kao i svaka usluga, i ova košta, da li je cena opravdana ili nije, zavisi od namene i vaših potreba. Neki korisnici će naći da je  u pitanju jedno veliko dranje, drugi će se prepoznati kao ljudi zbog kojih AWS upravo i postoji. Pored impresivnih mogućnosti koje već sad postoje, AWS tim konstantno radi na razvoju novih rešenja, olakšavanju upravljanja putem Management konzole, cene se skoro svakodnevno spuštaju, i bukvalno je pitanje vremena kada ćete prepoznati da Amazon zapravo rešava jedan ili više vaših problema i početi da razmišljate o oslanjanju na njih za sva svoja rešenja. Dotle, uživajte igrajući se.