Arvutiteaduse instituut
Courses.cs.ut.ee Arvutiteaduse instituut Tartu Ülikool
  1. Kursused
  2. 2025/26 kevad
  3. Veebiteenuste ja hajussüsteemide arendus (LTAT.06.018)
EN
Logi sisse

Veebiteenuste ja hajussüsteemide arendus 2025/26 kevad

  • Pealeht
  • Loengud
  • Praktikumid
  • Lahenduste Esitamine

Praktikum 12 - Pilvepõhiste rakenduste loomine

Selles praktikumis migreerime oma mikroteenuste põhise rakenduse Azure pilve ning seadistame selle täielikult pilvepõhise rakendusena üles. Selle praktikumi sisu on peamiselt iseseisvalt lahendamiseks. Praktikumi juhend pigem kirjeldab, mida tuleb saavutada ning käib üle probleemsemad kohad.

Ülesannete lahendamiseks on kaks nädalat, aga praktikumi juhendaja käest võib küsida piiramatult abi ja vihjeid Zulip teel või otse praktikumides. 13. praktikumi ajal saab sammuti konsultatsioonile tulla selle praktikumi teemal.

Praktikumi käigus loodava pilvepõhiste rakenduse komponendid on:

  1. Azure Blob Storage konto, kuhu salvestatakse raamatute failid
  2. Azure Static App Service rakendus kogu hajusrakenduse veebiliidesena
  3. hs9-flask-api-raamatud back-end API raamatute haldamiseks (kasutajad kasutavad seda veebiliidese kaudu)
  4. hs9-flask-api-raamatute-otsing back-end API raamatutest sõne otsimiseks (kasutajad kasutavad seda veebiliidese kaudu)
  5. Azure Functions sündmuse põhine nanoteenus/funktsioon, mis konverteerib kõik raamatu failid samas Azure Blob Storage kontos PDF failideks.

Viited

  1. Github õpetus: https://guides.github.com/introduction/git-handbook/
  2. Github Hello-world õpetus: https://guides.github.com/activities/hello-world/
  3. Azure Functions App Python'i keskkonna dokumentatsioon: https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-python?tabs=asgi%2Cazurecli-linux%2Capplication-level
  4. Azure functions käsurea kliendi installeerimine ja kasutamine: https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local

Probleemide korral kontrollige:

  1. Võimalikud probleemid ja nende potentsiaalsed lahendused osa praktikumi juhendi lõpus.
  2. Küsige otse #praktikum-12-native Zulip teemas.
    • Ka siis kui soovite lihtsalt vihjeid.

Ülesanne 12.1: Raamatute halduse back-end'i migreerimine Azure platvormile Mikroteenusena

Selles ülesandes on vaja migreerida oma raamatute halduse mikroteenus hs9-flask-api-raamatud (Mille me konteineriseerisime ülesandes 9.2 ja natuke muutsime praktikumis 10). Me teeme mõned muudatused koodis, loome Azure Service App teenus ja laeme koodi üles kasutades käsurida.

NB! Me ei kasuta Dokeri põhist Azure App Service'it, et pilve krediiti kokku hoida.

Järgnevad Azure ressursside loomised tehke käsurealt Azure CLI käskude abil.

  1. Looge uus Azure Resource Group
    • kasutage az group create käsku
    • Pannes käsus paika regioon, mis on teie Azure Student kontos lubatud ja nimi ressursi gruppile
    • Käsu dokumentatsioon: https://learn.microsoft.com/en-us/cli/azure/group?view=azure-cli-latest
  2. Looge uus Azure App Service plaan:
    • Pange käsus paika:
      • Plaani nimi
      • Ressursi grupi nimi
      • SKU: F1 (et oleks tasuta plaan)
      • Määrake plaani tüübiks Linux (Windows plaan ei toeta Pythonit)
    • Käsu dokumentatsioon: https://learn.microsoft.com/en-us/cli/azure/appservice/plan?view=azure-cli-latest
  3. Looge uus App Service
    • Kasutage az webapp create käsku
    • Pannes käsus paika rakenduse nimi, ressursi grupi nimi, app service plaani nimi.
      • Python runtime: PYTHON:3.10
    • Käsu dokumentatsioon: https://learn.microsoft.com/en-us/cli/azure/webapp?view=azure-cli-latest
    • Kontrollige üle et kasutatakse varasemat App Service plaani, ja ei looda uus plaan!

Rakenduse keskkonna muutujate paika panemine.

  • Peale rakenduse loomist, seadistage Rakenduse seadetes Azure portaalis keskkonna muutujad (Environment variables lehel):
    1. SCM_DO_BUILD_DURING_DEPLOYMENT
      • Väärtus: true
      • See aktiveerib Pythoni rakenduse ehitamise Azure keskkonnas, mille tulemusena installeeritakse Python paketid requirement.txt failist.
    2. ENABLE_ORYX_BUILD
      • Väärtus: true
      • See on samuti vajalik, et aktiveerds Pythoni rakenduse ehitamise Azure keskkonnas.
    3. AzureWebJobsStorage (koodis saab selle nimeks APPSETTING_AzureWebJobsStorage)
      • See peaks olema kasutatava Azure blob storage ühenduse (connection) täis string väärtus.
      • Soovituslik on kasutada TÄPSELT sama ühenduse konfiguratsiooni/väärtust, mida meie eelmise praktikumi nanoteenus kasutab, siis ei ole vaja seda ümber teha, et see PDF faile genereeriks teises asukohas.
    4. blob_container_name (koodis saab selle nimeks APPSETTING_blob_container_name)
      • Saate selleks määrata sama Azure Blob Storage konteineri nime, mida meie eelmise praktikumi nanoteenus kasutab sisend kausta/konteinerina.
    • NB! Kindlasti kontrollige, et salvestate muudatused!

Koodi täiendamine

Muudame mikroteenuse koodi, et azure kaudu seadistatud keskkonna muutujad koodist korrektselt välja lugeda saaks:

  • Kasutage seda koodi, mis oli teil praktikumi 10 lõpus (peale CORS info lisamist)
  • Muutke rakenduse koodis olev keskkonna muutuja nimi AZURE_BLOB_CONNECTION_STRING'st (või AzureWebJobsStorage) ümber: APPSETTING_AzureWebJobsStorage.
    • Me seadistame selle muutuja hiljem Azure platvormi sees, ning Azure lisab sellele APPSETTING_ prefiksi.
    • Sarnaselt oleks hea seadistada blob_container_name dünaamiliselt keskkonna-muutuja kaudu. Näiteks nimega APPSETTING_blob_container_name ning see hiljem seadistada Azure platvormi kaudu. See väldib vajadust hiljem konteinerid ümber ehitada.

Koodi üles laadimine

  1. Laadige üles kood App Service alla
    • Kasutage az webapp up käsku
    • Jooksutage käsk kaustas kus asuvad teie rakenduse:
      1. API python fail (nimetage see ümber app.py failiks!)
      2. requirement.txt fail
    • Pannes käsus paika varasemalt loodud App Service nime ja ressursi grupi nime.
    • Lisades --log lipu näidatakse teile koheselt ka logisid, kust näete kas see õnnestub.
    • Käsu dokumentatsioon: https://learn.microsoft.com/en-us/cli/azure/webapp?view=azure-cli-latest

Testimiseks saate minna Azure App Service rakenduse veebiaadressile:

  • Aadressi leiate App Service rakenduse lehelt Azure portaalis välja Default domain all
  • Testige, kas rakenduse /raamatud otspunktile tehtud GET päring tagastab korrektse tulemuse.

Ülesanne 12.2: Raamatute otsingu Back-end'i migreerimine Azure platvormile Mikroteenusena

Selles ülesandes on vaja migreerida oma raamatute otsingu mikroteenus hs9-flask-api-raamatute-otsing (Mille me konteineriseerisimine ülesandes 9.2 ja muutsime praktikumis 10). Me teeme mõned muudatused koodis, loome veel ühe Azure Service App teenuse ja laeme koodu üles kasutades käsurida.

NB! Me ei kasuta Dokeri põhist Azure App Service'it, et pilve krediiti kokku hoida.

Soovituslikud tegevused:

  • Jälgige samu soovituslikke tegevusi, mis eelmises ülesandes.
    1. Kasutage sama Azure ressursi gruppi ja plaani (neid ei pea uuesti looma)
    2. Looge uus App Service ja seadistage sarnased keskkonna muutujad sellele
      • Pange sellele mikroteenusele teine nimi
    3. Muutke mikroteenuse koodi, et Azure kaudu seadistatud keskkonna muutujad koodist korrektselt välja lugeda saaks
    4. Testige, kas mikroteenusele tehtud päringud tagastavad korrektsed otsingu tulemused.

Ülesanne 12.3: Front-end migreerimine Azure platvormile

Selles ülesandes on eesmärk Praktikumis 10 loodud kasutajaliides Azures tööle panna. Saate kasutada kas Azure Staatilise veebirakenduse teenust või Azure Storage Account konteinerit HTML ja JS failide Veebist kätte saadavaks tegemist.

Kui teil ei õnnestunud Kuuendas praktikumis "Azure Staatilised veebirakendused" teenust üles seada, siis kasutage "Azure Storage Account" põhist lahendust.

Azure Storage Account põhine lahendus

Liigutage kasutajaliidese HTML ja JavaScript failid Azure Storage Account konteinerisse ja tehke konteineri sisesed failid (blobs) avalikuks.

[ Näita Azure Storage Account põhist lahendust ]

  • Kasutage varasemalt loodud Azure Storage Account teenust või looge uus.
    • NB! Kui te kasutate sama Storage Account kontot, mida kasutab teie Azure Functions pdf genereerimise lahendus, siis teil on hiljem vähem tööd.
  • Looge kolm failide salvestamise konteinerit:
    • raamatud
    • pdf
    • frontend
  • Seadistage Azure Storage Account teenus toetama avalikke konteinereid (Settings lehel) ja aktiveerige frontend salvestus konteineris blob/failide näitamine avalikuks (blob tasemel, mitte kausta/konteineri tasemel)
  • Kopeerige frontend'i HTML ja JavaScript failid frontend konteinerisse

Testimiseks kontrollige, mis on loodud HTML faili asukoht veebis (URL) ja avage see brauseris. Aga HTML vormide nupud veel ei tööta ja brauseri konsool tõenäoliselt näitab JS vigu aga te peaksite nägema korrektset HTML lehte.

Azure Static Web App põhine lahendus

Migreerige Praktikumis 10 loodud kasutajaliides Azure Static Web Apps teenusesse (https://azure.microsoft.com/en-us/services/app-service/static/).

[ Näita Azure Static Web Apps põhist lahendust ]

Soovituslikud tegevused:

  1. Looge uus privaatne (või avalik) GitHub repositoorium
  2. Liigutage ülesandes 10 loodud kasutajaliidese koodi (html ja JS) failid github repositooriumisse
    • Soovituslik on html faili nimi ümber nimetada index.html failiks
    • Soovituslik on html ja JS fail panna repositooriumi kõige ülemisse juur- (/) kausta
  3. Luua Azure Static Web App, mis võtab rakenduse sisu teie GitHub repositooriumist

Järgmistes ülesannetes läheb vaja neid faile muuta, aga tänu GitHUB CI/CD töövoogudele uuendatakse teie Azure static web app rakendust automaatselt peale igat GitHubis tehtud muudatusi (commit'i).

Testida saate avades Azure Static Web App rakenduse URL'i, mis peaks näitama HTML veebilehte. Aga HTML vormid veel ei tööta ja brauseri konsool tõenäoliselt näitab JS vigu.

Ülesanne 12.4: Raamatute Front-end'i muutmine

Selles ülesandes on vaja sisse viia muudatused meie frontend rakendusse, et see kasutaks API käskude asukohana nüüd loodud Azure Service rakendusi.

  1. Muutke oma frontend rakenduse HTML ja JavaScript GitHub'is asuvas koodis ümber järgnev sisu:
    • Muutke ära API asukohad/lingid. localhost:port asemel reaalne Azure'sse üles seatud mikroteenuse API'de aadressid (ilma portideta, Azure kasutab https porti 443)
    • Ärge unustage, et meil on kaks mikroteenust erinevate nimede ja URL'dega.
    • Kindlasti peab API linkides http: asendama https:'ga, kuna Azure nõuab et Azure Service tüüpi rakendusi kasutatakse üle HTTPS ühenduse.

Ülesanne 12.5: Azure Functions nanoteenuse üles seadmine, et raamatutest, genereeritakse ka PDF failid.

Kontrollige (või seadke see uuesti üles), et töötab ka Azure Functions nanoteenus, mis genereerib loodud raamatu failidest ka PDF failid.

Ülesanne 12.6: Kogu pilvepõhise rakenduse testimine

Selles ülesandes on eesmärk kontrollida, et kogu pilvepõhine hajussüsteem töötab edukalt. Tehke läbi kõik tüüpilised meie hajus-veebi-rakenduse funktsionaalsused.

  • Raamatu loomine
  • Raamatute nimekirja vaatamine
  • Raamatust otsimine
  • Raamatu alla laadimine
  • Raamatu kustutamine
  • Kontrollige, et tekib PDF fail

NB! Lahenduse esitamiseks on kaks nädalat!

Boonus ülesanne I: Raamatust sõnade otsingu mikroteenuse muutmine.

See ülesanne on täielikult iseseisev. Aga võite küsida vihjeid või abi vigade otsimisel.

Eesmärk:

  • Täiendage Raamatust otsingu (hs9-flask-api-raamatute-otsing) mikroteenust nii, et sellel ei oleks enam vaja andmebaasi ühendust.
    • Mikroteenus ei tohiks enam tõmmata alla raamatute sisu Azure File Storage teenusest.
    • Mikroteenus peaks kasutama Raamatute halduse mikroteenuse API't (hs9-flask-api-raamatud), et alla tõmmata raaamatute sisu/faile.
    • Eemaldage kõik Python meetodid, mis tegelevad Azure suhtlusega ning Azure Python teegid requirements.txt failist ja importide alt.

Boonusülesande osas tuleb esitada:

  • Kood, mis sisaldab ka Dockerfile'i
  • Ekraanivaated, mis demonstreerivad et sõna otsing raamatutest töötab.

Boonus ülesanne II: Raamatute PDF'ide näitamine front-endis

Leidke lahendus kuidas teha ka raamatute PDF failid frontend'i kaudu kasutajatele kätte saadavaks.

Soovituslik lähenemeine:

  1. Tehke uus HTTP api otspunkt PDF failise serverrimiseks raamatute halduse mikroteenusest
  2. Lisage selle vastavad lingid frontend'i vaatesse, kus näidatakse raamatute nimekirja

Võite kasutada ka teisi lähenemisi, aga sellisel juhul lisage kirjeldus kuida selle lahendasite.

Lahenduse esitamine

Praktikumi lahendusena tuleb esitada:

  1. Ülesandes 12.1 loodud ja 12.4 täiendatud Front'end HTML/JS rakenduse kood kokku pakitud (GitHub'ist alla tõmmatud) zip failina.
  2. Front'end HTML/JS Azure Static Web rakenduse aadress Azure pilves
    • Kui soovite oma rakendust varem eemaldada, siis saatke Zulip sõnum Hendrik Perule selle kohta, et teie rakendus on üles seatud ning testitud. Ta vaatab selle üle ning annab kinnituse, et saate peale seda ressursid eemaldada, et vähendada teie Azure krediidi kasutamist.

NB! Lahenduse esitamiseks on kaks nädalat!

Lahenduste esitamiseks peate olema sisse loginud ja kursusele registreerunud.

Võimalikud probleemid ja nende potentsiaalsed lahendused.

  • Kui API backend ei tööta, siis saab App Service logisid vaadata:
    • Vaadake App Service teenuse Log stream sisse.
    • keskkonna üles seadmisega seotud logid: App Service -> API rakendus -> Deployment Center -> Logs
    • Teenuse sisesed logid: App Service -> API rakendus -> Monitoring -> Log Stream
    • Samuti kontrollige, et AzureWebJobsStorage muutuja on seadistatud rakenduse Configuration lehel ning selle sisu on korrektne.
  • Kui tekib probleem Azure ressursside loomisega mingis Azure pilve regioonis, siis võib olla vajadus muuta regiooni.
  • Vältige Azure resursside nimedes suuri tähti, alakriipse ning muid spetsiaalseid tähti või karaktereid kui võimalik.
  • Kui tekib probleem sellega, et meie PDF funktsioon kasutab erinevat Azure Storage kontot kui Flask rakendus, siis saab flask rakenduses ära muuta Storage Account connection string muutuja väärtus, et oleks sama, mis sellel kontol mida PDF funktsioon kasutab.
    • Selleks, et kontrollida täpselt millist Storage Account/kontot Azure Blob tüüpi päästikuga funktsioon kuulab:
      • Saab Function App - > Settings -> Configuration lehelt vaadata, mis on AzureWebJsonStorage muutuja sisemine (storage) AccountName väärtus. See määrab ära millise storage account'i sees selle Azure Function APP funktsioonid kuulavad.
  • Kui funktsioon ei käivitu peale seda kui laete üles uue teksti faili:
    • Kontrollige, et laete üles faili kausta/konteinerisse, mille nimi on raamatud
    • Kontrollige, ega teil ei ole mitut storage kontot, ning te kasutate teist kui see funktsioon kasutab.
    • Kontrollige, et funktsioni Trigger Tüüp on Blob
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused