torstai 29. joulukuuta 2011

Amazon Web Services - ilmainen kokeilu

AWS:n kokeilu on ilmaista ja helppoa. Alla kuvaus Ubuntu-palvelimen luomisesta Amazonin pilveen alkaen AWS-tilin perustamisesta ja päättyen pystytetyn palvelimen tuhoon.

AWS-tilin luominen
Tarvittavat välineet
  • Luottokortti
  • Puhelinliittymä

AWS:n kokeilu on perusjutuissa ilmaista. Kannattaa silti olla tarkkana mihin tiliään käyttää ja minkä verran erilaisia resursseja varaa. Erityisen huolellinen pitää olla tunnusten ja avainten kanssa, koska niiden vuotaminen vääriin käsiin tulee kalliiksi. Ilmaisista palveluista tarkemmin täällä (AWS Free Usage Tier) http://aws.amazon.com/free/

AWS-tilin luonnin aikana joudut syöttämään luottokorttitietosi ja sitoutumaan AWS:n käyttöehtoihin. Tilin luonnin aikana puhelinnumero varmennetaan siten, että AWS soittaa antamaasi numeroon ja pyytää syöttämään selaimessa näkyvän numeron. En tiedä miten tämä parantaa tietoturvaa sinänsä (ei sulje pois esimerkiksi prepaid-numeron käyttöä), mutta näin AWS toimii.

Komentorivityökalujen käyttöönotto
EC2-instanssin (http://en.wikipedia.org/wiki/Amazon_EC2) voi luoda helposti AWS-konsolista selaimella. Hiirenheiluttelun asemesta voi saman tehdä myös näppäimiä takomalla. Alla kuvaus Ubuntu-pohjaisen palvelimen luonnista EC2 Micro -instanssina. Komennot toimivat sellaisenaan Ubuntu-koneessa (bash-shellillä), mutta jos käyttää esimerkiksi Windowsia, joutuu soveltamaan.

Ensiksi pitää hakea EC2-komentorivityökalut. Tämä hoituu helpoiten komentoriviltä: wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip. Komentorivityökalujen asennusohjeet löytyvät täältä: http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?SettingUp_CommandLine.html, mutta myös tämän kuvauksen pitäisi riittää.

Komentorivityökalut tarvitsevat muutaman ympäristömuuttujan toimiakseen sulavasti. Ne tarvitsevat myös X.509-sertifikaatin, jotka voi luoda tai asettaa AWS:n konsolissa (yksityiskohtaiset ohjeet täällä: http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using-credentials.html#using-credentials-certificate). Luodaan sertifikaatti tässä kohtaa.

Oletetaan, että edellä luotiin private key tiedostoon nimellä pk-merkkijono.pem ja sertifikaatti tiedostoon nimellä cert-merkkijono.pem. Oletetaan myös, että ec2-api-tools.zip on purettu hakemistoon ~/aws/ec2-api-tools-1.5.0.1-2011.11.30. Luo tiedosto env.sh alla olevalla sisällöllä.

export EC2_HOME=~/aws/ec2-api-tools-1.5.0.1-2011.11.30
export PATH=$PATH:$EC2_HOME/bin
export EC2_PRIVATE_KEY=~/aws/certs/pk-merkkijono.pem
export EC2_CERT=~/aws/certs/cert-merkkijono.pem
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export EC2_URL=https://ec2.eu-west-1.amazonaws.com

Ota env.sh-tiedoston asetukset käyttöön: source env.sh.

Kokeile komentorivityökalujen toimivuutta:
$ ec2-describe-regions
Tuloksena pitäisi olla jotain alla olevan näköistä:

REGION eu-west-1       ec2.eu-west-1.amazonaws.com
REGION us-east-1       ec2.us-east-1.amazonaws.com
REGION ap-northeast-1  ec2.ap-northeast-1.amazonaws.com
REGION us-west-2       ec2.us-west-2.amazonaws.com
REGION us-west-1       ec2.us-west-1.amazonaws.com
REGION ap-southeast-1  ec2.ap-southeast-1.amazonaws.com

Tulosteesta näkee, että env.sh-tiedostossa asetettu EC2_URL viittaa eu-west-1-regioonaan. EC2_URL-muuttuja määrittää komentorivityökalujen oletus-regionin.

Pääsyoikeuksien määrittäminen
Kun komentorivityökalut toimivat, voidaan alkaa määrittämään EC2-instanssin tarvitsemia palikoita. Ensimmäisenä pitää luoda pääsyoikeusmääritykset EC2-instanssin käyttämälle ryhmälle (security group). Luodaan avaimet, joilla instanssille pääsee kirjautumaan:
$ ec2-add-keypair testkeypair

Kirjautuneena olevan käyttäjän pitäisi nähdä AWS Management Consolessa juuri luotu avain: https://console.aws.amazon.com/ec2/home?region=eu-west-1&#s=KeyPairs. Talleta komennon koko tulostus tiedostoon lukuunottamatta ensimmäistä riviä, jolla on teksti KEYPAIR... (tämä on luodun avaimen private key).

Luodaan ryhmä, jolle sallitaan pääsy HTTP:n ja SSH:n yli mistä tahansa internetistä. Ensin tehdään pääsyoikeusryhmä, jolle määritellään pääsyoikeudet.
$ ec2-add-group public_access -d "Access from public Internet"

Avataan SSH- ja HTTP-portit.
$ ec2-authorize public_access -P tcp -p 22 -s 0.0.0.0/0
$ ec2-authorize public_access -P tcp -p 80 -s 0.0.0.0/0

Tuloksena syntyneen ryhmän (public_access) voi tarkastaa AWS-konsolista: https://console.aws.amazon.com/ec2/home?region=eu-west-1&#s=SecurityGroups. Huomaa, että ryhmä ei ole mitenkään sidonnainen EC2-instanssiin, mutta se on sidonnainen AWS:n regioniin.

EC2-instanssin luominen
Tavoitteena on luoda EBS image -pohjainen (Elastic Block Store) instanssi (toinen vaihtoehto on S3:lle talletettu image). Koska aiemmin päätettiin tehdä Ubuntu-pohjainen EC2-instanssi, käytetään asennuksessa Ubuntun tarjoamia AMI-tiedostoja (Amazon Machine Image). Ubuntun viimeisin LTS-versio (long term support) on kirjoitushetkellä 10.04, joten otetaan 64-bittinen 10.04 AMI EC2:n pohjaksi. Lista AMI-tiedostoista löytyy täältä: http://uec-images.ubuntu.com/releases/lucid/release/. Listan sopivin löytyy regionista eu-west-1, 64-bittisenä ja EBS-pohjaisena (id: ami-cc0e3cb8).

Alla olevalla komennolla luodaan micro-instanssi, joka käyttää aiemmin luotua avainta sekä pääsyoikeusryhmää.
$ ec2-run-instances ami-cc0e3cb8 --instance-count 1 --instance-type t1.micro --key testkeypair --group public_access

Instanssin käynnistäminen kestää hetken. Instanssin pitäisi ilmestyä AWS:n konsoliin hetken päästä: https://console.aws.amazon.com/ec2/home?region=eu-west-1&#s=Instances. Ajossa olevat instanssit ja niiden tilan näkee myös komentoriviltä.
$ ec2-describe-instances

Pelkän tilatiedon voi listata seuraavasti.
$ ec2-describe-instance-status

Kun instanssi on käynnissä, voi sinne kirjautua sisään testkeypair-avaimella (SSH vaatii, että avaintiedostoon ei ole pääsyä kuin käyttäjällä itsellään. Aja siis chmod go-rwx avaintiedostonimi!).

$ ssh -i certs/testkeypair_private.key ubuntu@ec2-46-51-156-208.eu-west-1.compute.amazonaws.com

Huomaa, että instanssin DNS-nimi on joka luomisella erilainen. Yllä oleva komento ei siis toimi ilman pientä muuttamista.

Apachen virittäminen instanssille
$ sudo apt-get update
$ sudo apt-get install apache2
Koska asennus käynnistää automaattisesti Apache-prosessin, voi selaimella todeta, että Apache todellakin on ajossa: http://ec2-46-51-156-208.eu-west-1.compute.amazonaws.com/

Instanssien poistaminen
Hae ensin instanssin tunnus jo aiemmin kuvatulla komennolla.
$ ec2-describe-instances  --headers 
Type    ReservationID   Owner   Groups  Platform 
RESERVATION     r-3f686049      093338577702    public_access 
INSTANCE        i-62873b2b      ami-cc0e3cb8    ec2-46-51-156-208.eu-west-1.compute.amazonaws.com       ip-10-228-230-131.eu-west-1.compute.internal    running testkeypair     0               t1.micro        2011-12-04T00:10:46+0000        eu-west-1c      aki-4feec43b                    monitoring-disabled     46.51.156.208   10.228.230.131                  ebs                                     paravirtual     xen             sg-12ac4965     default 
BLOCKDEVICE     /dev/sda1       vol-ddf5fcb4    2011-12-04T00:11:06.000Z

Pysäytä luotu instanssi.
$ ec2-stop-instances i-62873b2b

Tuhoa instanssi.
$ ec2-terminate-instances i-62873b2b

Instanssin mukana häviää myös instanssiin kiinnitetty EBS-levy. Kun tähän asti on päästy, ei Amazon laskuta mitään edellä kokeillusta. Tuhottu instanssi näkyy listoissa vielä hetken aikaa, mutta häviää kokoaan alle tunnissa.