Google Cloud Platform tarjoaa monenlaisia tehokkaita työkaluja, joiden avulla kehitysprosessia voi nopeuttaa.
Esimerkiksi Cloud Build ja Cloud Run ovat palveluita, jotka auttavat tiimiä tehostamaan ohjelmistokehitystä paketoinnin ja nopean julkaisutahdin avulla kustannustehokkaasti. Kun ne on kerran saatu pystyyn, tuotetta voidaan iteroida nopeasti ja testata hyvinkin monenlaisissa mittakaavoissa.
Tiimi voi keskittyä sovelluksen kehittämiseen murehtimatta palvelinpuolen teknisistä yksityiskohdista. Samalla kustannukset saadaan pidettyä kurissa ja luotettavuus on Googlen takaamana huippuluokkaa.
Vaikka uusien ideoiden toteuttaminen on hauskaa ja mielenkiintoista, saattaa tarvittavien ympäristöjen pystyttäminen olla tarpeettoman monimutkaista sekä kallista. Oli kyseessä sitten fyysinen palvelin tai pilvessä pyörivä virtuaalikone, tarvitaan monenlaista säätämistä, ennen kuin voi näyttää maailmalle aikaansaannoksensa.
Onneksi Google Cloud Platform (GCP) tarjoaa monia palveluita, joiden avulla voidaan tehostaa kehitystyötä ja nopeuttaa prototyyppien iterointia. Tässä blogikirjoituksessa esittelen kaksiosaisen palapelin, jonka kokoaminen ei aiheuta turhautumista. Ensimmäinen paloista on Cloud Build, jonka avulla projekti voidaan paketoida käytännössä automaattisesti. Toinen pala puolestaan on Cloud Run, joka tarjoilee kehitetyn tuotteen maailmalle skaalautuvasti ja kustannustehokkaasti.
Cloud Build ja Cloud Run – tehokas CI/CD-putki ja vaivaton palvelinympäristö kehittäjille
Perinteisessä ohjelmistokehityksessä yksi ensimmäisistä vaiheista oli palvelimen pystyttäminen. Tuo palvelin saattoi olla esimerkiksi toimiston nurkassa kehräävä käytöstä poistettu läppäri tai jopa pilvessä pyörivä virtuaalipalvelin. Linuxiin erikoistunut vanhempi devaaja laittoi yleensä Jenkinsin ja Tomcatin paikoilleen magialta vaikuttavilla komentorivikomennoilla, ja juniorit katsoivat vierestä katseet täynnä pelkoa ja ihailua. Kaikessa tässä saattoi kulua päivä ja mystisiä virheitä selviteltiin koko toimiston voimin.
Myöhemmin yleistyneet pilvipalvelut helpottivat hommaa hieman, sillä esimerkiksi Kubernetes tuli muotiin ja sen myötä palvelut saatiin pystyy nopeammin ja hallitummin. Edelleen kuitenkin vaadittiin kovan tason osaamista. Linux-gurun sijaan tarvittiinkin nyt Kubernetes-velhoa, joka tiesi, ettei pod liittynyt mitenkään herneisiin.
Googlen ratkaisu oli paketoida Kubernetes Cloud Runin sisälle ja kytkeä sen kylkeen Cloud Build. Tällä kokoonpanolla uusien versioiden julkaisemisesta tuli helpompaa ja kehittäjät pystyivät keskittymään palvelinkonfiguroinnin sijaan itse tuotteen kehittämiseen. Sen seurauksena uusia tuotteita ja päivityksiä pystyttiin vihdoin tuomaan markkinoille nopeammin ja kustannustehokkaammin.
Cloud Build – putkisto, jota ei tarvitse sukittaa
Cloud Build on Googlen hallinnoima palvelu, joka automatisoi ohjelmiston kääntämisen luomalla putken, joka kontittaa, testaa ja julkaisee esimerkiksi webbisovelluksen. Käytännössä tarvitaan vain lyhyt konfigurointitiedosto (Dockerfile), jossa määritellään sovelluksen rakennusvaiheet ja käyttöönottoasetukset. Todellisuudessa useimmat tuotteet tai niiden prototyypit eivät todennäköisesti tarvitse ainakaan alkuvaiheessa monelle palvelimelle klusteroitua hybridipilvi-viritystä, joka keittää myös kahvia. Internetin syövereistä löydetty valmis ratkaisu on yllättävän monessa tilanteessa riittävän hyvä.
Kun tiimi on myöntänyt itselleen, että yksinkertaisin ratkaisu on riittävän hyvä, seuraava vaihe on klikkailla GCP:n käyttöliittymästä oikea koodirepositorio (esimerkiksi GitHubista) ja päättää, millaisissa tilanteissa tuotteesta halutaan julkaista uusi version. Oletuksena Google suosittelee julkaisemista aina, kun koodirepositorion päähaaraan tulee muutoksia ja se onkin erittäin käypä vaihtoehto. Myöhemmin esimerkiksi tuotanto- ja kehitysversiot voidaan eriyttää omiksi putkikseen, mutta se käy näppärästi paria nappia painamalla, kun on sen aika.
Kun tuote alkaa vaikuttaa lupaavalta, käännösprosessiin voidaan lisätä muun muassa testien automaattinen ajaminen. Siinä tapauksessa, että testit eivät mene läpi, Cloud Build estää uuden version julkaisemisen. Automaattiset testit lisäävät tuotteen luotettavuutta, minkä seurauksena asiakkaat ovat todennäköisesti tyytyväisempiä. Jos puolestaan tarvitaan lisää tietoturvaa, voidaan kytkeä päälle esimerkiksi julkaisemisen manuaalisen hyväksyminen ja valmiin paketin tietoturvaskannaus.
Cloud Run – skaalautuva ratkaisu DevOps-tiimin päänsärkyyn
Cloud Run on puolestaan täysin hallinnoitu palvelimeton alusta, jonka avulla sovelluksia voidaan pyörittää konteissa ilman, että tarvitsee huolehtia infrastruktuurin hallinnasta. Käytännössä kyseessä on Kubernetes, jonka monimutkaisuus on piilotettu yksinkertaisen käyttöliittymän taakse. Piilottamisen yhteydessä kuitenkin menetetään joitain Kuberneteksen kehittyneempiä ominaisuuksia, mutta harva projekti niitä oikeasti tarvitsee. Sitä paitsi Cloud Runin voi tarvittaessa vaihtaa puhtaaseen Kubernetekseen, sillä molemmat toimivat saman konttiteknologian avulla.
Cloud Runin käyttäminen edellyttää, että sovellus kontitetaan ja ladataan konttirekisteriin esimerkiksi Cloud Buildin avulla. Cloud Run osaa skaalata sovelluksen automaattisesti saapuvan liikenteen mukaan, joten tiimin ei tarvitse huolehtia kapasiteetin suunnittelusta. Jos kukaan ei käytä sovellusta, Google sammuttaa palvelun muutaman minuutin toimettomuuden jälkeen, jos niin halutaan. Kun käyttäjä yrittää jälleen käyttää palvelua, se palaa automaattisesti takaisin linjoille parissa sekunnissa. Kun maksaa vain käytetyistä resursseista, ei joudu maksamaan palvelun pyörimisestä esimerkiksi öisin tai viikonloppuisin, jos käyttäjiäkään ei silloin ole.
Cloud Runin edistyneempiin ominaisuuksiin kuuluu muun muassa liikenteen jakaminen eri versioiden välille. Jos haluaa esimerkiksi ohjata vain osan liikenteestä uuteen versioon, se onnistuu paria nappia painamalla. Jos taas halutaan palata takaisin vanhaan versioon hupsis-tilanteessa, sekin on helppoa, sillä Cloud Run säilyttää vanhat versiot. Jopa raportointi, monitorointi, lokien seuranta ja SLO:t löytyvät kaikki samalta sivulta, mikä antaa kattavan näkymän sovellusten suorituskykykyyn ja käyttöasteeseen.