Slides på http://tiny.cc/aws-kurs-slides.
- https://aws-kurs.signin.aws.amazon.com/console
- Finn brukernavnet ditt på Confluence (lenke på slides)
- Bytt region i AWS til den som står oppført ved brukeren din på Confluece
Vi starter med å opprette en application på Elastic Beanstalk, med tilhørende environment for å kjøre Java-applikasjoner.
- Velg Elastic Beanstalk under Services i toppmenyen
- Klikk Create new application, gi applikasjonen din et navn (bruke gjerne gruppenavnet som en del av navnet) og klikk Create.
- Lag et nytt environment ved å klikke Create one now i den grå boksen midt på siden.
- Velg Web server environment
- Velg Java under Platform
- Trykk på Configure more options (grå knapp nederst)
- Velg Highly available under Configuration presets øverst på siden
- Klikk Create environment
- Det kommer opp et sort konsollvindu med tittelen Creating <appnavn>-env.
Nå opprettes et miljø for deg. Miljøet består blant annet av en webserver som er ferdig konfigurert for å kjøre Java-webapplikasjoner.
Webserveren er nå klar, men foreløpig går den på tomgang uten noen kjørende applikasjon. I denne oppgaven skal vi deploye en enkel Java-applikasjon til serveren.
- Last ned vår ferdige eksempelapplikasjon her: aws-workshop-ingen-db.jar
- Deploy denne til miljøet ditt på Beanstalk
- Gå på URL-en til applikasjonen og sjekk at applikasjonen kjører
I denne oppgaven skal vi deploye en ny versjon av applikasjonen. Denne har funksjonalitet for å opprette todo-items i en database, og for at den skal fungere må vi legge til en databaseserver i miljøet vårt. Til dette skal vi bruke Amazons Relational Database Service.
- Gå til Configuration -> Data tier for å sette opp RDS.
- Velg et vilkårlig brukernavn og passord (f.eks.
admin
/qwerty1234
). Passordet blir automatisk håndtert i Beanstalk, du kommer derfor ikke til å trenge det senere. - La resten stå som default og klikk apply
- På tide med en kaffepause! Det tar ca 10 minutter før RDS-databasen er opprettet.
- Last ned ny versjon av vår eksempelapplikasjon med databasekonfigurasjon: aws-workshop.jar
- Deploy denne til miljøet ditt på Beanstalk
Når databasen er opprettet går du inn på {applikasjonsurl}/todo.html
og prøver å lage noen todo-oppføringer. Refresh siden, og se at oppføringene har blitt lagret i databasen.
Amazon Elastic Beanstalk har funksjonalitet for å skalere applikasjonen din automatisk, dvs. legge til eller fjerne servere basert på trafikk eller andre parametre. Dermed kan applikasjonen håndtere store variasjoner i trafikkmengde uten at du trenger å gjøre noen manuelle endringer i serveroppsettet.
Du skal nå konfigure opp autoskalering for applikasjonen din. Dette gjør du under Configuration -> Auto scaling.
Skaleringen skal settes opp slik at det legges til én instans om antall requester i løpet av ett minutt overstiger 10. Du skal nedskalere med én instans om antall requester i løpet av ett minutt er under 5.
Velg en scaling cooldown på 60 sekunder.
- [Amazons Developer Guide for Elastic Beanstalk](http://docs.aws.amazon.com/- elasticbeanstalk/latest/dg/using-features.managing.as.html)
- Load balancing (Wikipedia)
- Auto scaling (Wikipedia)
- Forklaring av skaleringsparametre
Åpne applikasjonen din nok ganger til at du overstiger 10 requester i løpet av ett minutt. Følg med under "Events" og vent på beskjed om at en instans er lagt til. Dette kan du også se under "Health".
På grunn av hvordan Amazons overvåkning fungerer, vil ikke applikasjonen nedskalere av seg selv om den har null trafikk (spør oss om detaljer).
Du må derfor sende noen requests til applikasjonen (men under 5 i løpet av et minutt) for å trigge nedskalering.
Når du har verifisert oppsettet kan du gjerne prøve ut andre auto-scaling-triggere, som bytes inn/ut, CPU-last, etc.
Man kan sette opp alarmer i Elastic Beanstalk som varsler deg om visse hendelser i applikasjonen.
I denne oppgaven skal du sette opp alarmer som sender deg e-post når terskelverdiene for opp- og nedskalering brytes. Dette gjør du under Monitoring. Når alarmene er definert dukker de opp under Alarms. Gjør samme test på opp- og nedskalering som i forrige oppgave, og verifiser at alarmene går og at du mottar e-postvarsel.
Prøv gjerne å sette opp alarmer på andre metrikker også.
S3 er Amazons tjeneste for å hoste statiske filer. S3 brukes også internt av flere av Amazon sine tjenester, blant annet Beanstalk, og dere har allerede brukt S3 når dere har lastet opp eksempelapplikasjonen til Beanstalk.
I denne oppgaven skal dere laste opp et bilde i S3 og se at dette vises i applikasjonen.
- Opprett en S3-bucket i region Frankfurt med navnet
aws-kurs-gruppe{gruppenummer}
, f.eks.aws-kurs-gruppe02
. - Last opp et bilde. Bildet må ha filnavnet
bilde.jpg
. - Gå til
{applikasjonsurl}/bilder.html
og se om bildet ditt vises.
Amazon tilbyr SDK-er for flere språk mot tjenestene sine. Vi skal nå lage et lite Java-program som laster opp og henter ut filer til S3-bucketen vi laget i Oppgave 8. I denne oppgaven kjører vi Java-koden lokalt på egen maskin, og implementerer kode som kommuniserer med Amazons API-er.
Først må vi sette opp tilgangsnøkler for AWS på maskinen vår, slik at vi får tilgang til Amazons API-er når vi kjører koden lokalt.
- Velg brukernavnet ditt øverst til høyre i AWS Console og velg Security Credentials
- Velg Users og finn og velg brukeren din i listen
- Velg User Actions -> Manage Access Key
- Velg Create Access Key, kopier verdiene som vises og lagre disse så du har dem til senere
- Opprett filen
~/.aws/credentials
med følgende innhold
[default]
aws_access_key_id = <fyll inn>
aws_secret_access_key = <fyll inn>
- Åpne applikasjonen ved å åpne IntelliJ -> Open -> Velg pom.xml
- Åpne klassen
S3.java
.
Klassen inneholder startkode for å integrere mot S3. Oppgaven går ut på å skrive Java-kode for å gjøre følgende:
- Last opp en fil til en S3-bucket og verifiser at den har blitt lastet opp ved å se i Amazon Console
- Hent ned alle filer i din bucket og skriv ut filnavnene
- Hent filen ned igjen og skriv ut innholdet
- Slett en fil fra bucketen
Terraform er et verktøy som lar deg skrive kode for å definere oppsett av infrastruktur hos ulike skyleverandører. I denne oppgaven skal dere sette opp en EC2-instans i AWS vha. Terraform. Dere skal konfiguere serveren slik at man kan logge på via SSH. Serveren skal kjøre Apache, og serve en enkel HTML-fil.
Slides finner dere her: http://smat.github.io/terraform-workshop/presentation/
brew install terraform
For å logge på instansen dere skal sette opp, trenger dere et SSH-nøkkelpar. Generer dette lokalt på egen maskin med ssh-keygen -f terraform
. For å bruke dette nøkkelparet senere skriver dere ssh -i terraform
.
For å åpne opp for HTTP-trafikk på port 80 trenger dere en security group. Sett opp en slik (dokumentasjon).
For å kunne logge på med SSH-nøklene dere lagde i stad, må dere definere et keypair i AWS. Se Terraform-dokumentasjon
Til slutt setter dere opp instansen. Denne instansen må referere til keypairet dere lagde i forrige punkt.
For å installere og sette opp Apache må dere kjører scriptet startup.sh
når instansen starter. Det gjør dere ved å lese det inn i user_data
i Terraform-konfigen. Scriptet leser dere inn inn ved hjelp av file()
-kommandoen.
Dokumentasjon for filstier i Terraform.
Slett alle servere, miljøer og applikasjoner i AWS før du går for dagen.
Ferdig allerede? Da har vi en bonusoppgave til deg. Du skal nå bruke Amazon Simple Email Service (SES) til å sende en epost til deg selv ved hjelp av Amazon sin Java SDK.
Vi gir deg ikke så mange hint i denne oppgaven, men oppfordrer deg til å grave i Amazon sin dokumentasjon for å finne ut av hvordan du gjør dette. Vi har laget en klasse SES
i prosjektet med det mest grunnleggende oppsettet.
Det er ikke sikkert SES er tilgjengelig i din region, velg isåfall en av de foreslåtte.
Eksempel-applikasjonen som dere bruker har følgende endepunkter:
/
: Viser hostname/todo.html
: Viser en enkel frontend for listing og opprettelse av TODOs/bilder.html
: Enkel HTML-side for bruk i oppgave 8/api/todo
: REST API-et
Tilbakemeldingsskjema på http://tiny.cc/j256by