Kodeeksempler¶
Python¶
Cloud SQL IAM Database authentication¶
For å slippe å opprette og bruke builtin users i sql databaser på GCP bør man i stedet bruke Cloud SQL IAM database authentication når man skal koble seg til Cloud SQL databaser for analyse. Da vil man unngå å måtte lese inn passordet for brukeren fra hemmelighet i koden.
Eksemplene som følger forutsetter:
-
At følgende python biblioteker er installert:
cloud-sql-python-connector pandas pg8000 sqlalchemy
-
At den personlige brukeren eller IAM service accounten har rollene
Cloud SQL Instance User
ogCloud SQL Client
i GCP prosjektet som eier database instansen du skal koble deg mot. Dette er prosjektnivå roller du gir gjennom IAM i GCP prosjektet. -
At den personlige brukeren eller IAM service accounten er lagt til som en
Cloud IAM
bruker på database instansen. Se her for hvordan å legge til dette. -
Enten manuelt eller med databasemigrasjon må man gi brukeren/service accounten tilgang til å lese fra tabellene i databasen.
- For å gi tilgang til personlige brukere:
GRANT SELECT ON ALL TABLES IN SCHEMA public to cloudsqliamuser; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO cloudsqliamuser;
- For å gi tilgang til IAM service accounter:
GRANT SELECT ON ALL TABLES IN SCHEMA public to cloudsqliamserviceaccount; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO cloudsqliamserviceaccount;
- For å gi tilgang til personlige brukere:
Lese med personlig bruker¶
Hvis du ikke har gjort det i dag, kjør først kommandoen gcloud auth login --update-adc
import os
from google.cloud.sql.connector import Connector
import pg8000
import pandas as pd
import sqlalchemy
instance_connection_name = "prosjektID:region:instans" # Erstatt med database instansen du skal koble deg til
db_iam_user = "epost@nav.no" # Erstatt med din nav epost
db_name = "navn" # Erstatt med navn på databasen
connector = Connector()
def getconn() -> pg8000.dbapi.Connection:
conn: pg8000.dbapi.Connection = connector.connect(
instance_connection_name,
"pg8000",
user=db_iam_user,
db=db_name,
enable_iam_auth=True,
)
return conn
engine = sqlalchemy.create_engine(
"postgresql+pg8000://",
creator=getconn)
query = "SELECT * FROM table"
df = pd.read_sql_query(query, engine)
Lese med service account¶
Dette eksempelet er ment for airflow tasks i KNADA og vil ikke fungere fra notebooks da disse ikke har en binding mot en IAM service account. For notebooks i KNADA, se Lese med personlig bruker.
import os
from google.cloud.sql.connector import Connector
import pg8000
import pandas as pd
import sqlalchemy
instance_connection_name = "prosjektID:region:instans" # Erstatt med database instansen du skal koble deg til
db_iam_user = "sa@prosjekt.iam" # Merk: Brukernavnet her skal settes til service account eposten uten .gserviceaccount.com. Altså er service account eposten din mitt-team@knada-gcp.iam.gserviceaccount.com så blir brukernavnet mitt-team@knada-gcp.iam
db_name = "database" # Erstatt med databasenavn
connector = Connector()
def getconn() -> pg8000.dbapi.Connection:
conn: pg8000.dbapi.Connection = connector.connect(
instance_connection_name,
"pg8000",
user=db_iam_user,
db=db_name,
enable_iam_auth=True,
)
return conn
engine = sqlalchemy.create_engine(
"postgresql+pg8000://",
creator=getconn)
query = "SELECT * FROM table"
df = pd.read_sql_query(query, engine)
R¶
Lese fra Google Cloud Storage bucket¶
- Autentiser deg med
gcloud auth login --update-adc
- Installer følgende pakker
install.packages("googleCloudStorageR") install.packages("gargle")
- Les fra bucket
library(googleCloudStorageR) library(gargle) scope <-c("https://www.googleapis.com/auth/cloud-platform") token <- token_fetch(scopes = scope) gcs_auth(token = token) gcs_global_bucket("my-bucket") obj <- gcs_get_object("file.txt")