Siirry suoraan sisältöön

Cloud Run functions (ent. Cloud Functions) – opas

Table of Contents

Palvelimeton laskenta (serverless) tarkoittaa mallia, jossa kirjoitat vain koodin ja pilvipalvelu huolehtii kaikesta muusta – palvelimista, skaalauksesta ja päivityksistä. Googlen vastaus tähän tunnettiin pitkään nimellä Cloud Functions.

Huomaa nimenmuutos: Google yhdisti palvelun Cloud Run -alustaan elokuussa 2024. Nykyinen nimi on Cloud Run functions, ja vanha 1. sukupolvi tunnetaan nimellä Cloud Run functions (1st gen). Toimintaperiaate on sama, mutta jos etsit palvelua Google Cloud Consolesta vanhalla nimellä, et välttämättä löydä sitä.

Tässä oppaassa käydään läpi, mitä palvelu tekee, miten hinnoittelu ja ilmaiskiintiö toimivat, mitä kylmäkäynnistys tarkoittaa käytännössä – ja milloin funktiot eivät ole oikea työkalu.

Mikä Cloud Run functions on?

Cloud Run functions on tapahtumapohjainen suoritusympäristö yksittäisille koodinpätkille. Kirjoitat funktion, joka tekee yhden asian, ja määrität mikä sen käynnistää. Google huolehtii infrastruktuurista, käyttöjärjestelmäpäivityksistä ja resurssien varaamisesta.

Käynnistäjiä eli laukaisimia (trigger) on kahta päätyyppiä. HTTP-funktiot vastaavat suoraan verkkopyyntöihin, mikä tekee niistä luontevan tavan rakentaa rajapintoja. Taustafunktiot reagoivat pilvialustan tapahtumiin – esimerkiksi tiedoston lataukseen Cloud Storageen, viestiin Pub/Sub-jonossa tai muutokseen tietokannassa.

Käytännön esimerkki: verkkokauppaan ladataan tuotekuva, ja funktio luo siitä automaattisesti eri kokoiset pikkukuvat. Mitään ei tarvitse pyöriä taustalla odottamassa – funktio herää vain silloin kun kuva ladataan.

Tuetut ohjelmointikielet ovat Node.js, Python, Go, Java, .NET, PHP ja Ruby.

Sukupolvet ja nimet – mikä on mikä?

Tämä aiheuttaa eniten sekaannusta, koska verkossa on paljon vanhalla nimellä kirjoitettuja ohjeita.

Cloud Run functions (aiemmin Cloud Functions 2nd gen) on nykyinen ja suositeltu versio. Se rakentuu Cloud Runin päälle ja käyttää Eventarcia tapahtumien välitykseen. Koska pohjalla on Cloud Run, saat käyttöösi sen säätimet: rinnakkaisuuden, vCPU- ja muistimäärän sekä verkkoasetukset.

Cloud Run functions (1st gen) on alkuperäinen versio, jossa on rajatummat laukaisimet ja vähemmän säädettävää. Se toimii edelleen ja sitä tuetaan, mutta uusiin projekteihin Google suosittelee uudempaa versiota.

Nimet ja sukupolvet
Vanha nimiNykyinen nimiSuositus
Cloud Functions (2nd gen)Cloud Run functionsUusiin projekteihin
Cloud Functions (1st gen)Cloud Run functions (1st gen)Tuettu, mutta rajatumpi
Huom. Nimenmuutos tehtiin elokuussa 2024. Verkossa on paljon ohjeita, joissa käytetään yhä vanhaa nimeä.

Kylmäkäynnistys – tärkein ymmärrettävä rajoite

Kun funktiota ei ole kutsuttu vähään aikaan, sen instanssi sammutetaan. Seuraava kutsu joutuu odottamaan, että ympäristö käynnistetään uudelleen. Tätä viivettä kutsutaan kylmäkäynnistykseksi (cold start).

Viive on tyypillisesti sadasosista muutamaan sekuntiin, riippuen kielestä ja riippuvuuksien määrästä. Useimmissa taustatehtävissä sillä ei ole merkitystä, mutta käyttäjää odottavassa rajapinnassa se näkyy suoraan.

Kylmäkäynnistystä voi lieventää kolmella tavalla: pidä riippuvuudet vähissä, koska jokainen kirjasto pidentää käynnistystä; varaa funktiolle riittävästi muistia, sillä muistin määrä vaikuttaa myös prosessoritehoon; ja käytä Min instances -asetusta kriittisissä funktioissa, jolloin osa instansseista pidetään lämpiminä. Viimeinen keino maksaa, koska tyhjänä odottavasta instanssista veloitetaan.

Hinnoittelu ja ilmaiskiintiö

Laskutus perustuu kolmeen tekijään: kutsujen määrään, laskenta-aikaan (muistin ja suoritusajan tulona) sekä ulospäin suuntautuvaan verkkoliikenteeseen. Kiinteitä kuukausimaksuja ei ole.

Ilmaiskiintiö on aidosti käyttökelpoinen pieniin projekteihin. Se kattaa 1. sukupolven osalta kaksi miljoonaa kutsua kuukaudessa, 400 000 GB-sekuntia ja 200 000 GHz-sekuntia laskenta-aikaa sekä 5 GB ulospäin siirtyvää dataa.

Yksi asia yllättää monet: ilmaiskiintiön käyttö edellyttää voimassa olevaa laskutustiliä. Ilmaisuus ei siis tarkoita, ettei maksutietoja tarvitsisi antaa.

Kustannusten hallinta alkaa tehokkaasta koodista. Koska hinta määräytyy suoritusajan mukaan, jokainen sekunti, jonka funktio odottaa ulkoista rajapintaa, maksaa. Käytä asynkronisia kutsuja ja vältä turhaa odottelua.

Huomaa myös, että funktioiden konttikuvat tallennetaan Artifact Registryyn, joka laskutetaan erikseen tallennustilan mukaan.

Laskutuksen osat ja ilmaiskiintiö
OsaMitä mitataanIlmaiskiintiö / kk
KutsutSuorituskertojen määrä2 000 000
MuistiGB-sekunnit400 000
Laskenta-aikaGHz-sekunnit200 000
VerkkoliikenneData ulos internetiin5 GB
Huom. Ilmaiskiintiön käyttö edellyttää voimassa olevaa laskutustiliä. Konttikuvien tallennus Artifact Registryyn laskutetaan erikseen.

Palvelimen sijainti ja suomalainen yleisö

Googlella on konesali Haminassa (alue europe-north1). Suomalaiselle käyttäjäkunnalle tämä on merkityksellistä: mitä lähempänä funktio suoritetaan, sitä pienempi on verkkoviive.

Alueen valinta kannattaa tehdä käyttöönotossa, koska funktion siirtäminen alueelta toiselle jälkikäteen tarkoittaa käytännössä uudelleenkäyttöönottoa. Jos käyttäjiä on useassa maanosassa, funktiot voi ottaa käyttöön useammalla alueella.

Tietoturva ja käyttöoikeudet

Pilvipalveluissa vastuu jakautuu: Google vastaa infrastruktuurista ja konesaleista, kehittäjä koodista ja käyttöoikeuksista.

Keskeinen työkalu on Cloud IAM, jolla määritellään mitä resursseja funktio saa käyttää. Periaate on vähimmän oikeuden malli: funktiolla, joka lukee kuvia yhdestä tallennussäiliöstä, ei pidä olla pääsyä taloustietoihin toisaalla. Käytännössä tämä tarkoittaa omaa palvelutiliä (service account) jokaiselle funktiolle – ei yhtä jaettua tiliä kaikille.

Salaisuudet, kuten API-avaimet ja salasanat, kuuluvat Secret Manageriin, ei koodiin eikä ympäristömuuttujiin sellaisenaan. Jos funktion pitää päästä käsiksi yrityksen sisäverkkoon, se onnistuu VPC-yhteydellä ilman julkista internetiä.

Kehitys ja testaus

Funktioita voi kirjoittaa selaimessa Google Cloud Consolessa, mutta varsinaisessa työssä käytetään paikallista kehitysympäristöä ja gcloud-komentorivityökalua.

Functions Framework -kirjastolla funktion voi ajaa omalla koneella HTTP-palvelimena samalla tavalla kuin se toimisi pilvessä. Tämä lyhentää kehityssykliä huomattavasti, koska jokaista muutosta ei tarvitse viedä pilveen testattavaksi.

Käyttöönoton voi automatisoida Cloud Buildilla niin, että koodin vieminen GitHubiin tai GitLabiin käynnistää testit ja julkaisun.

Milloin funktiot eivät ole oikea valinta?

Palvelimeton malli ei sovi kaikkeen, ja tämä jää usein sanomatta.

Pitkäkestoiset työt. Funktiot on suunniteltu lyhyisiin suorituksiin. Nykyinen Cloud Run functions tukee pitkiäkin suoritusaikoja, mutta jos työ kestää kymmeniä minuutteja tai vaatii jatkuvaa tilaa, tavallinen Cloud Run -palvelu tai virtuaalipalvelin on luontevampi. Vertailua eri palvelinvaihtoehtoihin löytyy virtuaalipalvelimen oppaasta.

Tasainen, korkea kuormitus. Jos liikenne on jatkuvaa eikä vaihtele, jatkuvasti käynnissä oleva palvelin on usein halvempi kuin kutsuperusteinen laskutus.

Tilallisuutta vaativat sovellukset. Funktio ei säilytä tilaa suoritusten välillä. Kaikki pysyvä tieto on tallennettava erikseen tietokantaan tai tallennuspalveluun.

Viiveherkät rajapinnat. Kylmäkäynnistys voi olla ongelma, jos jokaisen kutsun on vastattava välittömästi.

Pilvipalveluvaihtoehtojen laajempi vertailu löytyy Linux-pilvipalveluiden oppaasta.

Yhteenveto

Cloud Run functions – aiemmin Cloud Functions – on toimiva tapa ajaa yksittäisiä koodinpätkiä ilman palvelinhallintaa. Se sopii erityisesti tapahtumapohjaisiin tehtäviin: tiedostojen käsittelyyn, webhookeihin, ajastettuihin ajoihin ja mikropalveluiden väliseen liimalogiikkaan.

Kaksi asiaa kannattaa pitää mielessä. Palvelun nimi vaihtui vuonna 2024, joten vanhemmat ohjeet käyttävät eri termejä kuin nykyinen hallintapaneeli. Ja ilmaiskiintiö on aidosti antelias, mutta edellyttää laskutustiliä – ja kustannukset kertyvät suoritusajasta, joten tehoton koodi maksaa suoraan rahaa.

Usein kysytyt kysymykset (UKK)

Onko Cloud Functions ja Cloud Run functions sama asia?

Käytännössä kyllä. Google nimesi Cloud Functions (2nd gen) uudelleen Cloud Run functionsiksi elokuussa 2024, ja 1. sukupolvi tunnetaan nimellä Cloud Run functions (1st gen). Toimintaperiaate säilyi samana.

Mitä ilmaiskiintiö sisältää?

Kaksi miljoonaa kutsua kuukaudessa, 400 000 GB-sekuntia ja 200 000 GHz-sekuntia laskenta-aikaa sekä 5 GB ulospäin suuntautuvaa dataa. Huomaa, että ilmaiskiintiön käyttö edellyttää voimassa olevaa laskutustiliä.

Mikä on kylmäkäynnistys?

Viive, joka syntyy kun funktiota kutsutaan pitkän tauon jälkeen ja suoritusympäristö on käynnistettävä uudelleen. Sitä voi lieventää pitämällä riippuvuudet vähissä tai käyttämällä Min instances -asetusta, joka pitää instansseja lämpiminä.

Missä funktiot kannattaa ajaa suomalaiselle yleisölle?

Haminan konesalissa (europe-north1), joka on lähin Google Cloudin alue. Alue kannattaa valita heti käyttöönotossa, koska vaihtaminen jälkikäteen tarkoittaa uudelleenkäyttöönottoa.

Milloin kannattaa valita Cloud Run funktioiden sijaan?

Kun sovellus vaatii pitkiä suorituksia, jatkuvaa tilaa tai kun kuormitus on tasaista ja korkeaa. Tasaisessa kuormituksessa jatkuvasti käynnissä oleva palvelu on usein edullisempi kuin kutsuperusteinen laskutus.

Miten salasanat ja API-avaimet säilytetään turvallisesti?

Käytä Secret Manageria. Avaimia ei pidä tallentaa koodiin. Anna lisäksi jokaiselle funktiolle oma palvelutili ja rajaa oikeudet vähimmän oikeuden periaatteella.

More To Explore