A labor során .NET Core alapú, adatbázist használó webalkalmazásokat kell Azure-ba telepíteni Azure SQL, illetve Azure App Service szolgáltatásokra építve.
A mérés Windows és Linux rendszeren is teljesíthető. A méréshez böngészőn kívül nem szükséges semmilyen egyéb eszköz.
A mérés hallgatói Azure előfizetéssel teljesítendő, itt aktiváld.
Bővebb leírás a Felhő alapú szoftverfejlesztés tárgy honlapjáról
Azure for Students - ez az újabb program, 100$ kredittel egy évre (de évente megújítható). Bankkártya regisztráció nem szükséges. Ezt próbáljtátok meg aktiválni! Edu.bme.hu-s fiókot érdemes használni az aktivációhoz. Fontos, hogy 10-11 hónap után indul egy megújítási időablak és ha abban nem újítjátok meg, akkor ki kell várni míg egy több hónapos inaktív időszak után teljesen törődik az előfizetés és utána tudtok (ugyanazzal az email címmel) egy teljesen új előfizetést igényelni.
- Azure SQL Server
- Azure App Service
Végzed el a következő hivatalos Microsoft oktatóanyagot: magyarul (gépi fordítású) vagy angolul. Az angol az ajánlott, mivel az az eredeti, a magyar gépi fordítás sem rossz, követhető, de néhány helyen rosszul ragoz vagy furán fogalmaz. Mielőtt nekiállnál, mindenképp olvasd el az eltérések részt, a tippeket és a beadandók leírását is!
A feladat hasonló a Háttéralkalmazások tárgy Azure-os gyakorlatához, de jóval komolyabb, komplexebb annál.
A jelentősebb eltérések:
- Minden létrejövő erőforrás alapból csak egymást éri el (privát elérés), így mi sem tudunk az internet felől csatlakozni ezekhez vagy belépni ezekbe (kivéve Azure portál meghatározott funkcióin keresztül). Ez egy biztonsági ökölszabály (secure-by-default), így ne kapcsold be az internet felőli elérés(eke)t. A privát elérés alapja egy virtuális hálózat. Ebbe a hálózatba kerülnek be az Azure erőforrásaink. Platformszolgáltatásaink lesznek, ezek esetén az ajánlott integrációs módszer a privát hálózati végpontok alkalmazása. Kifelé a virtuális hálózat zárt, a publikus DNS névfeloldás sem működik, ezért jön létre privát DNS, így továbbra is hálózati névvel tudunk hivatkozni az egyes szolgáltatásokra, pl. adatbázis szerver.
- Az alkalmazás Azure Redis Cache-t használ gyorsítótárként
- Az Azure Web App felől az Azure SQL adatbázis, valamint a Redis cache felé Service Connector reprezentálja a kapcsolatot.
- Az összes előbb említett erőforrást egy füst alatt a Web app + Database varázslóval/sablonnal hozzuk létre.
- Az adatbázis séma inicializáláshoz egy futtatható állományt (EF Core migration bundle) hozunk létre, amit az alkalmazás egyéb fájljaival együtt publikálunk és így azokkal együtt fel is kerül a futtatókörnyezetbe. A futtatható fájlt külön kell futtatnunk a Web App futtatókörnyezetébe belépve. Ez nem egy szép megoldás, de mivel az adatbázist csak a többi erőforrásból érjük el, nincs túl sok választásunk.
💡 Az Azure portálra történő első belépéskor érdemes beállítani a portál nyelvét. Ajánlott, hogy a nyelv egyezzen meg az oktatóanyag nyelvével, míg a formátum mindig legyen magyar. Jelen leírásban a portál angol nyelvű menüpontjaira hivatkozunk.
💡 ha az Azure-ban futó webalkalmazással gond van, érdemes előrevenni a diagnosztikai naplók lekérdezéséről szóló részt. A diagnosztikai naplókat már az App Service létrehozása után be lehet kapcsolni.
💡 Régióként ajánlott a nyugat- vagy észak-európait használni (West Europe, North Europe). Az elején válaszd ki az egyiket és azt használd végig.
💡 Azure erőforrások létrehozásakor az űrlap utolsó oldalának alján ne felejtsük el a Create
gombot megnyomni, különben nem indul el a létrehozási folyamat!
💡 Érdemes folyamatosan ellenőrizni, hogy van-e olyan bedandó képernyőkép, amit épp el tudsz készíteni.
💡 Az SSH terminált érdemes egy külön böngészőfülön megnyitni. Ezen a fülön ne navigálj el a terminál oldaláról.
💡 Éles környezetben általában a connection string-ben olyan felhasználót adunk meg, akinek nincs is joga a migrációs műveletek elvégzésére. Ilyenkor viszont külön a migrációt egy erőteljesebb jogú felhasználót tartalmazó connection string-gel kellene futtatni.
- Az első lépés előtt említett klónozást nem kell elvégezni, nincs rá szükség.
- Kezdheted a 2-es lépéssel és utána csinálhatod az 1-est nyugodtan, mivel egymástól függetlenek. A 2-es lépés végén több perces várakozásra is szükség lehet, így az alatt lesz időd megcsinálni az 1-est.
- Az 2.1 lépés előtt értelmes elvégezni a Microsoft.Sql resource provider regisztrációját. Minden Azure műveletet valamelyik ARM resource provider hajtja végre. A legtöbb szükséges resource provider eleve be van kapcsolva vagy a varázsló be tudja kapcsolni, amikor szükséges. Az Azure SQL (Microsoft.Sql azonosítójú) provider alapból általában nincs bekapcsolva (regisztrálva) és az első lépés varázslója hibát adhat (SQLAzure is not available for your selection of subscription and location). Segédlet egy resource provider regisztrálásához.
- Az 2.2 lépésben az app nevében (Name) az XYZ rész a neptun kódod legyen. A logikai SQL Server neve (Server name), az adatbázis neve (Database name), a cache neve (Cache name) szintén az 123 rész helyett a neptun kódod legyen.
- A 2.2.5-es allépésben lehet, hogy nem az SQLAzure van kiválasztva, ilyenkor válasszuk ki mi.
- 4.4-4.5: co-pilot nélkül teszteltük, saját felelősségre kipróbálhatod vele is
- A 4.5-ös lépésben a YAML fájlt nagyon nagy körültekintéssel szerkesszük. Egyetlen hiányzó vagy extra szóköz is hibás YAML fájlt eredményezhet!
- A 7.1.2-es allépést követően is mentsünk (Save) a felső sávban lévő gombbal.
- A 7.2-es lépésben a napló nézetben az üzenetek több (2,3,5!) perces késéssel jelennek meg, különösen a bekapcsolást követően. A lefuttatott SQL parancsoknak meg kellene jelenni (ha nem gyorsítótár szolgálja ki a kérést) idővel.
- A 8. lépést (erőforrások törlése) majd csak akkor hajtsd végre, ha a lentebbi feladatot is megoldottad és mindent begyűjtöttél a beadandókhoz.
Az első feladatban megismert módszerekkel telepítsd az ASP.NET Core Razor Pages mérésen készített MovieCatalog.Web projektedet Azure-ba. A feladathoz tartozó erőforrások egy új erőforráscsoportba (resource group) kerüljenek.
Ehhez a feladathoz már nincs részletes leírás, csak néhány extra tippet adunk:
💡 Ne kövesd szolgaian az első feladat elnevezéseit, mert névütközések lesznek. Találj ki saját neveket, de ahol kell, ott legyen benne a neptun kódod
💡 A Runtime stack-et a MovieCatalog projekt .NET verziójához igazítsd (megtalálod a projekt fájlban)
💡 Redis Cache-t nem kell létrehozni
💡 EF Migration bundle-t nem kell csinálni, az ehhez szükséges EF eszközt sem kell feltenni a GitHub Actions YAML-ben.
💡 Az adatbázis feltöltéséhez használd a mellékelt Azure SQL-lel kompatibilis DACPAC csomagot. Ehhez:
- töltsd fel a csomagot a projekted repojába, például a projekt fájl mellé.
- módosítsd a GitHub Actions YAML fájlt (.github alkönyvtárban), hogy a kimeneti könyvtárba másolja a csomagot. A másolásra egy módja az alábbi lépés beszúrása a feltöltési lépés elé. Ellenőrizd, hogy az elérési út megfelelő-e: a repo gyökeréhez képest kell az elérési útvonalat megadni.
- name: Copy dacpac run: | cp MovieCatalog.Web/ imdbtitles_sample_azure.dacpac ${{env. DOTNET_ROOT}}/myapp
- az App Service-be SSH-zva ellenőrizd, hogy a git push után induló telepítési folyamat feltöltötte-e a
/home/site/wwwroot
mappába a DACPAC csomagot. - DACPAC csomagot parancssorból az sqlpackage eszközzel telepíthetünk. Ehhez azonban le kell tölteni (
wget
) az eszközt csomagolva, kicsomagolni (unzip
), futtathatóvá tenni (chmod
) majd futtatni (sqlpackage
). A parancsnak szüksége van a connection string-re, ami környezeti változóként rendelkezésre áll. Mindezen műveletekre egy példát ad a mellékelt parancsfájl. A legtöbb esetben elég csak a fájl tartalmát lefuttatni az SSH terminálon.
Végeztél a feladatokkal.
Beadandó egy összecsomagolt állomány, melyben képernyőképek vannak jpg vagy png formátumban.
Képernyőképekkel kapcsolatos elvárások:
- a böngészőablak teljes méretű (maximalizált) legyen
- látszódjon a címsor és a weboldal megjelenő része
- Azure portálnál látszódjon a jobb felső sarokban az Azure portálra belépett felhasználó a jobb felső sarokban
SSH terminálparancsok kimenetéről készült képernyőképeknél:
- ha a parancs kimenete olyan hosszú, hogy nem férne rá egy képernyőre, akkor görgessetek föl, hogy a parancs a képernyő tetején legyen és így csináljátok a képernyőképet. (Ha így sem fér rá, nem baj, ilyenkor már nem kell a teljes kimenetnek látszani)
- bár elsődleges a kimenet, látszódjon a futtatott parancs és alatta a kimenet is
A maximális feltöltési méret 15 MB. Ha a túl nagy képek miatt a feltöltendő tömörített fájl ennél nagyobb lenne, át lehet méretezni (nem levágni!) a képeket, de a szövegeknek olvashatónak kell maradni.
Kép tartalma | Típus | Fájlnév (kiterjesztés nélkül) |
---|---|---|
Azure portál főoldal, belépés után | Böngésző | f1_azlogin |
Az új App Service áttekintő oldala (Overview) | Böngésző | f1_app |
Az új adatbázis áttekintő oldala (Overview) | Böngésző | f1_sqldb |
EF Migration bundle futtatása | SSH terminál | f1_efmigr |
Az App Service-en belül a Service Connector aloldalon minden kapcsolat le van validálva | Böngésző | f1_svcconn |
☁️ Az App Service Log stream oldala egy elem módosítása után | Böngésző | f1_log |
💡 Service Connector-ok validálása az App Service Service Connector lapján: jelölj ki minden kapcsolatot és felül nyomd meg a Validate gombot. Várd meg, amíg az ellenőrzés lefut.
A lekérdezett naplóüzenetek tartalmával kapcsolatban nincs elvárás, nem kell pl. a létrehozás kérésnek látszania.
Kép tartalma | Fájlnév (kiterjesztés nélkül) |
---|---|
első indítás után | f1_v1 |
☁️ új elem/teendő felvétele után. Az új elem/teendő leírása a neptun kódod legyen | f1_v2 |
☁️: az így jelölt képek nem szükségesek az elégséges szint eléréséhez. Összesen 5+1 kép kell az elégégeshez.
Kép tartalma | Típus | Fájlnév (kiterjesztés nélkül) |
---|---|---|
Az új App Service áttekintő oldala (Overview) | Böngésző | f2_app |
Az új adatbázis áttekintő oldala (Overview) | Böngésző | f2_sqldb |
sqlpackage futtatása | SSH terminál | f2_dbmigr |
☁️ Az App Service-en belül a Service Connector aloldalon minden kapcsolat le van validálva | Böngésző | f2_svcconn |
Kép tartalma | Fájlnév (kiterjesztés nélkül) |
---|---|
első indítás után | f2_v1 |
☁️: az így jelölt képek nem szükségesek a jeles szint eléréséhez.
- ha nem csak jelölt (:cloud:) képek hiányoznak az első feladatból :arrow_right: 1
- ha csak jelölt (:cloud:) kép hiányzik az első feladatból:arrow_right: 2
- ha minden elkészül az első feladatból ➡️ 3
- ha csak jelölt (:cloud:) kép hiányzik a második feladatból:arrow_right: 4
- ha minden elkészül az első és a második feladatból is ➡️ 5