Arvutiteaduse instituut
  1. Kursused
  2. 2023/24 kevad
  3. Veebiteenuste ja hajussüsteemide arendus (LTAT.06.018)
EN
Logi sisse

Veebiteenuste ja hajussüsteemide arendus 2023/24 kevad

  • Pealeht
  • Loengud
  • Praktikumid
  • Lahenduste Esitamine

12 praktikum - 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 konventeerib 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
  5. DockerHub konto seadistamine Azure portaalis: https://azure.github.io/AppService/2020/10/15/Docker-Hub-authenticated-pulls-on-App-Service.html

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 viheid.

Ülesanne 12.1: Front-end migreerimine Azure platvormile Staatilise veebirakendusena

Selles ülesandes on eesmärk migreerida Praktikumis 10 loodud kasutajaliides Azure Static Web Apps teenusesse (https://azure.microsoft.com/en-us/services/app-service/static/).

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 ülessannetes 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 muudatudt (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.2: Raamatute 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, ehitame Docker pildi uuesti, laeme selle DockerHub'i ning seadistame selle jooksma Azure Service App teenuse sees.

Soovituslikud tegevused:

  • 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.
    • NB! Kindlasti kontrollige, et salvestate muudatused!
  • Ehitage uuesti selle mikroteenuse Docker pilt (image) ning publitseerige see DockerHub'i.
    • Docker pildi sildiks on soovitav panna: docker_hub_konto_nimi/hs9-flask-api-raamatud:latest kus teie konto nimi on docker_hub_konto_nimi.
      • Ning hiljem Azure platvormis kasutada samuti täisnime koos :latest sildiga
    • Docker piltide üleslaadimise kirjeldus oli ülesandes 7.4
  • Looge uus Docker konteineri tüüpi Azure Service App teenus, mis kasutab teie poolt loodud DockerHub pilti alusena.
    • Azure Service App on üldine teenus mikroteenuste jooksutamiseks ja staatiliste rakendustena, funktsioonidena või üldiste konteineritena.
    • Valige "Web App" tüüp
      • Region: North Europe
      • Publish: Container
      • Pricing Plan: Free F1 (Shared infrastructure)
      • Resource Group: Valige sama Ressurssi grupp, mida Static App puhul kasutasite
      • Container vaates:
        • Docker Hub or other registries.
        • Registry server URL: (jätke default väärtus)
        • Image and tag: Teie DockerHub kasutajanimi/dockerpildi_nimi:latest
  • Peale rakenduse loomist, seadistage Rakenduse seadetes Azure portaalis keskkonna muutujad (Environment variables lehel):
    • 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.
    • blob_container_name (koodis saab selle nimeks APPSETTING_blob_container_name)
      • Saate selleks määrata sama Azure Blod Storage konteineri nime, mida meie eelmise praktikumi nanoteenus kasutab sisend kausta/konteinerina.

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.3: 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, ehitame Docker pildi ümber, laeme selle DockerHub'i ning seadistame selle jooksma Azure Service App teenuse sees.

Soovituslikud tegevused:

  • Jälgige samu soovituslikke tegevusi, mis eelmises ülesandes.

Ü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)
    • Kindlasti peab API linkides http: asendama https:'ga, kuna Azure nõuab et Azure Service tüüpi takendusi kasutatakse üle HTTPS ühenduse.
  2. Muudatusi tuleb teha nii, et see kajastub GitHub'is (e.g. kas läbi brauseri või oma arvutis ning siis GitHub'i lükata (push) )

Ülesanne 12.5: 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!

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 Slack sõnum Pelle Jakovitsile 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.
Lahenduste esitamiseks peate olema sisse loginud ja kursusele registreerunud.

Võimalikud probleemid ja nende potentiaalsed lahendused.

  • Kui API backend ei tööta, siis saab Docker'i konteinerite logisid vaadata:
    • Docker konteineri üles seadmisega seotud logid: App Service -> API rakendus -> Deployment Center -> Logs
    • Docker konteineri 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 prbleem DockerHub avalike piltide kasutamisega, siis on mõistlik seadistada Azure kasutama teie DockerHUb kontot: https://azure.github.io/AppService/2020/10/15/Docker-Hub-authenticated-pulls-on-App-Service.html
  • Kui tekib probleem Azure resursside 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 paista kävitavat 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