AWS Infa as Code: Siirtyminen templaatista TypeScriptiin
Uusi ohjelmistoprojekti alkaa. Tiimiläisillä ja asiakkaalla on kova kiire saada julkaistua jotakin valmista toimivan sovelluksen muodossa. Projektin alussa päädyttiin käyttämään AWS-pilviympäristöä. Syynä tähän on muun muassa sen laaja Managed Services -palveluvalikoima, josta sovelluksen tarvitsemia arkkitehtuurin osia voitiin valita käyttöön. Alkuvaiheen dev- ja test-ympäristöjä on pystytetty yrityksen ja erehdyksen kautta ja ne ovat toimineet riittävän hyvin projektin aikana.
Ensimmäinen tuotantoon meno lähestyy kovaa vauhtia. Koska projektin kehitysympäristöt ovat olleet jo hetken aikaa pystyssä ja stabiileja, kukaan ei enää muista tarkalleen, mitä kaikkea ympäristöihin on alun alkaen konfiguroitu ja asennettu. On vain muistissa, että pari kolme ongelmaa oli matkassa ja ne saatiin jotenkin ratkaistua.
Nykypäivän ratkaisut
Toivottavasti yllä kuvattu tilanne ei enää nykyään tule vastaan, ainakaan usein. Edellä kuvaillun ongelmallisen tilanteen ratkaisemiseksi on olemassa monenlaisia tapoja käsitellä infraa aivan samalla tavalla kuin muutakin sovelluskoodia. Tästä käytetään usein termiä Infra as Code eli IaC. Tavoitteena tässä menetelmässä on, että infran luomiseen ja päivittämiseen liittyvä dokumentaatio käy läpi samanlaista jatkuvaa prosessointia kuin itse sovelluskoodi.
Ideaalitilanteessa (kuva 1)
- kuvaus ympäristöistä on tallessa versionhallinnassa
- kuvaukselle tehdään arviointia tiimiläisten toimesta tai sitä voidaan tarkastaa/arvioida automaattisesti
- muutokset integroidaan osaksi suurempaa kokonaisuutta esim. merge requestien avulla
- muutokset voidaan deployata ympäristöön hallitusti
Kuva 1: Ideaalitilanne IaC-prosessista
CloudFormation template
Jo vuodesta 2011 alkaen AWS on tarjonnut mahdollisuuden hallita pilvi-infraa kuvauskielellä CloudFormation-palvelun kautta. CloudFormation tarjoaakin hyvän pohjan sille, että infra dokumentoidaan rakenteellisessa muodossa ja se mahdollistaa myös hallitut muutokset ympäristöstä toiseen. Aivan ongelmaton CloudFormation ei kuitenkaan ole.
Kuvauskielen luonteesta johtuen CloudFormation templatet ovat hyvin monisanaisia (verbose), koska CloudFormation palveluna ei oleta mitään. Siksi kaikki käyttäjän haluamat toiminnallisuudet on kuvattava täsmällisesti. Näin ollen yksinkertaisimmatkin templatet kasvavat helposti usean sadan rivin tiedostoksi aiheuttaen sen, että kokonaisuus on vaikeasti hahmotettavissa. Alla on rivimäärät pienestä projektista, joka sisältää infran pienelle kotiautomaatioprojektille (kuva 2):
59 00-S3.yml
31 01-EBS.yml
375 02-VPC.yml (verrokkina sama JSON-formaatissa: 625 riviä)
63 03-SNS-SQS.yml
198 04-Distribution.yml 726 total
Kuva 2: Esimerkki JSON-formaatin (vasemmalla) monisanaisuudesta.
CloudFormation-palvelun alkuvaiheessa käytettävissä oli ainoastaan JSON-formaatti. Formaatti toimii hyvin tiedon välittämiseen eri palveluiden välillä, mutta se on hyvin raskas ihmisen käsin käsiteltäväksi ja analysoitavaksi, joten kuvauksessa olevan infran arviointi on erittäin haastavaa. JSON-formaatissa on myös kielen omia rajoituksia, joista ehkä rajoittavin on kommentointimahdollisuuden puuttuminen.
Vuonna 2016 julkaistu YAML-pohjainen dokumentointimahdollisuus paransi tilannetta huomattavasti. Formaatin tavoitteena on mm. olla helppolukuinen ihmiselle. Lisäksi se tarjoaa mahdollisuuden kommenttien lisäämiseen kuvauksen sekaan. Hyvä esimerkki YAML:n ja JSON:n eroista voidaan nähdä esim. katsomalla EC2-instanssille annettavaa UserDataa (kuva 3). UserData on käytännössä shell-skripti, joka ajetaan osana EC2-instanssin alustusta. JSON-formaatissa yksinkertaisen shell-skriptin arviointi ja kirjoitus on erittäin hankalaa (kuvassa vasemmalla) verrattuna YAML:n huomattavasti suoraviivaisempaan notaatioon (kuvassa oikealla).
Kuva 3: JSON:n ja YAML:n eroja.
Toinen CloudFormation-palvelun rajallisuus on ollut valmiiden työkalujen puute ympäristöjen päivitykseen. AWS:n komentorivityökalu tarjoaa kyllä valmiita metodeja templaten päivittämiseen, mutta metodit ovat yksittäisiä ja niiden pohjalta pitää itse rakentaa esim. shell-skriptien avulla logiikka, jolla ympäristöä päivitetään (AWS CLI cloudformation update, cloudformation wait jne).
Muutoshallinnan avuksi CloudFormation tarjoaa mahdollisuuden luoda ChangeSetin, joka kuvaa olemassa olevan ympäristön ja halutun ympäristön erot ja vaikutukset, joita ChangeSetin ajaminen aiheuttaa. Tämän tekemiseen löytyy myös erilliset komentorivityökalut, mutta näidenkin käyttö vaatii erillisten skriptien tekemistä (create-change-set, execute-change-set).
AWS Cloud Development Kit (CDK)
Loppuvuodesta 2018 AWS julkaisi beta-version AWS Cloud Development Kit -frameworkista. Tämä versio tarjoaa ratkaisun edellä kuvattuihin ongelmiin. Työkalun versio 1.0 julkaistiin heinäkuussa 2019. AWS CDK on työkalu, joka mahdollistaa infran hallinnan käyttäen tuttuja ohjelmointikieliä, kuten TypeScriptia, Pythonia, Javaa tai C#:ia siinä missä puhtaan CloudFormation templaten avulla ympäristöjen käsittely vaatii uuden ”kielen” opiskelun.
Yksinkertaistettuna CDK on framework, joka tarjoaa työkaluja aiemmin kuvailtujen CloudFormation templatien luomiseen kehittäjälle tutumman formaatin, ohjelmakoodin, kautta. CDK:n on tarkoitus olla intuitiivinen kehittäjälle: se kääntää devaajan tahdon koneellisesti ymmärrettävään muotoon kuvauskielelle.
Käytännössä CDK tarjoaa siis korkeamman abstraktiotason ympäristöjen hallintaan. CDK:n tarkoituksena on kääntää kirjoitettu koodi CloudFormation-palvelun ymmärtämään muotoon. Tämä mahdollistaa myös sen, että frameworkin sisään voidaan piilottaa ympäristölle sopivia oletuksia, joiden avulla kehittäjä pääsee helposti etenemään.
Otetaan esimerkiksi edellä mainittu VPC. CDK mahdollistaa VPC:n luomisen yhdellä koodirivillä (kuva 4). Tällä yhdellä rivillä CDK luo taustalla yli 400 riviä JSON-muotoista (n. 250 riviä YAML-muotoista) CloudFormation templatea.
Kuva 4: VPC:n luominen CDK:ssa.
Mitä tämä yksi rivi koodia sitten taustalla luo?
- VPC oletus-CIDR-blockilla (10.0.0.0/16)
- 2 public ja 2 private subnetia sopivalla IP-jaolla
- Jokaiselle subnetille tarvittavat RouteTablet
- InternetGateway
- NAT Gateway private subnetille ja GW:lle Elastic IP
Framework tarjoaa siis oletuksia, joilla pystyy luomaan AWS-ympäristöön resursseja, jotka ovat heti käyttökelpoisia ja joilla pääsee alkuun. Jos emme halua private subnetille NAT-palvelua, voimme vain kertoa VPC:lle lisätietoja siitä, mitä haluamme (kuva 5). Lisäksi kun nyt kirjoitamme koodia, IDE pystyy ehdottamaan olemassa olevia konfiguraatioita ja CDK pystyy validoimaan kirjoittamaamme koodia ennen kuin yritämme luoda resurssit AWS-ympäristöön. Tässä tapauksessa CDK vaatii, että mikäli emme halua NAT:ia, joudumme tarkemmin kertomaan millaiset subnetit haluamme VPC:n sisälle (kuva 5).
Kuva 5: CDK ehdottaa vaihtoehtoja, koska emme halua NAT-palvelua.
Edellä tulikin jo mainituksi toinen keskeinen asia, jonka CDK tarjoaa CloudFormationin tilalle: komentorivityökalun. Komennot deploy, diff, synth voidaan ottaa mukaan esim. automaattiseen code pipelineen suoraan, eikä omia viritelmiä tarvitse tehdä.
CDK tarjoaa myös kehittäjälle tutun tavan jakaa erilaisia valmiita palikoita (Constructeja) ympäristöjen pystytystä varten. Esimerkiksi TypeScriptiä käytettäessä S3 bucket construct voidaan paketoida npm-paketiksi ja tarjota esimerkiksi yrityksen sisäisesti artifaktipalvelusta. Kuva 6 sisältää esimerkin constructista, joka luo S3 bucketin tietyillä parametreillä ja tarjoaa bucketin nimen ja ARN:n, joiden avulla kyseiseen luotuun bucketiin voidaan viitata.
Kuva 6: Esimerkki paketoitavasta CDK Constructista.
Yhteenveto
- CDK tarjoaa sovelluskehittäjälle luontevan tavan ylläpitää ympäristöjä myös tutulla ohjelmointikielellä.
- Siinä missä CloudFormation on aluksi hankala, CDK:lla pääsee helpommin alkuun ympäristöjen kanssa, sillä CDK tarjoaa valmiiksi mietittyjä oletuksia erilaisille palveluille.
- CDK tarjoaa valmiita komentorivityökaluja, joiden avulla voidaan rakentaa helpommin ympäristöjen automaattista päivitystä.
- Kumpikaan työkalu (puhdas CloudFormation tai CDK) ei kuitenkaan ole hopealuoti hyvän pilviympäristön pystytykseen, sillä molempien tehokas käyttö vaatii osaamista ja ymmärrystä siitä, miten ympäristöjä AWS:ään luodaan. CDK kuitenkin pystyy hiukan ohjaamaan kehittäjää tässä asiassa.
Olen käyttänyt CloudFormation templateja oletuksena viimeiset 3 vuotta pystyttäessäni AWS-ympäristöjä. Noin kuukausi sitten päätin tutustua AWS CDK:hon osana uutta alkavaa projektia ja voin jo nyt todeta, että paluuta puhtaaseen CloudFormation templateen ei ole. CDK on vielä nuori, eikä aivan kaikkia AWS:n palveluita vielä tueta CDK-natiivisti*, mutta jo noin viikon aktiivisen käyttämisen jälkeen työkalu alkoi tuntua omalta. Todellinen testi CDK:n osalta tulee kuitenkin vasta siinä vaiheessa, kun projekti pyörii tuotannossa ja ympäristöön tarvitaan muutos. Onneksi ympäristöstä on kuitenkin olemassa kuvaus, jota on helppo lukea.
* Kaikille CloudFormation-tuetuille palveluille löytyy kuitenkin CFN-konstruktiot, joilla voi koodina kirjoittaa CloudFormation templatea vastaavat tiedot. Kun CDK:hon lisätään palvelun tuki, voidaan nämäkin CFN-konstruktiot korvata vastaavilla natiiveilla konstruktioilla.
Kuka? Software Architect Tuomas Rissanen työskentelee Cinian Tampereen toimipisteellä. DI-tutkinnon suorittanut Tuomas on työskennellyt softa-alalla jo lähes 10 vuotta. Cinialaisena hän on ollut nyt 2,5 vuotta. AWS-pohjaiset ratkaisut ovat hänen erityisosaamisaluettaan.
Lisätietoja
Tagit
Liiketoimintaprosessi
Tuotanto |
Erikoisosaaminen
Ohjelmistokehitys | |
Pilvipalvelut / SaaS |
Toimialakokemus
IT |
Teknologia
Amazon Web Services |
Tarjonnan tyyppi
Konsultointi | |
Koulutus | |
Tuki- ja ylläpitotyö |
Omat tagit
Cinia - Asiantuntijat ja yhteyshenkilöt
Kimmo Alamartimo
Liiketoimintajohtaja
Vastaan Cinian ohjelmistopalveluiden liiketoiminnasta Helsingin toimipisteessä - muotoilemme digitaalisia palveluita, suunnittelemme ja rakennamme asiakaskohtaisia sovelluksia .. | |
kimmo.alamartimo@cinia.fi 040 5529 204 |
|
Cinia - Muita referenssejä
Cinia - Muita bloggauksia
It- ja ohjelmistoalan työpaikat
- Laura - Mobiilikehittäjä, Android
- Laura - Ohjelmistoarkkitehti, Tampere/Oulu
- Laura - Development Team Manager, Sports Games
- Taito United Oy - Senior Full Stack -kehittäjä
- Webscale Oy - Head of Sales, Cloud Services
- Laura - Hankinta-asiantuntija, tietohallinto
- Laura - Development Manager, Operations
Premium-asiakkaiden viimeisimmät referenssit
- SD Worx - Kehitystyö SD Worxin kanssa takaa Clas Ohlsonille parhaat palkanmaksun prosessit kasvun tiellä
- Digiteam Oy - Case Esperi Care Oy: Ketterä kumppanuus vei Esperin verkkosivu-uudistuksen maaliin sujuvasti ja aikataulussa
- Kisko Labs Oy - Howspace Hub - Mukautuva oppimisen hallintajärjestelmä kasvaviin oppimisalustavaatimuksiin
- Kisko Labs Oy - Sanoma Pro: Multimediasisältöjen hallinnan uudistaminen
- Kisko Labs Oy - Svean helppokäyttöinen palvelu asiakkaan verkko-ostosten hallintaan
- Kisko Labs Oy - Yhtenäinen käyttöliittymä luovien alojen ammattilaisille
- Codemate - Digitaalisen murroksen nopeuttaminen Flutterin avulla
Tapahtumat & webinaarit
- 27.11.2024 - Green ICT -ekosysteemitapaaminen III: Ohjelmistojärjestelmien virrankulutuksen mittaaminen ja kasvihuonepäästöjen arviointi
- 27.11.2024 - Digitaalisen asiakaskokemuksen uusi aikakausi
- 28.11.2024 - Webinaari: Keskity myyntityön laatuun!
- 28.11.2024 - Copilot-webinaari – Mielekkäämpää tietotyötä turvallisesti
- 04.12.2024 - Kuinka oikea matka- ja kululaskujärjestelmä tehostaa prosesseja?
- 05.12.2024 - Green ICT VICTIS -hankkeen kick off -tilaisuus
- 15.01.2025 - Datavastuullisuuden valmennus: hanki valmiudet vastuulliseen datan ja tekoälyn hyödyntämiseen
Premium-asiakkaiden viimeisimmät bloggaukset
- Kisko Labs Oy - Heroku: Millaisiin projekteihin se sopii ja mitkä ovat sen todelliset hyödyt ja haitat?
- Zimple Oy - Pipedrive vai Hubspot? Kumpi kannattaa valita?
- SC Software Oy - Jatkuvat palvelut – asiakaslähtöistä kumppanuutta projekteista ylläpitoon
- Timeless Technology - Ohjelmoitavat logiikat (PLC): Ratkaisevat työkalut automaatioon ControlByWebiltä.
- Kisko Labs Oy - Heroku: Ohjelmistokehittäjän ykköstyökalu skaalautuvien sovellusten rakentamiseen
- SD Worx - Näin luot vakuuttavan Business Casen palkkahallinnon ulkoistukselle
- Timeless Technology - Kyberriskien tunnistaminen Profitap IOTA verkkoanalysaattorin avulla.
Digitalisaatio & innovaatiot blogimediaBlogimediamme käsittelee tulevaisuuden liiketoimintaa, digitaalisia innovaatioita ja internet-ajan ilmiöitä |