Toteutimme Hankenin datamigraation osa 3: AWS S3, Python ja loppupäätelmät
Blogisarjan kolmannessa osassa kerromme, miksi AWS S3 oli Hankenin datamigraatiossa niin hyödyllinen ja miksi Python valikoitui migraatioiden pääasialliseksi ohjelmointikieleksi.
Hankenille toteuttamamme datamigraatio oli pitkään yhden kehitystiimimme tärkeintä hommaa, ja se saatiin onnistuneesti pakettiin kesällä 2022. Blogissamme datamigraation kiemuroihin on tutustuttu niin laatuvaatimusten kuin versionhallinnan ja migraatiologiikan vinkkelistä. Teknisestä toteutuksesta riittää kuitenkin vielä kerrottavaa.
Datan siirto tietoturvallisesti AWS S3:lla
AWS:n tarjoama S3-pilvipalvelu mahdollisti datan siirron tietoturvallisella tavalla migraation eri askeleiden välillä. Dataa pystyi hakemaan S3 Selectillä, joka muistuttaa SQL:ää syntaksiltaan ja tehokkuudeltaan. Tallentamalla välivaiheet S3:een säästimme huomattavaa overheadia niin muistin käytössä kuin SQL-kyselyiden odottelemisessa. Kun dataa ei tarvittu, pystyimme vapauttamaan muistia tallentamalla sen S3:een, josta sen sai tarvittaessa ladattua aktiiviseen muistiin uudestaan. Samaa voitiin hyödyntää myös rajapintojen osalta esimerkiksi tuomalla Sisusta opintojaksot ja -kokonaisuudet ja tallentamalla ne sopivaan muotoon S3:een. Useita kutsuja eri järjestelmiin ei näin ollen tarvittu, jos usea migraatio vaati jonkin osajoukon tai koko joukon samasta datasta.
Python helppolukuisuuden ja ylläpidettävyyden takaajana
Valitsimme Pythonin migraatioiden pääasialliseksi ohjelmointikieleksi heti projektin alussa. Pythonilla saimme monimutkaisetkin ominaisuudet helppolukuisiksi ja ylläpidettävä koodi pysyi käsiteltävissä. Tarvitsimme ulkoisia kirjastoja hyvin vähän, joten riippuvuuksien päivittely oli käytännössä olematonta.
Hyödyntämällä Pythonin keyword-argumenttien automaattista purkamista ja pakkaamista rakensimme modulaarisia funktioita, jotka normaalisti vaatisivat interfacen implementoivia luokkia. Rakensimme esimerkiksi pseudonymisointifunktion, jota käytimme sekä lähde- että Sisun datan pseudonymisoinnissa. Käytimme Pythonia datan manipulointiin, jolloin pystyimme pitämään SQL-lausekkeet mahdollisimman yksinkertaisina ja keskitimme monimutkaisen datan yhdistelyn sovelluslogiikkaan. SQL-lausekkeiden tuottaman datan käyttö useissa migraatioissa lyhensi läpimenoaikaa eikä uusia SQL-funktiota tarvinnut kirjoittaa.
Myös automaattisten testien kattavuuden ylläpito oli yksinkertaista, kun datan käsittely oli eriytetty sovelluslogiikkaan. Pystyimme hyödyntämään mockattua kantadataa sellaisenaan testeissä ilman monimutkaisia join-funktioita. Mockaamalla lähdejärjestelmän datarivejä service-tason testeihin pystyimme todentamaan, miten asiat toimisivat oikealla datalla. E2E- ja integraatiotesteillä varmistimme, että oletetut SQL-ilmentymät löytyvät myös Sisusta.
Identtisten migraatioympäristöjen edut
Docker-kontteihin perustuva migraatioympäristö oli identtinen lokaalikehityksessä ja asiakkaan ympäristöissä. Esimerkiksi replikoimme asiakkaan tietokannan skeeman lokaaliin Docker-konttiin ja veimme datan sekoitettuna kontissa pyörivään kantaan. Lokaalikehityksen ja asiakkaiden ympäristöjen identtisyys teki esimerkiksi SQL-lausekkeiden kirjoittamisesta hyvin suoraviivaista eikä asiakkaan dataa tarvittu selkokielisenä kehittäjien omiin ympäristöihin.
Lisäksi jokaisella kehittäjällä oli Docker-verkon kautta liitettynä lokaali Sisu-instanssi, jolla simuloitiin osittain AWS:n VPC:n tarjoamia suoria yhteyksiä saman verkoston sisäisesti. Täten kehittäjien oli helppo kehittää, nollata, debugata ja tarkastella migraation lopputulemia ilman huolta siitä, että se haittaisi jonkun muun kehittäjän tekemistä.
Loppupäätelmät ja tunnelmat migraation jälkeen
Hankenin datamigraatiossa hyödyntämämme teknologiat ja ratkaisut ovat osoittautuneet niin toimiviksi, että tulemme käyttämään niitä myös tulevaisuudessa ja esimerkiksi seuraavaksi alkavassa migraatioprojektissa.