-

Slack-botin refaktorointi lokaalista Nodesta Cloudflare Workeriksi

Joskus projektin määritelmä muuttuu kesken kaiken – jopa loppusuoralla. Näin kävi meille kahdelle kesätyöntekijälle.

Työprojektin aiheena oli Slack-kanavalle asennettava botti. Botti noutaisi hyödyllistä dataa verkosta tietokantaan ja lähettäisi sitä sen jälkeen Slackiin.

Botti koodattiin Nodella ja TypeScriptillä, ja se käytti PostgreSQL-tietokantaa, johon haravoitu data tallennettiin. Lisäksi kehitimme Slack-komentoja: esimerkiksi eräällä komennolla botti voi noutaa muutaman viimeisimmän rivin tietokannasta ja toisella komennolla dataa paikkakunnan perusteella.

Aluksi suunniteltiin, että botti tulisi pyörimään Azuressa käyttäen PostgreSQL-tietokantaa. Ei kulunut kauaa, kun meidän Slack-bottimme oli valmis. Ennen projektin viimeistelemistä saatiin kuitenkin idea käyttää Cloudflarea. Cloudflare Workers on serverless-ympäristö, jonka avulla voidaan ajaa koodia suoraan Cloudflaren globaalissa verkossa. Idea oli mielenkiintoinen ja suurin kysymys olikin, kuinka ison työn muutos vaatisi.

Muutos edellyttikin useita toimenpiteitä. Workers ei esimerkiksi tue suoraan PostgreSQL:ää tai muita relaatiotietokantoja, ja se käyttää myös erilaista ajoympäristöä kuin perinteinen Node.js-palvelin. PostgreSQL vaihdettiin Cloudflaren D1-tietokantaan, joka pohjautuu SQLiteen. Botti koodattiin melko lailla täysin uusiksi.

Tunnusten luomisen jälkeen ensimmäisenä ohjelmointiympäristössä asennettiin ja konfiguroitiin Wrangler, joka on Cloudflare Workersin CLI-työkalu, ja sen jälkeen projekti alustettiin tällä. Sitten päästiinkin kätevästi tekemisen pariin. Keskeisimpiä asioita Wranglerilla luodussa Workers-projektissa on wrangler.toml-niminen konfiguraatiotiedosto, jota käytetään projektin asetusten määrittämiseen.

Botti ilmoittaa komentojen käyttäjälle notifikaatiolla, tai vaikka jos komennot eivät menneet läpi syystä tai toisesta. Eli virheenhallinta integroitiin hyvin myös mukaan. Botti ilmoittaa mahdollisista uusista löydöksistä päivittäin kello 9:00. Slack API:n viestittelyssä käytetty Slack Bolt korvattiin suorilla HTTP-pyynnöillä.

Muutos oli onnistunut ja ohjelma saatiin pyörimään Cloudflareen yllättävänkin pienillä muokkauksilla. Projektissa oppi paljon “serverless” eli palvelittoman arkkitehtuurin hyödyistä verrattuna perinteiseen arkkitehtuuriin.