Kuues praktikum - Azure Pilveplatvorm
Selles praktikumis tutvume Microsoft Azure pilveplatvormiga. Vaatam, kuidas lihtsasti saab üles seada staatilisi veebirakendusi (HTTP, JS) ning kuidas kasutada IaaS pilvetehnoloogia lähenemist selleks, et üles seada Flask'i põhine Pythoni veebiteenus, mille me tegime neljandas praktikumis.
Probleemide korral kontrollige:
- Võimalikud probleemid ja nende potentsiaalsed lahendused osa praktikumi juhendi lõpus.
- Küsige otse
#praktikum-6
Zulip teemas.- Ka siis kui soovite lihtsalt viheid.
Viited
- Github õpetus: https://guides.github.com/introduction/git-handbook/
- Github Hello-world õpetus: https://guides.github.com/activities/hello-world/
Ülesanne 6.1: Konto loomine
- Logige Azure'i pilve sisse: https://azure.microsoft.com/en-us/
- Kasutage oma ülikooli e-posti aadressi ja parooli
- Kui teilt küsitakse, millist tellimuse tüüpi kasutada, valige
Azure for Students
tellimus.
- Avage Azure Cloudi portaal: https://portal.azure.com/#home
- Tutvuge saadaolevate teenustega: https://portal.azure.com/#allservices
Ülesanne 6.2: Azure Staatilised veebirakendused
Azure Static Web App teenust saab kasutada veebirakenduste juurutamiseks, mis ei vaja serveri poolseid (back-end) komponente ja mida saab ehitada HTML- või Javascripti lehtedena, kus kogu rakenduse loogika käivitatakse kliendi poolel. See on sobiv lihtsate kodulehtede jaoks.
Task 6.2.1 Veebilehe jaoks Github'i repositooriumi loomine
Selles ülesandes loome lihtsa HTML-i veebirakenduse ja salvestame selle Github'i repositoorimisse.
- Logige sisse oma Githubi (http://github.com/) kontole või looge uus konto.
- Loome Azure'i staatilise veebi HTML-i rakenduse GitHubi näiteprojekti koopia (mitte-täielik
fork
)- Minge aadressile https://github.com/login?return_to=/staticwebdev/vanilla-basic/generate
- Määrake loodavale GitHubi repositooriumile uus nimi.Näiteks: ut2024azapp
- Klikkige nupul Create repository from template
- Kui te ei tunne Git'i ja Github'i, siis lugege selle praktikumi juhendi viidete all olevaid juhendeid.
- Minge oma loodud GitHub repositooriumisse. Rakendus on lihtne HTML lehekülg, mille sisu on kirjutatud faili src/index.html.
- Muutke faili index.html (saab muuta otse Github'is brauseri kaudu) ja asendage HTML body sees olev
<h1>Vanilla JavaScript App</h1>
enda poolt muudetud sisuga, mis sisaldab vähemalt teie nime . - Lisage HTML-lehele täiendavat sisu või pilte, niikaua, kui teie nimi on lehel selgelt nähtav (teme hiljem üles seatud veebilehest ekraanipilte)
- Muutke faili index.html (saab muuta otse Github'is brauseri kaudu) ja asendage HTML body sees olev
Task 6.2.2 Veebilehe üles seadmine Azure'i pilves staatilise veebirakendusena
Selles ülesandes seadistame ja konfigureerime Azure'i pilveteenuse, et üles seada rakendus otse GitHub'i repositooriumist.
- Avage Azure'i pilveportaal: https://portal.azure.com/
- Otsige teenust Static Web Apps
- Looge uus staatiline veebirakendus (Static Web App)
- Kui teil pole veel Azure ressursirühma (Resource Group), siis looge uus.
- Logige sisse oma Githubi kontoga, et luua ühendus Azure ja GitHub kontode vahel
- See annab MS Azure'ile juurdepääsu teie GitHubi kontole!
- MS Azure kasutab seda automaatse juurutamise konfiguratsiooni seadistamiseks, et tuvastada iga kord, kui teete oma rakendus Github'is muudatusi. Vaatleme seda lähemalt ühes järgnevas ülesandes.
- Valige organisatsiooniks oma Githubi kasutajanimi
- Valige hiljuti loodud HTTP-rakenduste repositoorium.
- Valige
main
rakenguse haruks (branch) - Valige
Custom
ehituse eelseadeks (Build Presets)- Seadistage rakenduse asukohaks
/src
- Ülejäänud valikud peaks samaks jääma!
- Seadistage rakenduse asukohaks
- Klikkige valikul Review and Create ja siis uuesti Create
- Kui üles seadmine on lõppenud (võib võtta mõned minutid), võite minna loodud Static Web Appsi ressursile ja avada juurutatud teenuse URL, et pääseda ligi oma veebilehele:
Task 6.2.3 Rakenduse täiendamine
Eelmises ülesandes seadistati Azure's automatiseeritud töövoog, mis käivitub iga kord, kui teete Github'is muudatusi oma veebirakenduse lähtekoodis. Selles ülesandes muudame veebilehe sisu ning uurime, kuidas need muudatused jõuavad automaatselt Azure pilve ja meie rakendusse.
- Muutke Githubis faili Index.html ja kinnitage muudatused (ja tehke Git push, kui te ei kasuta GitHubi veebisaiti otse).
- GitHub-to-Azure'i integratsioon on loodud GitHub'i töövoona (workflow), mis on seadistatud teie repositooriumi sees (Azure poolt loodud) kaustas
.github/workflows
. - Avage töövoo fail ja lugege see läbi
- Töövoog defineerib erinevad integreeimise tegevused, mis käivitatakse konkreetsete Git'i sündmuste (commit, release, vms.) korral.
- Näiteks build_and_deploy_job töö käivitub, kui GitHubi sündmuse tüüp on PUSH (uued muudatused on GitHubisse lükatud)
- Praktikas käivitatakse Dockeri konteineris olev käsk (pildi tüüp: Azure/static-web-apps-deploy@v1) iga kord, kui toimub PUSH-sündmus.
- See käsk kasutab Azure'i pilve API-d uute muudatuste edastamiseks Azure'i staatilise rakenduse teenusesse.
- Et Github saaks käivitada toiminguid Windows Azure'i platvormis, salvestatakse ka juurdepääsu info GitHubi repositooriumi seadetesse Github saladusena.
- Töövoo definitsioonis pääseb nendele saladustele programmiliselt juurde järgmiselt:
${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_XXXXXXXXXXXXXXX}}
- Saate värskendada või eemaldada saladusi, minnes oma projekti sätetesse ja avades lehe Secrets.
- Töövoo definitsioonis pääseb nendele saladustele programmiliselt juurde järgmiselt:
- WorkFlow käivitamisi näete oma Githubi projekti vahekaardil Actions .
- Seal näete ka millised töövoo toimingud olid edukad, nende olekut ja ka ise uusi töövooge luua.
- Lisaks näeb seal veateateid, kui mõni töövoog ei olnud edukas.
- Saate tühistada Azure'i juurdepääsu oma GitHubi kontole oma Githubi profiili seadetes (aadressil: https://github.com/settings/applications alamosas Authorized OAuth Apps).
- Kuid ärge tehke seda enne, kui olete vähemalt kõik praktikasessiooni tulemused täitnud ja esitanud
- Tehke ekraanipilt üles seatud staatilisest veebirakendusest
- Vastake Küsimusele: Kui kaua kulub Azure'il teie rakenduse kuvatava sisu värskendamiseks?
- Saate seda käsitsi testida (muuta HTML-lehe sisu ja kontrollida, kui kaua kulub Azure'il reaalajas veebilehe sisy värskendamiseks) või kontrollida, kui kaua värskendustoimingule tegelikult aega kulub (kontrollides GitHubi repositooriumi Actions sisu)
PS! See teenus käivitati 2020. aasta mais ja on väikeses mahus isiklikuks kasutamiseks tasuta.
Selles praktikumis me seda staatilist rakendust edasi ei arenda, aga tulevikus loome selle abil oma lahenduse veebiliidese (front end).
Ülesanne 6.3: Azure Virtuaalmasina tellimine
Selles ülesandes vaatame, kuidas me saame luua uusi Azure pilve virtuaalmasinaid.
- Otsime Virtual machines Azure teenuste hulgast Azure veebikonsoolis
- Loome uue Azure Virtuaalmasina
- Seadistage järgmised valikud virtuaalmasina loomisel:
- Region: North Europe
- Image: Ubuntu 22.04
- Size: DS1_v2 (Valige
See all sizes
ja siis D-Series v2 alt leiate DS1_v2)- Kui seda Size tüüpi ei ole võimalik valida mingil põhjusel, siis valigemõni teine odavam VM tüüp millel on 1-2 vCPU tuuma ja 4-8 GB mälu
- Authentication type: SSH public key
- SSH public key source: generate new (Loome uue SSH võtme)
- username: azureuser
- Select inbound ports: Aktiveerige/valige pordid
80
ja22
- Ülejäänud seadistused võivad samaks jääda.
- Käivitame VM seadistamise
- NB! Kindlasti laadige alla ja salvestage SSH-võtmefaili. See on vajalik VM-iga ühenduse loomiseks.
- Pärast VM käivitamist avage VM-i ressursi leht ja kopeerige VM-i IP-aadress.
Visuaalsed näited kuidas valida VM tüüp:
- Valige
See all sizes
:
- Seejärel valige D-Series v3 alt DS1_v2 tüübi ja siis legekülje all klikkige nupul
Select
:
Ülesanne 6.4: Virtuaalmasinasse ühendamine Üle SSH.
Kasutame Virtuaalmasinasse üle interneti sisselogimiseks Secure Shell'i (SSH) protokolli. Pilves olevatel virtuaalmasinatel võib olla mitu IP-aadressi. 'Avalik IP on juurdepääsuks väljastpoolt pilve ja Privaatne IP on juurdepääsuks pilve seest (teistest virtuaalmasinatest).
Logige VM'i sisse ssh kaudu, kasutades SSH-võtmepõhist autentimist
- Linuksis:
ssh -i path_to_my_key_pair_file azureuser@<instance public ip address>
- Näiteks:
ssh -i .cloud/jakovits_key.pem azureuser@13.81.112.239
- kui saate veateate, kontrollige, kas tee võtmefailini on korrektne ja sellel on õiged õigused (
chmod 400 <failinimi>
)
- Windows'is:
- Kui
CMD
käsureal on olemas käsurea ssh käsk, siis kasutage täpselt sama lähenemist, kui Linuksis!ssh -i path_to_my_key_pair_file azureuser@<instance public ip address>
- Näiteks:
ssh -i .cloud/jakovits_key.pem azureuser@13.81.112.239
- Näiteks:
- Kui saate veateate et faili õigustega on probleem, siis
- Windowsis: muutke võtmefaili turbeõigusi (File -> Properties -> Security ) ja eemaldage üldiste kasutajate õigused, jättes oma Windowsi kasutaja ja administraatori kasutajaõigused paika.
- Enne failiõiguste muutmist peate võib-olla keelama ka faili/objekti õiguste pärimise.
- Kui ssh-käsk ei tööta, saate Windowsis lubada OpenSSH-kliendirakenduse.
- Operatsioonisüsteemis Windows 11: avage "Settings" > "Apps" > "Optional Features" ja kontrollige, kas OpenSSH-klient on installitud – vajadusel installige see valiku "Add optional feature" kaudu.
- Alternatiiv, Kui teie arvutis on installeeritud Windows Git, ja Git BASH (https://gitforwindows.org/) käsurida, siis saate samuti kasutada täpselt sama lähenemist, kui Linuksis!
- Muudel juhtutel: Kasutage Putty, WinSCP, SSH secure shell, või mõnda muud SSH programmi, et saada käsurea liides virtuaalmasinasse ssh-i kaudu üle interneti.
- Kui
- PuTTy Kaudu:
- Kui kasutate
Putty
Windowsis, peame esmalt muutma alla laetud privaatvõtme faili (_keyname_.pem) ümber.ppk
failiks.- PEM ehk Privacy Enhanced Mail on Base64 kodeeringuga DER-sertifikaat. PEM-sertifikaate kasutatakse sageli serverites, kuna neid saab lihtsa tekstiredaktoriga hõlpsasti loetavateks andmeteks tõlkida.
- Saate kasutada PuTTYgen, et teisendada sertifikaat Putty spetsiifilisse
*.ppk
vormingusse. Kasutage selleks programmis PuttyGen funktsiooneLoad
jaSave private key
.- Saate jälgida õpetust: Convert your private key using PuTTYgen .pem võtmefaili .ppk failiks teisendamiseks.
- Pärast võtme teisendamist saate kasutada Putty't oma võtmega uue SSH-ühenduse loomiseks
- SSH-ühenduse kasutajanimi peab olema
azureuser
- Määrake see Putty's
Connection->Data-> Login details
all
- Määrake see Putty's
- Host väärtus peab olema käivitatud virtuaalmasina avalik IP
- SSH-võti peab olema sama
.ppk
-võti, mille teisendasite rakendusega PuttyKeyGen - Määrake võtme asukoht seadetes asukohas:
Connection->SSH->Auth->Privaatvõtme fail...
- SSH-ühenduse kasutajanimi peab olema
- Kui kasutate
Ülesanne 6.5: Flask rakenduse üles seadmine Virtuaalmasinas
Selles ülesandes liigutame virtuaalmasinasse oma Neljandas praktikumis loodud Flask REST API rakenduse ning käivitame selle seal veebiteenusena.
- Failide liigutamine virtuaalmasinasse.
- Pakkige oma neljanda praktikumi REST API python'i projekti kaust kokku zip failiks.
- Linuxis või windowsis (kui cmd või Git BASH käsureal on scp käsk)
scp -i path_to_my_key_pair_file path/to/local/file azureuser@<instance_public_ip_address>:path/to/remote/file
- Näide:
scp -i .cloud/jakovits_key.pem python_projekt.zip azureuser@13.81.112.239:python_projekt.zip
- NB! scp käsus peab IP aadressi järel peab olema koolon ":" ja faili tee (path) serveris.
- Näide:
- Windowsis peaks ka scp käsk töötama käsureat või Powershellist. Aga alternatiiv oleks kaWinSCP programmi kasutamine
- Või näiteks installeerige Git for Windows, millega tuleb kaasa Git BASH käsurida (https://gitforwindows.org/), kuna selle abil on migav mitmeid linuksi käsurea käske windowsis kasutada.
- Logige ssh kaudu uuesti sisse virtuaalmasinasse
- Uuendage linuksi paketihalduri info:
sudo apt update
- installeerige virtuaalmasinas unzip programm zip faili lahti pakkimiseks
sudo apt install unzip
- pakkige fail lahti:
unzip failinimi.zip
- Installeerimine Python teekide halduri pip:
sudo apt install python3-pip
- Instaleerime vajalikud paketid:
sudo pip3 install flask
- teeme seda siin root kasutaja õigustes, kuna hiljem on vaja jooksutada flask rakendust root kasutaja all, muidu ei saa protsessi panna kuulama porti 80.
- Muudame oma Python programmi, et see pandaks läima pordi 80 peal:
- Asendage rida
app.run(debug=True)
reaga:app.run(host='0.0.0.0', port=80)
- Selle tulemusena pannakse nüüd Flask veebiserver tööle pordi 80 peal, ning kuulama kõiki võrguliideseid.
- Asendage rida
- Paneme rakenduse tööle:
sudo python3 python_skripti_nimi.py
- Kui vajalik, installeeriga ka vajalikud python teegid.
- Tehke ekraanipilt käsurea väljundist, milles oleks näha, et õnnestus Pythoni programm käivitada
- Ekraanivaatel peaks olema näha käivitatud käsk ning selle väljund
Testige, et teie REST api töötab:
- Avage oma rakenduse aadtess: http://TEIE_AZURE_VM_PUBLIC_IP/raamatud
- Saatke POST päring uue raamatu allatõmbamiseks, ning kontrollige, et see töötab ning raamat lisatakse API poolt hallatavate raamatute nimekirja.
- Tehke veel üks ekraanipilt üles seatud veebirakendusest (/raamatud), nii, et oleks näha ka brauseri aadress koos IP'ga
- Samuti peaks seal olema näha, et API haldab raamatuid (ei ole tühi list)
NB! See on lihtsustatud näide. Pärismaailmas Flask programme tavaliselt ei jooksutata otse ja sudo (root kasutaja) õigustes. Tavaliselt pannakse vahepeale vähemalt üks lihtne HTTP server, näiteks NGINX, või gunicorn. Sudo kasutamise vältimiseks saab kasutada authbind
programmi, et anda tava kasutaja programmidele õigused mingit provileegitud porti (siin on selleks 80) kasutada. Lisaks peaks päriselus rakenduse tööle panema püsivalt, nii, et ka VM'ile restardi tegemise järel programm hakkaks uuesti tööle.
Lahenduse esitamine
Praktikumi lahendusena tuleb esitada:
- Ekraanivaated ülesannetest 6.2 ja 6.5 (kokku kolm ekraanivaadet)
- Vastus küsimusele: Kui kaua kulus Azure'il teie rakenduse kuvatava sisu värskendamiseks?
- Link Azure staatilise veebilehele (kommentaarina), mille seadsime üles ülesandes 6.1 ja 6.2.
- Failid tuleks kokku pakkida üheks suuremaks zip failiks enne üles laadimist.
- NB! Ärge unustage pärast lahenduse lõpetamist Azure'i VM kustutada või seisma panna! Vastasel juhul kulutab see teie krediiti edasi.
Võimalikud probleemid ja nende potentiaalsed lahendused.
- Veateade
WARNING: UNPROTECTED PRIVATE KEY FILE!
- SSH võtmefailil ei tohi olla õigusi kolmandatele kasutajatele. Tuleb failiõigused "madalamaks" seadistada.
- Linuksis saab seda teha näiteks nii:
chmod 400 <failinimi>