---
# System prepended metadata

title: Pilvipalveluiden perusteet oppimispäiväkirja

---

                                                            Atte Mönkkönen
# Pilvipalveluiden perusteet oppimispäiväkirja


### 09.01.2024 Ensimmäinen tunti:
---------------------------------
Tunnilla käytiin läpi arviointiperusteita, luotiin oppimispiiri, käytiin läpi kurssia ja pilvipalveluiden perusteita. Lisäksi otettiin käyttöön Azure for Students tilaus.

Opin hieman pilvipalveluiden historiasta ja siitä miten ne ovat kehittyneet ajanmyötä. Opin myös eri palvelumallit pilvessä:

***Iaas** (Infrastructure as a Service)
***PaaS** (Platform as a Service)
***SaaS** (Software as a Service)

![iaaspaassaas](https://hackmd.io/_uploads/rk7M3c8Ya.jpg)

On-prem. tai on-premises tarkoittaa, että palvelimet ovat yrityksen omissa tiloissa.

Ymmärsin myös yksityisen, julkisen, hybridi ja monipilven erot ja pohdiskelin hieman, missä niitä voisi hyödyntää. Esimerkiksi yksityistä pilveä hyödynnetään Puolustusvoimissa, koska yksityisessä pilvessä on täydellinen omien tietojen ja sovellusten hallinta. 

Tunnilla tarkasteltiin myös kustannusmalleja, joita ovat CapEx ja OpEx.
Näistä malleista halvempi on OpEx, koska siinä maksu menee käytön mukaan, eikä siihen tarvitse pääomaa.


### 15.01.2024 Toinen tunti:
----------------------------
Tällä tunnilla tarkasteltiin käsitteitä datacenter, region ja geography. Lisäksi opeteltiin luomaan hallittava resurssi Azureen. 

**Datacenter** on fyysinen rakennus, joita on ympäri maailmaa ja niissä on tietokoneita.

**Region** koostuu useista Datacentereistä ja se on alue esimerkiksi North Europe. On hyvä myös huomioida, että kaikki palvelut eivät välttämättä ole saatavilla jokaisessa Regionissa. Azurella on yhteensä 60+ regionia saatavilla.

**Geography** on laaja alue esimerkiksi Japani ja se koostuu useasta Regionista. Japanissa on Japan East ja Japan West regionit.

Azuressa resource groupin tekeminen oli mielestäni aika helppoa ja ymmärsin sen ominaisuuksia ja käyttöoikeuksia. 

**Resource groupia tehdessä piti valita oikea subscription ja region.**
![rgroup1](https://hackmd.io/_uploads/ry2bMjLFT.jpg)

**Luodun resource groupin työkaluvalikosta pystyi muokkaamaan esimerkiksi käyttöoikeuksia.**
![rgroup2](https://hackmd.io/_uploads/ryC0fsIKT.jpg)

**Harjoiteltiin lisäämään reader rooli ja se kävi kätevästi Access controllin kautta.**
![rgroup3](https://hackmd.io/_uploads/SkSwQs8Fa.jpg)

**Lopuksi poistettiin luotu resource group ja se tapahtui työkaluvalikon Overview valikosta.**
![rgroup4](https://hackmd.io/_uploads/rkFKNj8Fa.jpg)

Tunnilla käydyt asiat olivat minulle mielenkiintoisia ja helposti opittvaissa.


### 22.01.2024 Kolmas tunti:
----------------------------
Tällä tunnilla arvottiin oppimispiirien kesken aiheet pienelle 1-2 sivun pituiselle esitykselle. Minun oppimispiiri sai aiheeksi Yandex Cloudin. 
En ollut aikaisemmin kuullut koko Yandexista, mutta nyt lähdetään porukassa selvittämään. 

Loppu tunti käytettiin melkein kokonaan virtuaalikoneen luontiin. 
Olen jollain aiemmalla kurssilla käyttänyt virtuaalikonetta, joten tämä oli jotenkin tuttu käsite. 

Koneen luonti Azuressa oli ohjeiden avulla melko yksinkertaista. 
Aluksi piti kirjoittaa hakupalkkiin "Virtual machines" ja sieltä sitten Create. 

**Sitten virtuaalikoneelle piti tehdä:** 
![vm1](https://hackmd.io/_uploads/HkEpM0m5p.jpg)
![vm2](https://hackmd.io/_uploads/rkK0G07qp.jpg)

Resource groupin nimessä ei ole pakko olla -rg päätettä. 
Regionin valinnassa pitää miettiä missä itse sijaitsee.
Olisi ollut mahdollista tehdä Windows 10 virtuaalikone.
Availability Zone on erillinen datakeskus, jossa on oma virtuaalinen virtalähde, jäähdytys ja verkkoinfrastruktuuri. Sen arvoa voi muuttaa.

**Näiden valintojen jälkeen tarkastetaan ne oikeiksi**
![vm3](https://hackmd.io/_uploads/rkbGNCXca.jpg)
![vm4](https://hackmd.io/_uploads/H1Em40X5p.jpg)

**Nytkun virtuaalikone on luotu, niin piti ladata RDP tiedosto, jonka kautta koneeseen pääsi kirjautumaan.**
![vm5](https://hackmd.io/_uploads/HJuuNRm9a.jpg)

**Kokeilin luoda virtuaalikoneeseen kansion ja kopioida sinne jonkun oman tiedoston.**
![vm6](https://hackmd.io/_uploads/rJTcNRXcp.jpg)

Yritimme myös oppimispiirin kanssa kirjautua samaan aikaan yhdelle virtuaalikoneelle, joka ei onnistunut, mutta yksikerrallaan muidenkin virtuaalikoneita pystyi käyttämään. Virtuaalikone myös tallensi muiden muutokset koneella.

### 30.01.2024 Neljäs tunti:
----------------------------
Tällä tunnilla tehtiin harjoituksia liittyen Azuren app serviceen, storage accounttiin ja static websiteen. 
Aluksi varmistin, että Visual Studio tilini on liitetty Azureen.

***App service***

**Sitten tein ASP.NET WebApi projektin ja julkaisin App Servicen.**
![as1](https://hackmd.io/_uploads/BybFK5kjT.jpg)

**Azuressa Default domainin tieto oli sama kuin VS Open site linkkissä**
![as2](https://hackmd.io/_uploads/S11X9qJip.jpg)

**Lisäsin osoitteen perään /Weatherforecast ja Swagger-generoi oletusarvoisesti JSON-muotoisen OpenAPI-dokumentaation kuvaamaan RESTful API:n rajapintaa.**
![as3](https://hackmd.io/_uploads/Bk1Y99yia.jpg)

Sitten kokeilin avata "https://mytestwebapiapp20240206131452.azurewebsites.net/swagger/index.html"
Tämä ei kuitenkaan vielä toiminut, koska Swagger-käyttöliittymä oli aktivoitu vain kehitysympäristössä.

**Muokkasin Program.cs tällä tavalla:** 

// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
//{
    app.UseSwagger();
    app.UseSwaggerUI();
//}

Ja nyt tämä linkki "https://mytestwebapiapp20240206131452.azurewebsites.net/swagger/index.html" toimii, koska kommentoin pois if (app.Environment.IsDevelopment()) -lohkon, joten Swagger käynnistetään nyt riippumatta ympäristöstä.

Minun ei tarvitse tehdä Publish asetuksia uudelleen joka kerta vaan minulla voi olla useampia Publish profiileja.

Resurssit ja niiden roolit:

- App Service:
Tarjoaa helpon tavan isännöidä ja hallita verkkosovelluksia. 

- App Service Plan:
Määrittää kuinka paljon suorituskykyä ja resursseja sovellukselle varataan.

- API Management service:
Mahdollistaa API-rajapintojen hallinnan ja käytön valvonnan.

Ei ole välttämätöntä, että kaikilla API-rajapinnoilla on aina kaikki kolme resurssia.

***Storage account***

**Aluksi tein Azuressa uuden storage accountin.**
![sa1](https://hackmd.io/_uploads/rJtZ92Jj6.jpg)

Storage accountin nimen pitää olla yksilöllinen, koska se toimii globaalisti kaikkialla Azure-palvelussa ja se auttaa välttämään nimiin liittyviä konflikteja.

LRS tarkoittaa, että tiedot replikoidaan yhteen Azure-datakeskukseen.
Muut vaihtoehdot ovat: ZRS (Zone-Redundant Storage), GRS (Geo-Redundant Storage) ja RA-GRS (Read-Access Geo-Redundant Storage).

ZRS: Tiedot replikoidaan useisiin datakeskuksiin samassa Azure-alueessa.
GRS: Tiedot replikoidaan toiseen Azure-alueeseen.
RA-GRS: Sama kuin GRS, mutta mahdollistaa myös tiedon lukemisen toisesta alueesta.

Loin tälle storage accountille Blob containerin ja latasin siihen txt tiedoston. Containeriin voisi ladata muitakin tiedostoja kuin txt muotoisia. 

**Blob containerilla on oma URL osoite ja sen sisällön voi ladata omalle koneelle selaimen avulla.**
![sa2](https://hackmd.io/_uploads/H1CZkT1j6.jpg)

Tein Blob service Client-sovelluksen
![sa3](https://hackmd.io/_uploads/r1RbxpJj6.jpg)

ConnectionString on arkaluonteista tietoa ja se olisi hyvä pitää salassa.
C# ei ole ainut kieli millä voi käsitellä Blob Storagea.
Tätä palvelua voisi käyttää vaikka tiedostojen tallentamiseen / jakamiseen ja vaikka varmuuskopiointiin.


### 09.02.2024 Viides tunti:
----------------------------

Tällä tunnilla tehtiin Azureen Cosmos DB tili ja kokeiltiin Face API:a. Tiliä tehdessä tuli myös miettiä mitä tarkoittaa Geo-Redundancy ja Multi-region Writes.

Geo-Redundancy tarkoittaa tietokannan replikointia useille maantieteellisesti hajautetuille alueille.

Multi-region Writes tarkoittaa mahdollisuutta suorittaa kirjoituksia useista maantieteellisistä sijainneista.

Sain luotua tilin ja sitten loin tietokannan "mydatabase". 
Tietokantaan tuli lisätä pizzoja ja sen jälkeen kokeilla eri kyselyitä.

**Pizzojen lisäys onnistui ja kyselyt toimivat.**
![cb1](https://hackmd.io/_uploads/B1EaKIPiT.jpg)

**Tein CosmosDBClient konsolisovlluksen.**
![cb2](https://hackmd.io/_uploads/H1FdpLPop.jpg)

Koodi saa tiedot minun tietokannastani, koska tietokantayhteyden luontiin  on käytetty parametreina Cosmos DB tilini Endpointia ja Account Keytä.

Koska tässä koodissa käytetään suoraan Cosmos DB tilin Endpointia ja Account Keytä, kuka tahansa, joka näkee koodin tai pystyy käyttämään sitä, voi käyttää näitä tietoja ja tehdä kyselyitä tietokantaan.

### **Lopuksi piti pohtia:**
**Voiko Client sovellus olla siis jokin muu kuin C# sovellus?
Etsi tietoa voiko Cosmos DB käsitellä pelkkien REST kutsujen avulla?**

Client sovelluksen olisi voinut tehdä muillakin kielillä, kuin C#:lla. 

Cosmos DB:llä on myös omat ohjelmointikirjastonsa ja SDK:nsä, joten REST kutsut ei ole ainoa tapa käsitellä sitä.

## Face API

**Loin uuden Face API:N ja sen laskutustaso on ilmainen**
![fa1](https://hackmd.io/_uploads/SJihAyYjT.jpg)
Palvelun käyttö on maksutonta tietyn rajoitetun määrän.

Pricing tier tasoja on ainakin kahta erilaista. 

**F0 Free:**
20 kutsua minuutissa, 30 000 kutsua kuukaudessa.

**S0 Standard:**
10 kutsua sekunnissa
Hinnat: $0.40 USD/1000 kutsua (hinnat voi vaihdella).

Jos haluan tietää paljonko palvelu on minulle maksanut voin tarkastaa sen "Cost analysis" kohdasta.

Sain tehtyä Client sovelluksen. AI löysi kuvasta kasvojen paikan (FaceRectangle). Palvelu toimii myös useammilla kasvoilla.

Kasvojentunnistuspalvelua voi käyttää monilla eri ohjelmointikielillä ja Azuressa on kohta "Monitoring", josta voi seurata, että palvelut toimivat tehokkaasti.

### Tästä linkistä (https://azure.microsoft.com/en-us/blog/responsible-ai-investments-and-safeguards-for-facial-recognition/) piti tutkia miksi Face API teknologiasta on poistettu mahdollisuus tunnistaa mm. käyttäjän sukupuolta, ikää ja tunnetilaa koskevat analyysit.  

Face API:sta on poistettu mahdollisuus tunnistaa käyttäjän sukupuolta, ikää ja tunnetilaa vastuullisuusnäkökohtien vuoksi, kun teknologian rajoitukset, yksityisyyden suoja ja mahdolliset syrjinnän riskit otettiin huomioon.

OCR kyllä pystyy lukemaan käsinkirjoitettua tekstiä. En saanut koodia jostain syystä toimimaan niin en voinut nähdä tulosta.


### 12.02.2024 Kuudes tunti:
----------------------------

## Azure Function App

Sain tehtyä Function Apin ja sille Serveless funktionin.

**Sitten piti silmäillä demo koodi läpi ja lopulta muokata se sanomaan "Terve, OmaNimi, tänään on hyvä päivä koodata".**
![es1](https://hackmd.io/_uploads/Hk4AAK4np.jpg)

**Tämän jälkeen piti kokeilla toimiiko työkaluvalikon "Get function URL" osoite, joka toimi.**
![es2](https://hackmd.io/_uploads/BykXJ54ha.jpg)

**Sitten osoitteeseen piti lisätä vielä nimi parametri, jolloin se antoi muokkaamani tekstin.**
![es3](https://hackmd.io/_uploads/HksLy9V3a.jpg)

**Pohdintoja:**

Timer trigger eroaa HTTP-triggeristä siinä, miten se käynnistyy. HTTP-trigger käynnistyy, kun sille tehdään HTTP-pyyntö (GET tai POST). Timer trigger taas käynnistyy automaattisesti määritellyn aikataulun perusteella, eikä sille liity suoraan HTTP-pyyntöjä.

Tunnistetiedot lisätään URL osoitteen perään. Jos jakaisin tämän URL osoitteen toiselle oppimispiiriläiselle, niin hän pystyisi käyttämään tätä palvelua.

Tarkastelin Integration välilehteä ja huomasin, että funktiokutsun seurauksen voi palauttaa useita eri asioita, kuten esimerkiksi Blob Storagen tai Cosmos DB tietokannan. 

Monitor välilehdeltä löytyi kutsujen ja palveluiden toiminnan reaaliaikainen seuranta. Tätä seurantaa voisi hyödyntää suorituskyvyn optimointiin, virheenhallintaan ja vianmääritykseen.

"serverless" Termi tulee ajatuksesta, että kehittäjän ei tarvitse huolehtia perinteisten palvelimien hallinnasta tai ylläpidosta. Äsken luomani metodi on "serveless", koska en ole vastuussa palvelininfrastruktuurin hallinnasta.


### 19.02.2024 Seitsemäs tunti:
-------------------------------

## Azure Key Vault

Sain tehtyä Azure Key Vaultin. Piti pohtia miksi ohjeessa Key vault nimen perässä on -rg. Azure ei vaadi, että Key vaultin nimiin liittyy tiettyä kaavaa, joten on ihan oma päätös miksi sen nimeää. 

Yritin sitten luoda uutta salaisuutta, mutta se ei onnistunut, koska minulla ei ollut käyttöoikeutta. 

Menin muuttamaan "Key Vault Administrator" rooliin itseni, jonka jälkeen sain lisättyä salaisuuden.

**Tallennettua salaisuutta ei voi muokata, mutta voi aina tehdä uuden salaisuuden. **
![kv1](https://hackmd.io/_uploads/SyCoqqNnT.jpg)

Salaisuudelle voi määrittää voimassaoloajan, jonka jälkeen salaisuus ei ole enää saatavilla tai jolloin salaisuus tulee aktiiviseksi.

**Tutkin vielä Keys ja Certificates valintoja:**

Keys:

Voit generoida uusia avaimia tai tuoda olemassa olevia avaimia.
Voit myös tuoda takaisin poistettuja avaimia.

Certificates:

Voit tallentaa ja hallita sertifikaatteja.
Voit tuoda olemassa olevia sertifikaatteja.


**Key Valut Client sovellus**

Sain tehtyä client sovelluksen, joka ei aluksi toiminut, mutta kun tarkastin tilin jolla kirjaudutaan niin siellä piti uudelleen kirjautua minun käyttäjälleni. 
Uudelleen kirjauduttuani koodi toimi vaikka siinä kesti hetki ennenkuin se haki salaisuuteni.
![kv2](https://hackmd.io/_uploads/B1k8koN3p.jpg)

Jos annan uri tiedon oppimispiiriläiselle, niin hän ei pelkästään sillä pääse lukemaan salaisuuttani. Minun pitäisi määritellä hänelle pääsyoikeudet pääsynhallinnassa.
Azure Key vault tarvitsee aina käyttäjätunnistuksen.

## Azure Entra login

Sain sovelluksen pyörimään ja kun kirjoitin sinne client ja tenant id:n ei se pyytänyt minua kirjautumaan Azureen. 

Kirjautuneesta käyttäjästä sovellus saa käyttöönsä:
**Etu ja sukunimen, jobTitlen eli että olen opiskelija, koulun sijainnin ja sähköpostin.**

**Tunniste vanhenee: 23.2.2024 14.07.13 +02:00**

Sovellukselle pitää antaa client ja tenant tiedot koska niitä käytetään varmistamaan sovelluksen ja Azure palvelun turvallinen ja oikea yhteys.
Nuo molemmat tiedot on hyvä säilyttää salaisina. 

Voinko käyttää tunnistautumiseen mitä vain Microsoft tunnustani?: **Kyllä**

Voinko saamani bearer tunnisteen avulla tunnistautua muihin Azuren palveluihin?: **Jos oikeudet on määritetty muihin palveluihin, niin kyllä.**

Mitä hyötyä on tehdä tällä tavalla käyttäjän tunnistus ulkopuolista identiteetin
tarjoajaa vasten?:

**Ulkoisen identiteetin tarjoajan käyttö mahdollistaa kätevän ja turvallisen tavan tunnistaa käyttäjät ilman, että tarvitsee huolehtia salasanatallennuksesta. Se myös tukee yksinkertaista ja turvallista käyttäjäkokemusta, kun käyttäjä voi käyttää olemassa olevaa tunnistetta. Tämä vähentää turvallisuusriskiä ja tarjoaa käyttäjälle joustavuutta eri tunnistusvaihtoehtojen käytössä.**


### 29.02.2024 Kahdeksas tunti:
-------------------------------
Tällä tunnilla harjoiteltiin budjetin luomista ja policyn tekemistä.

## Budget

**Miksi tekisin budjetin?:**
Budjetin luominen antaa mahdollisuuden hallita ja valvoa käyttökustannuksia. Budjetin avulla voi asettaa rajat sille, kuinka paljon on valmis käyttämään Azure palveluihin tiettynä ajanjaksona. 

**Kohdistuiko luomani budjetti johonkin tiettyyn palveluun?:**
Luomani budjetti ei nyt kohdistunut mihinkään tiettyyn palveluun, koska palvelua sille ei ole määritetty.

**Voinko tehdä budjetin koskemaan vain jotain tiettyä palvelua?:**
Voin tehdä budjetin koskemaan tiettyä palvelua. Voin myös valita tietyt resurssit, jotka haluan sisällyttää budjettiini.

**Voinko tehdä budjetin koskemaan jotain tiettyä subscriptionia ja kaikkia siihen toteutettuja palveluita?:**
Voin tehdä budjetin koskemaan vaan tiettyä tilausta ja kaikkia sen tilauksen palveluita. 

## Policy

**Onnistuuko resurssiryhmän luonti ilman Tag asetusta? Miksi?:**
Uuden Resource groupin luonti heti policyn tekemisen jälkeen onnistui, koska policyllä kestää hetki ennenkuin se toimii.

Pieni tauko....

**Lisää Tag välilehdellä tag, jonka nimi on eri kuin mitä policy määrityksessä asetit (myTag):**
Väärällä tagilla Resource groupin tekeminen ei onnistunut.

**Muuta Resource group Tag välilehdellä tag asetus arvoon jonka määritit policy asetuksessa (myTag).:**
Nyt Resource groupin tekeminen onnistuu oikealla tägillä.


### 11.03.2024 Tentti:
----------------------
Sain tehtyä tentin vasta maanantai illalla, koska olin lomareissulla.
Tenttiin kertasin ahkerasti ja tein harjoituksia.
Tentti onnistui mielestäni todella hyvin.


**Lopetus:** 

Olen huomannut oppimispäiväkirjan tekemisen auttaneen minua havainnoimaan ja arvioimaan omaa oppimistani kurssilla. Oppismispäiväkirjan avulla olen pystynyt reflektoimaan ja palauttamaan mieleen jo opittuja asioita.

2205412 Atte Mönkkönen