11 (& 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 Slack teel või otse praktikumides. 12. praktikumi ajal saab sammuti konsultatsioonile tulla selle praktikumi teemal.
NB! 12. praktikumi alguses lisandub boonusülesanne (peamiselt) nendele, kes selleks hetkeks on juba lahendusega valmis saanud.
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 konventeerib 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
- DockerHub konto seadistamine Azure portaalis: https://azure.github.io/AppService/2020/10/15/Docker-Hub-authenticated-pulls-on-App-Service.html
Probleemide korral kontrollige:
- Pinnitud sõnumeid
#praktikum-11-native
kanalis kursuse Slacki's. - Võimalikud probleemid ja nende potentsiaalsed lahendused osa praktikumi juhendi lõpus.
- Küsige otse
#praktikum-11-native
Slacki kanalis.- Ka siis kui soovite lihtsalt viheid.
Ülesanne 11.1: Front-end migreerimine Azure platvormile Staatilise veebirakendusena
Selles ülesandes on eesmärk migreerida Ülesandes 9.3 loodud kasutajaliides Azure Static Web Apps teenusesse (https://azure.microsoft.com/en-us/services/app-service/static/).
Soovituslikud tegevused:
- Looge uus privaatne (või avalik) GitHub repositoorium
- Liigutage ülesandes 9 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 ü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 11.2: Raamatute back-end'i migreerimine Azure platvormile Mikroteenusena
Selles ülesandes on vaja migreerida oma raamatute halduse mikroteenus hs9-flask-api-raamatud
(Mille me konteineriseerisimine ülesandes 9.2). 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:
- 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_name
dünaamiliselt keskkonna-muutuja kaudu. Näiteks nimegaAPPSETTING_blob_container_name
ning see hiljem seadistada Azure platvormi kaudu. See väldib vajadust hiljem konteinerid ümber ehitada. - NB! Kindlasti kontrollige, et salvestate muudatused!
- Me seadistame selle muutuja hiljem Azure platvormi sees, ning Azure lisab sellele
- 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 ondocker_hub_konto_nimi
.- Ning hiljem Azure platvormis kasutada samuti täisnime koos
:latest
sildiga
- Ning hiljem Azure platvormis kasutada samuti täisnime koos
- Docker piltide üleslaadimise kirjeldus oli ülesandes 8.4
- Docker pildi sildiks on soovitav panna:
- 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.
- Peale rakenduse loomist, seadistage Rakenduse seadetes Azure portaalis keskkonna muutujad:
- 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.
- AzureWebJobsStorage (koodis saab selle nimeks APPSETTING_AzureWebJobsStorage)
Ülesanne 11.3: Raamatute otsingu Back-end'i migreerimine Azure platvormile Mikroteenusena
Selles ülesandes on vaja migreerida oma raamatute otsingu mikroteenus hhs9-flask-api-raamatute-otsing
(Mille me konteineriseerisimine ülesandes 9.2). 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 11.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:port
asemel reaalne Azure'sse üles seatud mikroteenuse API'de aadressid (ilma portideta, Azure kasutab https porti 443) - Kindlasti peab API linkides
http:
asendamahttps:
'ga, kuna Azure nõuab et Azure Service tüüpi takendusi kasutatakse üle HTTPS ühenduse.
- Muutke ära API asukohad/lingid.
- Muudatusi tuleb teha GitHub'is (e.g. kas läbi brauseri või oma arvutis ning siis GitHub'i lükata (push) )
Ülesanne 11.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!
NB! Järgmisel nädalal ilmuvad boonusülesannetena veel paar tegevust, mis ei ole kohustuslikiud, aga mille tegemine annab lisa punkte (lubades minna praktikumide osas üle 100%).
Lahenduse esitamine
Praktikumi lahendusena tuleb esitada:
- Ülesandes 11.1 loodud ja 11.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 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.
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 rakenduseConfiguration
lehel ning selle sisu on korrektne.
- Docker konteineri üles seadmisega seotud logid:
- 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 onAzureWebJsonStorage
muutuja sisemine (storage)AccountName
vää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 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
- Kontrollige, et laete üles faili kausta/konteinerisse, mille nimi on