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

Viited
- Github õpetus: https://guides.github.com/introduction/git-handbook/
- Github Hello-world õpetus: https://guides.github.com/activities/hello-world/
- 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
- Azure functions käsurea kliendi installeerimine ja kasutamine: https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local
Probleemide korral kontrollige:
- Võimalikud probleemid ja nende potentsiaalsed lahendused osa praktikumi juhendi lõpus.
- Küsige otse
#praktikum-12-nativeZulip 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.
- Looge uus Azure Resource Group
- kasutage
az group createkä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
- kasutage
- 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
- Pange käsus paika:
- Looge uus App Service
- Kasutage
az webapp createkä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!
- Kasutage
Rakenduse keskkonna muutujate paika panemine.
- Peale rakenduse loomist, seadistage Rakenduse seadetes Azure portaalis keskkonna muutujad (Environment variables lehel):
- SCM_DO_BUILD_DURING_DEPLOYMENT
- Väärtus: true
- See aktiveerib Pythoni rakenduse ehitamise Azure keskkonnas, mille tulemusena installeeritakse Python paketid requirement.txt failist.
- ENABLE_ORYX_BUILD
- Väärtus: true
- See on samuti vajalik, et aktiveerds Pythoni rakenduse ehitamise Azure keskkonnas.
- 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 Blob Storage konteineri nime, mida meie eelmise praktikumi nanoteenus kasutab sisend kausta/konteinerina.
- NB! Kindlasti kontrollige, et salvestate muudatused!
- SCM_DO_BUILD_DURING_DEPLOYMENT
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õiAzureWebJobsStorage) ümber:APPSETTING_AzureWebJobsStorage.- Me seadistame selle muutuja hiljem Azure platvormi sees, ning Azure lisab sellele
APPSETTING_prefiksi. - Sarnaselt oleks hea seadistada
blob_container_namedünaamiliselt keskkonna-muutuja kaudu. Näiteks nimegaAPPSETTING_blob_container_namening see hiljem seadistada Azure platvormi kaudu. See väldib vajadust hiljem konteinerid ümber ehitada.
- Me seadistame selle muutuja hiljem Azure platvormi sees, ning Azure lisab sellele
Koodi üles laadimine
- Laadige üles kood App Service alla
- Kasutage
az webapp upkäsku - Jooksutage käsk kaustas kus asuvad teie rakenduse:
- API python fail (nimetage see ümber
app.pyfailiks!) - requirement.txt fail
- API python fail (nimetage see ümber
- Pannes käsus paika varasemalt loodud App Service nime ja ressursi grupi nime.
- Lisades
--loglipu 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
- Kasutage
Testimiseks saate minna Azure App Service rakenduse veebiaadressile:
- Aadressi leiate App Service rakenduse lehelt Azure portaalis välja
Default domainall - Testige, kas rakenduse
/raamatudotspunktile 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.
- Kasutage sama Azure ressursi gruppi ja plaani (neid ei pea uuesti looma)
- Looge uus App Service ja seadistage sarnased keskkonna muutujad sellele
- Pange sellele mikroteenusele teine nimi
- Muutke mikroteenuse koodi, et Azure kaudu seadistatud keskkonna muutujad koodist korrektselt välja lugeda saaks
- 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
- 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:
- Looge uus privaatne (või avalik) GitHub repositoorium
- 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
- 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.
- Muutke oma frontend rakenduse HTML ja JavaScript GitHub'is asuvas koodis ümber järgnev sisu:
- Muutke ära API asukohad/lingid.
localhost:portasemel 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:asendamahttps:'ga, kuna Azure nõuab et Azure Service tüüpi rakendusi kasutatakse üle HTTPS ühenduse.
- Muutke ära API asukohad/lingid.
Ü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:
- Tehke uus HTTP api otspunkt PDF failise serverrimiseks raamatute halduse mikroteenusest
- 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:
- Ülesandes 12.1 loodud ja 12.4 täiendatud Front'end HTML/JS rakenduse kood kokku pakitud (GitHub'ist alla tõmmatud) zip failina.
- 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!
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
AzureWebJobsStoragemuutuja on seadistatud rakenduseConfigurationlehel 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 -> Configurationlehelt vaadata, mis onAzureWebJsonStoragemuutuja sisemine (storage)AccountNameväärtus. See määrab ära millise storage account'i sees selle Azure Function APP funktsioonid kuulavad.
- Saab
- Selleks, et kontrollida täpselt millist Storage Account/kontot Azure Blob tüüpi päästikuga funktsioon kuulab:


- 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
- Kontrollige, et laete üles faili kausta/konteinerisse, mille nimi on
