KNADA VM¶
Vi tilbyr private virtuelle maskiner gjennom Knorten, disse kjører i GCP prosjektet knada-gcp
.
Denne maskinen vil ha tilgang til on-premise kilder på lik linje som Notebooks og Airflow som kjører i KNADA.
Siden dette er en privat maskin stiller vi høyere krav til bruk av maskinene. Blant annet er du medansvarlig for å holde maskinen oppdatert! Dette betyr at du må sette deg inn i hvordan man vedlikeholder en Debian GNU/Linux maskin.
Det samme gjelder for pakker og applikasjoner du installerer. Du må selv aktivt holde disse oppdatert!
Hvis du syns dette blir for mye ansvar så anbefaler vi heller Jupyter notebooks.
Som med Jupyter notebook har man muligheter til å laste ned data til lokal maskin, derfor må man være ekstra obs på at man ikke gjør noe utenfor det behandlingsgrunnlaget man har.
Man bør være bevist på hva man skriver inn i terminalen (det man skriver ut i terminalen forsvinner så fort man avslutter shellet).
For eksempel bør man ikke skrive brukernavn og passord direkte i terminalen, men heller bruke konfigurasjons-filer. Enda bedre er det å hente hemmeligheter fra Google Secret Manager.
Det kan også være fornuftig å konfigurere shellet til å slette historikken når man logger ut.
Hvis man bruker bash
kan man legge til history -c
i .bash_logout
.
Vedlikehold¶
For Debian (selve maskinen/OSet) så kan man lese Keeping your Debian system up-to-date, men i korte trekk handler det om å kjøre aptitude update
etterfulgt av aptitude full-upgrade
.
Dette vil holde OSet oppdatert, og oppdatere pakker installert via aptitude
(aka apt install
).
For å sikre oss at dette faktisk skjer, så går det en jobb natt til mandag som oppdatere alle maskiner som er skrudd på! Er du en av de som er flink og skrur av maskinen din når du ikke bruker den, så må du dessverre selv påse at den blir oppdatert.
For Python bør man regelmessig kjøre pip list --outdated
for å se hva slags pakker man trenger å oppgradere.
Enda bedre er å ha en requirements.txt
(eller tilsvarende for Poetry eller lignende verktøy) sjekket inn i Github, og la Dependabot gjøre jobben.
Husk også å holde følge med på nye Python-versjoner!
Det finnes en god oversikt hos Python developers guide.
Per dags dato bør ingen være på noe lavere enn 3.8, og man bør jobbe med å komme seg vekk fra 3.8 da den har EOL (end of life) oktober 2024.
Koble til VM med SSH¶
For å koble deg til en VM i knada-gcp
trenger du å opprette et SSH nøkkelpar og hente ut noe informasjon om instansen som må fylles inn i SSH-configen lokalt (~/.ssh
).
- Logg inn med
gcloud auth login
(trengs kun å kjøres en gang om dagen). For å gjøre dette må gcloud være installer (se dokumentasjon hos cloud.google.com). - Kjør kommandoen
gcloud compute ssh --project knada-gcp --zone europe-north1-b <instance>
. Erstatt<instance>
med navnet på VM instansen din, denne finner du etter du har logget inn i Knorten underCompute
. Denne kommandoen vil også generere SSH-nøkler. - Lukk terminalen fra (2) og kjør så kommandoen
gcloud compute ssh --project knada-gcp --zone europe-north1-b <instance> --dry-run
lokalt på maskinen din. Erstatt<instance>
med navnet på VM instansen din slik som i punkt (2). - Outputen fra kommandoen i (3) inneholder en del ting du trenger fylle inn i SSH-configen din. Under er et eksempel på hvordan en slik SSH-config skal se ut.
Host knada-vm
HostName {HOSTNAME}
IdentityFile ~/.ssh/google_compute_engine
CheckHostIP no
HostKeyAlias {HOSTNAME}
IdentitiesOnly yes
UserKnownHostsFile ~/.ssh/google_compute_known_hosts
ProxyCommand {PROXYCOMMAND}
ProxyUseFdpass no
User {USERNAME}
Erstatt {HOSTNAME}, {PROXYCOMMAND} og {USERNAME} med verdiene du får ut av dry-run kommandoen over og lagre filen under ~/.ssh/config
.
Merk: {USERNAME} skal kun være det før @
i output fra kommandoen over, {HOSTNAME} er det som begynner med compute.
og {PROXYCOMMAND} er alt etter ProxyCommand til og med --verbosity=warning
.
Host knada-vm
HostName {HOSTNAME}
IdentityFile C:\\Users\\{USERNAME}\\.ssh\\google_compute_engine
CheckHostIP no
HostKeyAlias {HOSTNAME}
IdentitiesOnly yes
UserKnownHostsFile C:\\Users\\{USERNAME}\\.ssh\\google_compute_known_hosts
ProxyCommand "C:\\Users\\{USERNAME}\\AppData\\Local\\Google\\Cloud SDK\\google-cloud-sdk\\bin\\..\\platform\\bundledpython\\python.exe" "-S" "C:\\Users\\{USERNAME}\\AppData\\Local\\Google\\Cloud SDK\\google-cloud-sdk\\lib\\gcloud.py" compute start-iap-tunnel {INSTANS} %p --listen-on-stdin --project=knada-gcp --zone=europe-north1-b --verbosity=warning
ProxyUseFdpass no
User {USERNAME}
Erstatt {HOSTNAME}, {PROXYCOMMAND} og {USERNAME} med verdiene du får ut av dry-run kommandoen over og lagre filen under ~/.ssh/config
.
Merk: {USERNAME} skal kun være det før @
i output fra kommandoen over, {HOSTNAME} er det som begynner med compute.
og {INSTANS} som du finner i Knorten under Compute
.
Fra VS Code¶
- Installer extension
Remote - SSH
i VS Code. - I VS Code trykk cmnd+shift+P (mac) eller cntrl+shift+P (windows) og skriv inn og velg
Remote - SSH: Connect to host...
og velg så hostenknada-vm
.
Fra IntelliJ/Pycharm¶
- I oppstartsvinduet velg
SSH
underRemote Development
- Klikk
New Connection
- Åpne
SSH Configurations
ved å trykke på tannhjulet til høyre forConnection
feltet - I
SSH Configurations
vinduet trykk+
for å legge til en ny konfigurasjon. - Spesifiser så følgende og klikk
OK
Host
settes tilknada-vm
User name
settes til brukernavnet på maskinen din lokaltAuthentication type
settes tilOpenSSH config and authentication agent
- Trykk på
Check Connection and Continue
(dette tar fort litt tid første gangen) - Når vinduet
Choose IDE and Project
dukker opp settProject directory
. Dette skal settes til ditt hjemmeområde på serveren/home/<brukernavn>
, trykk på browse ikonet til høyre for boksen for å lete det opp - Klikk så
Download and Start IDE
SSH multiplexing aka gjenbruk av koblinger¶
For å optimalisere tilkobling mot VMen kan man bruke SSH multiplexing.
Dette er kjekt mot KNADA VM for da man slipper å autentisere seg for hver tilkobling.
Med bruk av ControlPersists
kan man si hvor lenge forbindelsen skal leve etter at man kobler fra siste gang.
Så hvis du SSH-er inn, skrur av tilkoblingen så vil du kunne starte VSCode innen 5 minutter og den vil kunne gjennbruke samme tilkobling.
Hvis man ikke ønsker at alle SSH tilkoblinger skal bruke multiplexing kan du bruke legge linjene (minus Host *
) under Host knada-vm
.
Host *
ControlMaster auto
ControlPersist 5m
Se SSH sin egen dokumentasjon for mer informasjon om de forskjellige variablene.
Trafikk ut av VM¶
Vi har tatt i bruk brannmurer for å hindre uønsket trafikk ut av VMene. Dette er konfigurert via Terraform i knada-gcp, og vi tilbyr ikke en individuell løsning. Derfor er vi litt mer restriktiv med hva vi åpner for.
Se allowlisting#knadavm for en oversikt over åpningene vi tilbyr for Knada VM.
Oppsett av VM¶
Python¶
Den virtuelle maskinen kommer med python 3.9 installert, men mangler installasjon av pip.
Installasjon av pip
på VMen kan gjøres med
sudo apt install python3-pip
R¶
R kan installeres som følger
sudo apt update -y && sudo apt install -y r-base
Nyttige R biblioteker for interaksjon med google APIer¶
- gargle: Bibliotek for enklere håndtering av autentisering mot google APIer
- googleCloudStorageR: Bibliotek for å lese/skrive filer til
Google Cloud Storage
. Se eksempel - bigrquery: Bibliotek for å lese skrive data til
BigQuery
Alle disse kan lastes ned og installeres av deg.
Installasjon av databasedrivere¶
For å bruke python biblioteker til å lese fra postgres og oracle kreves det at drivere for det er installert på den virtuelle maskinen. For å gjøre det enkelt for dere å komme i gang har vi lagd to scripts som begge må kjøres med root privilegier.
Kjør derfor først kommandoen:
sudo -i
Postgres¶
Trenger du Postgres, lim inn følgende i terminalen din:
apt-get update && apt-get install -yq --no-install-recommends libpq-dev
Oracle¶
- Lag en tom fil og kall den setup_nb.sh
- Lim inn følgene kodesnutt:
apt-get update && apt-get install -yq --no-install-recommends \
build-essential \
curl \
alien \
libaio1 \
libaio-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
curl https://download.oracle.com/otn_software/linux/instantclient/219000/oracle-instantclient-basic-21.9.0.0.0-1.x86_64.rpm > /tmp/oracle-instantclient-basic-21.9.0.0.0-1.x86_64.rpm
alien -i /tmp/oracle-instantclient-basic-21.9.0.0.0-1.x86_64.rpm && \
rm -rf /var/cache/yum && \
rm -f /tmp/oracle-instantclient-basic-21.9.0.0.0-1.x86_64.rpm && \
echo "/usr/lib/oracle/21.9/client64/lib" > /etc/ld.so.conf.d/oracle-instantclient21.9.conf && \
/usr/sbin/ldconfig
PATH=$PATH:/usr/lib/oracle/21.9/client64/bin
chmod +x setup_nb.sh
sudo ./setup_nb.sh
Nå vil skriptet installere versjon 21.9 av oracle klienten. Dersom du i stedet ønsker en annen versjon kan editere skriptet over med den versjonen du ønsker. Du finner en liste over tilgjengelige versjoner av oracle klienten her.
Lese fra TDV¶
Hvis du skal lese TDV data fra VM i knada-gcp
må du selv installere drivere og biblioteker som er nødvendig.
Dette kan gjøres som følger:
- Last opp TDV driveren til VMen: Denne finner du via utviklerimage på stien
F:\DVH\TIBCO\drivers\TIB_tdv_drivers_x.x.x_all\apps\odbc\linux64
(erstatt x med ønsket versjon) - Installer
unixodbc-dev
:sudo apt-get install unixodbc-dev
- Installer python biblioteket
pyodbc
:pip install pyodbc
- Følg eksempelet i dataseksjonens guide for å lese fra TDV.