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 UserogCloud SQL Clienti 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 IAMbruker 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")