- 13.9.2017

Azure Functions ja API Apps integraation avuksi

Kuten edellisessä artikkelisarjan osassa jo totesin, niin Azuren valmiilla palveluilla pääsee jo melko pitkälle ilman merkittävämpää koodaamista. Jossain vaiheessa tulee kuitenkin raja vastaan, kun valmiit rakennuspalikat eivät enää taivu tarpeisiin, vaan Visual Studio on otettava kauniisti käteen. Silloin kuvioon astuu Azure Functions ja Azure API Apps, joiden avulla toteutetaan ne puuttuvat osat, ja liitetään esimerkiksi osaksi Logic Apps -työnkulkua.

Ota yhteyttä

Tämä artikkeli on järjestyksessä kolmas artikkeli sarjassa, jossa käsitellään sovelluskaaoksen hallintaa Azure pilvipalveluilla.

Mikä Azure Functions?

Azure FunctionsAzure Functions on Azuren palvelu, joka tarjoaa ympäristön oman koodin julkaisuun funktioiden muodossa. Näitä funktioita voidaan kutsua muista sovelluksista. Erona perinteisempään sovellusten suoritusympäristöön – joita myös Azuressa on ollut alusta asti – on se, että Functions -palveluun julkaistaan ainoastaan sovellusten osia, funktioita, eikä kokonaisia sovelluksia.

Varsinaiset sovellukset, jotka näitä funktioita käyttävät ovat sitten jossain muualla, esimerkiksi Logic Apps -sovelluksissa. Tällä tavalla saadaan sovellukset pilkottua pienempiin osiin, ja nämä pienemmät osat eli funktiot, tulevat tehokkaammin hyödynnettyä eri sovellusten kesken. Funktioiden suoritus voidaan tehdä myös herätteenä tiettyihin tapahtumiin, esimerkiksi silloin kun sanomajonoon tulee sanoma tai kun Azure Storage -tiliin ilmestyy uusi tiedosto.

Mikropalveluarkkitehtuuri on nykyään aika puhuttu aihe. Azure Functions on keskeisessä asemassa silloin, kun puhutaan Azure -palveluiden avulla toteutetuista mikropalveluarkkitehtuureista. En tässä artikkelissa paneudu mikropalveluarkkitehtuuriin sen syvällisemmin, vaan säästän sen aiheen myöhempää artikkelia varten.

Azure Functions on myös osa Azuren ns. serverless -tarjontaa. Tähän serverless -tarjontaan kuuluu kokoelma palveluita, joille luonteenomaista on se, että niissä ei itse tarvitse huolehtia palvelimesta tai muustakaan isännästä tai ajoympäristöstä. Lähes kaikki Azuren palvelut, ehkä virtuaalikoneita ja muutamaa muuta palvelua lukuunottamatta, ovat juuri tuollaisia luonteeltaan. Serverless -palveluissa tämä suoritusympäristöstä huolehtiminen on kuitenkin poistettu omilta harteilta käytännössä kokonaan.

Miksi käyttäisin Azure Functions -palvelua?

Azure Functions on parhaimmillaan silloin kun haluat laajentaa olemassa olevaa sovellusta sellaisilla toiminnoilla, joille ei löydy valmista palvelua Azuressa. Toki Azure Functions toimii hyvin myös rakennuspalikkana kokonaan uusille sovelluksille. Funktion voi laukaista käyntiin erilaisissa tilanteissa esimerkiksi automaattisesti silloin kun Azure Service Bus sanomajonoon saapuu uusi sanoma, tai kun Azure Storage -palveluun tallennetaan uusi tiedosto – esimerkiksi kuva, josta haluat tehdä määrämuotoisen ja -kokoisen esikatselukuvan (thumbnail).

Azure Functions

Azure Functions tarjoaa mm. seuraavat edut.

  • Laaja kielituki – C#, F#, VB.NET, JavaScript jne. Kaikki käy. Valitse itse omien mieltymystesi ja tarpeiden mukainen ohjelmointikieli funktion tekemiseen. Jos haluat, voit tehdä jokaisen funktion eri kielellä. Tosin en heti keksi tilannetta jossa se olisi tarpeen, mutta onpahan ainakin mahdollista.
  • Maksu käytön mukaan – Microsoftin serverless -tarjonnan nurkkakiviin kuuluu se, että maksat vain siitä mitä käytät. Azure Functions -palvelun kohdalla se tarkoitaa sitä, että maksat vain niistä resursseista joita kirjoittamasi funktiot käyttävät. Jos ei funktioita käytetä ollenkaan, et maksa yhtään mitään. Katso hinnoittelukappale alempana artikkelissa, jossa kerron tarkemmin hinnoittelusta.
  • Sisäänrakennettu tietoturva – HTTP:n kautta kutsuttavat funktiot saat helposti suojattua niin, että niiden kutsumiseen tarvitaan Office 365 (Azure AD)-, Facebook-, Google-, Twitter- tai Microsoft -tili. Näitä asetuksia voit muuttaa tekemättä muutoksia itse funktioon.
  • Integraatio muihin Azuren palveluihin – Voit helposti integroida funktiosi muihin palveluihin, jolloin Azure Functions tarjoaa näppärän vaihtoehdon laajentaa näitä muita palveluita. Näistä muista palveluista voidaan myös saada heräte, ja käynnistää funktio silloin kun näissä palveluissa jotain tapahtuu, esim. Azure Service Bus:n sanomajonoon saapuu sanoma, joka välitetään funktiolle käsiteltäväksi. Katso tarkemmat tiedot palveluista jotka suoraan pystyt integroimaan Azure Functions -palveluun. Näihin palveluihin kuuluu myös Logic Apps.
  • Joustavat kehitysmallit – Kirjoita funktiosi suoraan Azuren hallintaportaalissa, tai käytä Visual Studiota funktioiden kirjoittamiseen, ja julkaise ne automaattisesti GitHubista tai Visual Studion pilvipalvelusta (Visual Studio Team Services). Mikä vain parhaiten sopii omiin tarpeisiisi.

Tutustu tarkemmin Azure Functions -palveluun Microsoftin sivuilla.

Azure API Apps

Ihan ensimmäisenä lienee paikallaan tuoda esille, että Azure API Apps ei ole varsinainen vaihtoehto Azure Functions -palvelulle, ei ainakaan ”joko-tai -näkökulmasta”. Otin sen tähän artikkeliin mukaan siitä syystä, että API Apps:n avulla voit esimerkiksi julkaista olemassa olevan REST -rajapinnan niin, että tämä rajapinta voidaan liittää Logic Apps -työnkulkuun. Tämän voit tehdä täysin koskematta olemassa olevaan rajapintaan, joten siihen ei tarvitse tehdä mitään muutoksia. Voit myös suojata olemassa olevan rajapinnan API Appsin avulla samalla tavalla kuin Azure Functions -palveluun julkaistun funktionkin. Eikä tämäkään vaadi välttämättä muutoksia olemassa olevaan rajapintaan.

Azure API Apps

Azure API Apps tarjoaa seuraavat hyödyt.

  • Julkaise olemassa olevat rajapinnat muutoksitta – Mikä tahansa API -rajapinta joka toimii Azure -ympäristössä voidaan ”paketoida” Azure API Apps:iin ja hyötyä sen palveluista, täysin ilman koodimuutoksia olemassa olevaan rajapintaan.
  • Helpota rajapinnan käyttöä – API Apps:n avulla julkaistu rajapinta on helposti käytettävissä käytännössä mistä tahansa sovelluksesta, koska kaikki API Apps -sovellukset saavat metadata -kuvauksen (Swagger). Tätä voivat sitten muut järjestelmät ja palvelut, esim. Azure Logic Apps, käyttää kytkeytyäkseen näihin rajapintoihin.
  • Sisäänrakennettu tietoturva – Samoin kuin Azure Functions -palvelussa, API Apps:in avulla julkaistut rajapinnat voidaan suojata ja vaatia tunnistamista johon voidaan käyttää Office 365- (Azure AD), Facebook-, Google-, Twitter- ja Microsoft -tilejä.
  • Tehokkaat Visual Studio kehitystyökalut – Visual Studioon on saatavilla laajasti työkaluja, joiden avulla API Apps:in hyödyntäminen on todella helppoa.
  • Logic Apps -integraatio – Tämä on mielestäni yksi niistä parhaista eduista joita Azure API Apps tarjoaa. Olemassa olevat rajapinnat voidaan liittää Azure Logic Apps -työnkulkuun, ja sitä kautta laajentaa Logic Appsin kyvykkyyksiä käytännössä rajattomasti.

Lue lisää Azure API Apps -palvelusta Microsoftin sivuilta.

Mitä Azure Functions maksaa?

Azure FunctionsAzure Functions -palvelusta voi maksaa kahdella eri tavalla. Joko App Service -ajoympäristössä, jonka olen kuvannut alla olevassa kappaleessa API Apps:n osalta, tai sitten suoraan käyttöön perustuvan laskutuksen mukaan. Kun Azure Functions -palvelusta maksetaan käytön mukaan, perustuu laskutus kahteen tekijään:

  1. Kuinka paljon muistia funktiot käyttävät, ja kuinka pitkään.
  2. Kuinka monta kertaa funktioita kutsutaan.

Ensimmäiseen käytetään yksikköä GB-s, eli gigatavusekunti. Tämä tarkoittaa sitä, että jos funktio käyttää muistia yhden gigatavun verran, ja käyttää sitä sekunnin ajan, käyttää funktio resursseja 1 GB-s verran.

Näihin molempaan tekijään kuuluu kuukausittain ilmaista käyttöä, ja käyttö alkaa maksaa vasta sen jälkeen kun nämä rajat ylittyvät. Kuukaudessa saa ilmaiseksi 400 000 GB-s ja yksi miljoona suorituskertaa. Jotta tämä olisi ymmärrettävämpää, niin otan konkreettisen esimerkin.

Sanotaan että meillä on funktio, jota kutsutaan kerran minuutissa. Funktion suoritus kestää 5 sekuntia, ja sinä aikana se käyttää muistia 2 gigatavua. Jokainen suorituskerta käyttää 2 * 5 GB-s, eli 10 gigatavusekuntia.

Koska funktiota kutsutaan kerran minuutissa, kutsutaan sitä kuukauden (30 pv) aikana yhteensä 60 * 24 * 30 = 43 200 kertaa. Koska kuukaudessa saamme ”ilmaiseksi” miljoona suorituskertaa, ei kustannusta synny suorituskerroista. Koska yksi suorituskerta käyttää 10 GB-s, tulee kuukauden käytöstä 43 200 * 10 GB-S, eli yhteensä 432 000 GB-s. Näistä kuukausittain saadaan 400 000 GB-s maksutta, joten maksettavaksi jää 32 000 GB-s. Yhden GB-s:n hinta on 0,000014 EUR, joten kustannukseksi tulee näin 0,6048 EUR, eli hieman yli 60 senttiä.

Tiivistettynä, funktio jota kutsutaan kerran minuutissa, jonka suoritus kestää keskimäärin 5 sekuntia ja joka käyttää muistia keskimäärin 2 GB tämän suorituksen aikana, maksaa kuukaudessa 60 senttiä.

Toki, kun funktioiden määrä kasvaa, ja niissä suoritettavat tehtävät lisääntyvät, niin kustannukset luonnollisesti kasvavat. Huomioitavaa kuitenkin on se, että mitään aloituskustannuksia tai kiinteitä kustannuksia ei ole.

Mitä API Apps maksaa?

API Apps -sovellus suoritetaan App Service -ajoympäristössä. Tämän ympäristön hinta muodostuu siitä, minkälaiset resurssit tälle ajoympäristölle valitset, esimerkiksi käytettävissä olevan muistin tai suoritinytimien määrän suhteen. Yhden App Service -ympäristön voit jakaa useamman erilaisen palvelun välillä, jolloin kustannuksia ei synny lisää, mutta palvelut ”tappelevat” keskenään samoista resursseista. App Service -ympäristössä voit myös ajaa Azure Functions -palveluun julkaistuja funktioita, mikäli et halua maksaa suoraan käytön mukaan.

App Service on ostettavissa eri kokoisina valmiina paketteina, joihin resurssit on valittu etukäteen. Et siis erikseen valitse resursseja yksitellen, vaan valitset sen paketin, joka sisältää ne resurssit jotka tarvitset. Ilmaisia ja muutaman euron kuukausihintaisia paketteja löytyy, mutta ne soveltuvat ehkä lähinnä kehitys- ja testaustarkoituksiin.

Tuotantokäyttöön tarkoitettujen pakettien kuukausihinnat alkavat vajaasta 50 eurosta. Toisesta ääripäästä löytyy paketti, jonka kuukausikustannukset ovat yli 1500 euroa. Tällä saa mm. 8 suoritinydintä ja 14 GB työmuistia. 1500 euroa on toki paljon rahaa, mutta se mikä pitää muistaa, joka koskee monia Microsoft Azure:n palveluita on se, että laskutus tapahtuu usein tuntipohjaisesti, vaikka hintojen suhteen usein puhutaankin kuukausihinnoista. Esimerkiksi tuo 1500 euron App Service paketti maksaa hieman yli 2 euroa tunnissa, joten jos tuota suorituskykyä tarvitsee vain muutaman tunnin kuussa, esimerkiksi jonkun raportointiprosessin yhteydessä, niin kustannus ei ole kovinkaan kaksinen.

Tutustu tarkemmin App Service -hinnoitteluun Microsoftin hinnoittelusivuilta.

Yhteenveto

Ei ole olemassakaan sellaista tietojärjestelmää tai palvelua, joka kaikissa tilanteissa tarjoaisi ratkaisun kaikkiin tarpeisiin. Moni on sellaisia yrittänyt tehdä, ja vielä useampi on sellaisen käyttöönottoprojektin aloittanut, mutta päätynyt maksamaan tähtitieteellisiä summia sellaisen järjestelmän laajennoksista, joka alunperinkään ei ollut tarkoitettu laajennettavaksi.

Kun jonkun tietojärjestelmän tai palvelun kyvykkyydet viedään äärirajoille, tulee usein vastaan tilanne, jossa päädytään tekemään laajennoksia, usein tilauspalveluna. Äärirajoille vieminen on sinänsä hyvä asia, koska silloin tiedetään myös että saadaan ”kaikki mehut” irti siitä järjestelmästä tai palvelusta, johon on investoitu. Pääasia, että laajentaminen ei maksa maltaita. Se taas toteutuu järjestelmässä, joka alun perinkin on rakennettu laajennettavaksi.

Tällaisiin tilanteisiin Azure Functions ja Azure API Apps tarjoaa erittäin hyvän lisän, joilla Azuren valmiiden integraatiopalveluiden kylkeen saadaan tehtyä laajennoksia, joiden kustannukset pysyvät maltillisina.

Haluatko kuulla lisää Azuren palveluista? Ota yhteyttä.

Aiheesta lisää

Azure tuo oman konesalisi pilvipippaloihin Lähes kaikilla yrityksillä, nuorimpia pilvikeskeisiä yrityksiä ehkä lukuunottamatta, on jonkinlaisia tietojärjestelmiä omassa konesalissa. Oma konesal...
Azure Service Bus tuo toimintavarmuutta integraatioihin Azure Service Bus on palvelu Microsoftin Azure -pilvialustassa, joka mahdollistaa viestien ja sanomien välittämisen asynkronisesti. Se tarkoittaa sitä...
Oletko kuullut tarinan konesalin peikosta? Me suomalaiset olemme hyvässä digi-iskussa Microsoftin ja PwC:n tekemän tuoreen selvityksen mukaan. Pärjäämme mittelöissä jopa maailmanluokan vertailu...
Integraatioalusta Azure palveluiden avulla: Logic Apps ja Flow Yritykset kytkeytyvät toisiin yrityksiin sähköisten järjestelmien kautta yhä useammin. Lisäksi yritykset käyttävät sisäisesti erilaisia järjestelmiä, ...
Azure pilvipalvelut avuksi sovelluskaaoksen hallintaan – osa 1 Nykyään liiketoiminnan tueksi saatavilla oleva IT-sovellusten ja -palveluiden kirjo on valtava. Käyttöönotto on joko helppoa tai erittäin helppoa, eik...
Tehosta liiketoimintaasi Azurella Haluaisitko tehostaa kankeita liiketoimintaprosesseja kustannustehokkaasti, käyttäen moderneja pilvipalveluita ja kehittää useilla eri päätelaitteilla...

Tietoa kirjoittajasta

Mika Berglund

Arkkitehti, teknologiakonsultti

mika.berglund@meteoriitti.com

+358 50 570 6237

Kirjoitukset (12)

Kommentoi