Kun työstämme data-pipelinea, tärkeää on valita työkalu, joka täyttää tarpeemme ja mahdollistaa kaavioiden jakamisen. Nopeat ja yksinkertaiset vaihtoehdot, kuten Microsoft PowerPoint, Google Slides, Figma, Miro ja Lucidchart, tarjoavat hyviä alustoja. On suositeltavaa valita ratkaisu, joka tukee versiohistoriaa ja yleistä saatavuutta, sillä tämä mahdollistaa eri osapuolten kommentoinnin ja voi säästää aikaa sekä vähentää turhautumista.
Pohditaanpa tarkemmin tätä prosessia yksinkertaisella kaaviolla. Esimerkki perustuu siihen, että data, tässä tapauksessa kuva, siirretään lähteestä tietokantaan (paikalliseen kansioon). Tässä esimerkissä ei ole transformaatiota, vaan yksinkertainen ilmoitus lähettämisen sijasta. Seuraavissa luvuissa syvennymme ilmoituksiin ja tarkastelemme, kuinka voimme parantaa tätä toiminnallisuutta.
On hyödyllistä kerätä API:n kuvakkeet ja logot, jotta prosessi visualisoidaan paremmin. Tämä voi auttaa hahmottamaan arkkitehtuurin kulkua ennen kuin aloitamme varsinaisen työn. Mikäli putken monimutkaisuus kasvaa, on usein tarpeen luoda lisäkaavioita, kuten datan virtauksen, sekvenssin, komponenttien ja käyttöönoton kaavioita. Tällöin on tärkeää miettiä, miten eri prosessit voivat kommunikoida toistensa kanssa ja miten ne voidaan visualisoida tehokkaasti.
Tässä esimerkissä luodaan pipeline, joka lataa kuvan NASA:n API:sta päivittäin, tallentaa sen kansioon ja ilmoittaa prosessin valmistumisesta. Tämän automaation hallitsemiseen käytämme Apache Airflow’ta ja hyödynnämme aikatauluttajaa toiminnan automatisointiin. Kuten aiemmin mainittiin, on hyödyllistä testata API-kutsuja ja yhteyksiä erillisellä työkalulla, kuten Jupyter Notebookilla, ennen kuin siirrymme Airflow’n käyttöön. Tämä varmistaa, että kaikki toiminnot tapahtuvat odotetusti ja auttaa virheiden korjaamisessa.
NASA:n API:n käyttäminen
Tässä pipeline:ssa käytämme NASA:n API:a. Suosikkini on Astronomy Picture of the Day (APOD), jossa päivittäin julkaistaan uusi kuva. API:n voi vaihtaa helposti toiseen, mutta tässä vaiheessa suosittelen tutustumaan APOD:iin ja kokeilemaan muita vaihtoehtoja myöhemmin.
Ennen kuin aloitamme, tarvitsemme NASA API-avaimen:
-
Luo NASA API-avain (https://api.nasa.gov/).
-
Syötä nimesi, sähköpostisi ja suunniteltu käyttötarkoitus.
-
Tarkista sähköpostisi, jossa löytyy API-avaimen tiedot.
Näiden vaiheiden jälkeen saat sähköpostia, jossa on API-avaimesi. On suositeltavaa tallentaa avain turvalliseen paikkaan, eikä sitä tulisi koskaan ladata GitHubiin tai muille julkisille alustoille. Seuraavissa luvuissa syvennymme myös siihen, kuinka API-avaimet voidaan hallita ja pitää turvallisina.
API-kutsun luominen Jupyter Notebookissa
Kun ympäristö on asetettu ja API-konfiguroitu, voimme aloittaa DAGin kirjoittamisen tämän prosessin automatisoimiseksi. Suosittelemme testaamaan Python-koodin Airflow’n ulkopuolella, kuten Jupyter Notebookissa, ennen kuin liitymme täysimittaisesti Airflow’n käyttöön. Tämä auttaa ymmärtämään, mitä koodi tekee ja auttaa virheiden korjaamisessa.
Tässä on yksinkertainen koodilohko, joka kutsuu API:a, lataa kuvan ja tallentaa sen paikallisesti:
Tämä koodinpätkä tarkistaa, että API toimii oikein, avaimet ovat voimassa ja verkko-ominaisuudet ovat kunnossa. Aluksi on tärkeää varmistaa, että API vastaa oikein ja että yhteydet ovat kunnossa.
Koodin selitys
-
Importoi tarvittavat kirjastot:
-
requests: Tämän avulla teemme HTTP-pyyntöjä API:lle. -
json: Muuntaa JSON-muotoiset tiedot Pythonin sanakirjaksi tai listaksi. -
datetime: Tällä kirjastolla saamme nykyisen päivän. -
NASA_Keys: Paikallinen tiedosto, joka pitää API-avaimen turvassa.
-
-
URL:n ja API-kutsun rakentaminen:
URL rakennetaan siten, että API-avaimemme sisältyy siihen. Tämä mahdollistaa sen käytön ilman, että avain on suoraan näkyvissä koodissa. -
Tietojen hakeminen API:sta:
Teemme HTTP GET -pyynnön luomaamme URL-osoitteeseen ja vastaanotamme vastauksena JSON-datan. Tämä data sisältää muun muassa kuvan URL-osoitteen, joka meitä kiinnostaa. -
Kuvan tallentaminen:
Haemme kuvan URL-osoitteenhdurl-avaimella ja tallennamme sen paikalliselle koneelle käyttäen nykyistä päivämäärää tiedoston nimenä, jotta vältämme tiedoston ylikirjoittamisen. -
Tallennus ja tarkistus:
Kun kuva on tallennettu, voimme tarkistaa paikallisen kansion ja varmistaa, että kuva on tallentunut oikein.
Lisätietoa käytettävistä kirjastojen ja API:n hallinnasta
Kun rakennamme automaattisia järjestelmiä, on tärkeää ottaa huomioon myös käytettävien API-avaimien hallinta. API-avaimet ovat keskeinen osa turvallisuutta, ja niiden hallintaan on olemassa hyviä käytäntöjä, kuten ympäristömuuttujien käyttö, jotta ne eivät päädy julkisiin repositoryihin. Lisäksi verkon ja tietoturvan osalta on hyvä varmistaa, että kaikki yhteydet ovat suojattuja ja mahdolliset virhetilanteet voidaan käsitellä tehokkaasti.
Miten saavuttaa monivuotinen eristys ja turvallisuus Airflow-ympäristössä?
Airflow on suosittu avoimen lähdekoodin ohjelmointialusta, joka mahdollistaa työnkulkujen ja prosessien automatisoinnin. Se on suunniteltu joustavaksi ja laajennettavaksi, mutta monimutkaisten ja turvallisuuden kannalta kriittisten ympäristöjen hallinta tuo mukanaan omat haasteensa. Erityisesti monen käyttäjän ympäristössä (multi-tenancy) tarvitaan tarkkaa hallintaa, jotta eri käyttäjät voivat työskennellä eristetysti toisistaan. Tämä luku käsittelee Airflow’n monivuotisuuden hallintaa ja sen mahdollisuuksia.
Kubernetes Executorin eristäminen
Kubernetes Executor tarjoaa yksinkertaisimman tavan eristää prosesseja Airflow’ssa. Tässä mallissa jokainen prosessi ajetaan omassa Podissaan, mikä takaa, että eri prosessit eivät vaikuta toisiinsa. Kubernetes Executor on erityisen hyödyllinen silloin, kun eristäminen ja turvallisuus ovat ensisijaisia tavoitteita. Sen käyttö vaatii kuitenkin hieman enemmän konfigurointia ja ymmärrystä Kubernetesin toimintaperiaatteista. Mikäli tarvitset erikoistuneempia turvallisuusasetuksia, on mahdollista käyttää Podin ylityksiä (override) tai solmujen valintaa (node selector taints) ja kuvia (images) eristämään ympäristöjä entistä tarkemmin.
Aikatauluttaja ja laukaiseja (Scheduler and Triggerer)
Airflow-arkkitehtuurissa aikatauluttaja (scheduler) ja laukaiseja (triggerer) eivät ole luonnostaan monivuotisia. Ne eivät tarjoa mahdollisuuksia eristää käyttäjien työkuormia toisistaan. Tämä tarkoittaa, että aikatauluttaja hallinnoi kaikkia DAGeja (Directed Acyclic Graph) samassa ympäristössä. Mikäli eristystä on kuitenkin tarpeen, ainoa vaihtoehto on käyttää useita Airflow-asennuksia rinnakkain. Tämä voi olla järkevää esimerkiksi organisaatioissa, joissa eri tiimien projektit vaativat itsenäistä ja eristettyä hallintaa.
DAGien käsittely ja eristäminen
Airflow:ssa DAGit ladataan samassa nimivälikössä ajonaikaisesti. Tämä tarkoittaa, että vaikka DAGit eivät suoraan tiedä toistensa olemassaolosta, niillä on pääsy toistensa tietoihin käyttäen Pythonin tavanomaisia tuontikäytänteitä (import utils) ja tiedostojärjestelmän perustoimintoja. Tällä ei ole varsinaista tapaa tukea eristämistä DAG-kansiossa, mutta tiedon jakaminen DAGien välillä voidaan rajoittaa esimerkiksi "push"- tai "pull"-menetelmillä. Näin voidaan jakaa erillisiä ja hajautettuja DAGeja yhteen Airflow-integraatioon.
Verkkokäyttöliittymä (Web UI) ja roolit
Airflow’n verkkokäyttöliittymä (Web UI) tarjoaa monivuotisuuden hallinnan roolien ja oikeuksien avulla. Käyttäjille voidaan määrittää rooleja, jotka rajoittavat pääsyn Airflow-objekteihin. Roolien ja oikeuksien avulla voidaan hallita sitä, mitä toimenpiteitä käyttäjä voi suorittaa tietyillä objekteilla, kuten DAGeilla, ajosarjoilla, tehtävillä ja muilla Airflow:n resursseilla. Esimerkiksi käyttäjälle, joka on määritetty "Viewer" -rooliin, voidaan antaa oikeus vain katsella tiettyjä DAGeja ilman mahdollisuutta muuttaa niitä.
Roolien ja oikeuksien hallinta
Airflow tukee roolien ja oikeuksien hallintaa useilla tasoilla. Käytettävissä on valmiiksi määritellyt roolit, kuten Public, Viewer, User, Op ja Admin, jotka tarjoavat eri tasoisia käyttöoikeuksia järjestelmässä. Tarvittaessa voi luoda myös mukautettuja rooleja, jotka antavat tarkempaa kontrollia käyttäjien pääsyyn tietyille resursseille. Esimerkiksi, jos halutaan rajoittaa käyttäjien pääsyä toistensa DAGeihin, voidaan luoda rooleja, jotka antavat pääsyn vain omiin DAGeihin.
Esimerkki roolien ja oikeuksien määrittelystä
Tässä esimerkissä luodaan käyttäjiä ja määritellään rooleja heidän pääsynsä rajoittamiseksi. Oletetaan, että meillä on kaksi käyttäjää, jotka tarvitsevat pääsyn vain omiin DAGeihinsa, eivätkä saa nähdä toistensa työkuormia. Tämän saavuttamiseksi voimme käyttää seuraavaa koodinpätkää, joka luo käyttäjiä Airflow:lle ja määrittelee heidän roolinsa:
Tässä luomme käyttäjän Airflow’n ydinkirjastojen avulla. Voimme myös tehdä tämän komentoriviltä käyttämällä airflow users create -komentoa, mutta koodipohjainen ratkaisu tarjoaa joustavampia mahdollisuuksia. Käyttäjät luodaan oletusroolilla "Public", mikä estää heiltä pääsyn useimpiin resursseihin. Sen jälkeen voimme määrittää käyttäjälle tarkemmin roolit ja oikeudet, jotta he pääsevät vain tiettyihin resursseihin, kuten omiin DAGeihin.
Monivuotisuus Airflow:ssa
Kun nämä perusperiaatteet on otettu käyttöön, monivuotisuuden hallinta on suhteellisen suoraviivaista. Käyttäjille annetaan roolit, jotka rajoittavat pääsyn vain heidän omiin resursseihinsa. On tärkeää, että tämä prosessi automatisoidaan ja varmistetaan säännöllisin väliajoin, jotta roolit ja oikeudet pysyvät ajantasaisina.
Tässä esimerkissä määritämme koodilla roolit ja lisäämme niihin tarvittavat oikeudet. Esimerkiksi, jos käyttäjällä on pääsy tietyille DAGeille, hänen roolinsa päivittyy automaattisesti:
Tällä tavoin voimme varmistaa, että käyttäjät saavat tarkalleen sen pääsyn, jonka he tarvitsevat, ilman mahdollisuutta nähdä muiden käyttäjien DAGeja.
Lopuksi
Airflow tarjoaa laajat mahdollisuudet monivuotisuuden hallintaan, mutta se vaatii huolellista konfigurointia ja oikeuksien tarkkaa hallintaa. Käyttäjien pääsy

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский