Google Cloud Run ja Firestore

Siirretään sovelluksemme Googlen Cloud run -ympäristöön.

Huom. tehtävää ollaan päivittämässä cloudruniin eli jatkossa emme käytä enää appenginea. Sivun lopusta löytyy vielä vanhat appengine-ohjeet.

Ota ensimmäisenä käyttöön Googlen tarjoama tarjouskuponki, jolla voit kokeilla Googlen maksullisia pilvipalveluja antamatta oman luottokortin tietoja. Cloud runin peruskäyttö on ihan ilmaista, mutta esim. SQL-tietokannan käyttäminen maksaa.

Google cloud run - hello world

Kokeile yksinkertaisen flask-sovelluksen julkaisemista cloud runissa Googlen Quickstart: Build and deploy a Python (Flask) web app to Cloud Run -ohjeen avulla. Seuraavassa on selvennetty muutamaa kohtaa Googlen ohjeesta:

Lisäksi on syytä asentaa Cloud Code -laajennos Visual Studio Codeen, jolloin pääset kehittämään ja testamaan sovellustasi myös lokaalisti omalla koneella Googlen pilviympäristöä vastaavassa docker-kontissa. Tämä ei onnistu yliopiston mikroluokkien koneilla, koska niille ei saa asennettua dockeria. Sovellusta voi kehittää myös flaskin omalla palvelimella, mutta lopullinen toimivuus on aina syytä varmistaa oikeassa ympäristössä.

Kirjautuminen Googlen tunnuksella

Google-tunnuksella kirjautuminen vaatii hieman esivalmisteluja, jotta saadan OAuth 2.0 toimimaan.

Using OAuth 2.0 to Access Google APIs

Firestore

Varmista, että tietokoneellasi on uusin python. Mielellään Python 3.12.

Aloita ohjeen Get started with Cloud Firestore mukaan ja luo uusi firebase-projekti: Luo uusi firebase-projekti. Huom. Valitse ensimmäisenä linkki "Add Firebase to Google Cloud project" ja linkitä firebase-projektisi edellä luomaasi Google Cloud -projektiin.

Flask-Caching

Onko sovelluksesi hidas? Kestääkö jokin laskenta kauan? Tehdäänkö samoja hitaita asioita usein uudelleen? Käytä välimuistia ja sovelluksesi nopeutuu. Käytätkö kallista pilvipalvelua, jossa prosessointiaika tai tietokantaoperaatiot maksavat? Käytä välimuistiä ja säästät kustannuksissa.

Flask-Caching-kirjastolla saa flask-sovellukseen helposti välimuistin.

Firestore clients: To cache, or not to cache? (or both?)

Firestoren hierarkiat ja transaktiot

Cloud runin instanssit ja kustannukset

Tämä käsittelee appenginea, mutta samat periaatteet pätevät cloud runiin. Cloud run -versio tulossa.

Cloud run luo tarpeen mukaan yhden tai useampia instansseja sovelluksestasi. Mitä enemmän sovelluksella on käyttäjiä/verkkoliikennettä tai mitä hitaammin sovellus vastaa pyyntöihin, sitä herkemmin Cloud run ottaa käyttöön useampia instansseja. Mitä enemmän instansseja on käytössä sitä nopeammin sovellus vastaa, mutta sitä enemmän sovellus myös kuluttaa palvelinresursseja ja google laskuttaa enemmän.

Cloud runin asetuksien säätämistä käsitellään dokumentissa Configure Cloud Run services

Asetuksia ei voi säätää jälkikäteen vaan asetusten muuttaminen tapahtuu aina luomalla sovelluksesta uusi revisio "Edit & deploy new revision". Oletuksena uusi revisio ottaa haltuunsa sovelluksen liikenteen. Vanha revisio kannattaa säilyttää jonkin aikaa, jos uudessa onkin bugeja, ja haluaa siirtää sovelluksen toiminnan vanhalle versiolle.

Tärkeimmät asetukset:

General development tips

Cloud run -sovelluksen kustannuksiin vaikuttaa myös firestore: mitä enemmän dataa tallennat sitä enemmän google laskuttaa. Käytännössä eniten vaikuttaa kuitenkin dataliikenne eikä tallennetun datan määrä. Ts. jokaisen yksittäisen tietueen (entity) lukeminen firestoresta maksaa ja samoin myös tietueen kirjoittaminen firestoreen maksaa. Google tarjoaa kuitenkin hyvän ilmaisen (free tier) quotan, jonka puitteissa pystyy jo tekemään isohkojakin sovelluksia maksamatta senttiäkään. Ilmainen quota on laskutustilikohtainen. Kts. Firestore pricing Kustannuksien säästämiseksi google tarjoaa maksullisia välimuistipalveluja kuten Memorystore. Emme kuitenkaan käytä näitä nyt tällä kurssilla. Flask tarjoaa oman yksinkertaisen välimuistin, joka voi jo auttaa paljon.

Appenginen skaalaus - vanha

App Enginen skaalausta ja muita ominaisuuksia voi säätää app.yaml-tiedoston avulla.

runtime: python312  #python-tulkin versio

default_expiration: "24h"  #määrää staattisten tiedostojen säilymisiän välimuistissa
instance_class: F1 #käytetyn instanssin teholuokka. F1 on heppoisin ja halvin
                   #älä käytä tällä kurssilla tehokkaampia

automatic_scaling:
  target_cpu_utilization: 0.65  #raja-arvo, jonka jälkeen käynnistetään uusia instansseja
  min_instances: 2 #instanssien minimimäärä. 0 tarkoittaa, että instanssit voidaan kaikki sammuttaa, jos sovelluksella ei ole käyttöä
                   #sovelluksen käynnistyminen on hitaampaa, jos kaikki instanssit ovat pois päältä
                   #Käytä tällä kurssilla arvoa 2 eli koko ajan on käytössä kaksi instanssia
                   #tällä määrällä saa hyvin testattua toimiiko sovellus kunnolla useamman instanssin tapauksessa
                   #huom. kaksi koko ajan käynnissä olevaa instanssia vie paljon rahaa. Aseta instanssien nimimimääräksi
                   #0 silloin kun et sovellusta tarvi 
                   #varo globaaleja muuttuja, koska ne ovat instanssikohtaisia
  max_instances: 1   #instanssien maksimimäärä. Mitä suurempi lukumäärä sitä suuremmat mahdolliset kustannukset
  min_idle_instances: 0 #jouten olevien instanssien minimimäärä
  max_idle_instances: 1 #jouten olevien instanssien maksimimäärä
  min_pending_latency: 30ms #kauanko odotetaan jonossa ennen kuin luodaan uusi instanssi
  max_pending_latency: 100ms #jos odotusaika on minimin ja maksimin välissä yritetään käyttää olemassa olevaa instanssia
  max_concurrent_requests: 50 #montako yhtäaikaista pyyntöä yksi instanssi kelpuuttaa ennen kuin luodaan uusia instansseja


Tarkemmat tiedot asetuksista löytyvät app.yaml referencestä

Appengine - vanha

Appengine on googlen vanhempi alusta web-sovelluksille. Suositeltavampaa on käyttää uudempaa cloud runia. Tämä ohje on tässä vielä jäljellä kaiken varalta, mutta ei ole siis olennainen enää 2026 alkaen.

Siirretään sovelluksemme Googlen App Engine -ympäristöön. App Engine tarjoaa kaksi ympäristövaihtoehtoa: standardiympäristön ja joustavan ympäristön. Käytämme standardiympäristöä, joka on yksinkertaisin ylläpitää ja pienille sovelluksille myös edullisin.

Google Datastore - vanha

Datastore on vanhempi googlen NoSQL-tietokanta. Pyrimme käyttämään jatkossa Firestorea (native mode).

Googlen Datastore on NoSQL-tietokanta. Datastorea voi käyttää melkein samaan tapaan kuin relaatiotietokantoja.

Liitoksia ei voi käyttää Datastoren kyselyissä.

Uusin versio Datastoresta on rakennettu Googlen Firestore tietokannan päälle. Firestorea voi käyttää joko natiivimoodissa tai Datastore-moodissa. Käytämme Datastore-moodia.

Choosing between Native mode and Datastore mode.

Lisätietoa

Kyselyt (Datastore Queries) - vanha

Käytä Firestore (native mode). Tässä vielä vanha datastoreohje kaiken varalta.

Lisätietoa

Käyttäjien kommentit

Kommentoi Lisää kommentti