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:
- 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:
- Võimalikud probleemid ja nende potentsiaalsed lahendused osa praktikumi juhendi lõpus.
- 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:
- 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 ü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õ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 7.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.- 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.
- AzureWebJobsStorage (koodis saab selle nimeks APPSETTING_AzureWebJobsStorage)
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.
- 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 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:
- Ü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 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