Collega Google Cloud Build a Google Cloud SQL
Google Cloud Run consente di utilizzare Cloud SQL. Ma cosa succede se hai bisogno di Cloud SQL quando costruisci il tuo contenitore in Google Cloud Build? È possibile?
sfondo
Ho un progetto Next.js, che viene eseguito in un container su Google Cloud Run. Il push del codice in Cloud Build (installazione del materiale, la generazione di pagine statiche e l'inserimento di tutto in un container) e la distribuzione su Cloud Run funziona perfettamente. 👌
Cloud SQL
Tuttavia, ho appena aggiunto alcune funzionalità in cui necessita anche di alcuni dati dalla mia istanza PostgreSQL che viene eseguita su Google Cloud SQL. Questi dati vengono utilizzati durante la creazione del progetto (generazione delle pagine statiche).
A livello locale, sulla mia macchina, funziona bene poiché il progetto può connettersi al mio proxy CloudSQL. Durante l'esecuzione in CloudRun dovrebbe funzionare anche, poiché Cloud Run consente di connettersi alla mia istanza Postgres su Cloud SQL .
Il mio problema
Quando creo il mio progetto con Cloud Build, ho bisogno di accedere al mio database per poter generare le mie pagine statiche. Sto cercando un modo per connettere il mio generatore di cloud Docker a Cloud SQL, forse proprio come Cloud Run (completamente gestito) fornisce un meccanismo che si connette utilizzando il proxy Cloud SQL.
In questo modo potrei connettermi /cloudsql/INSTANCE_CONNECTION_NAMEmentre costruisco il mio progetto!
Domanda
Quindi la mia domanda è: come faccio a connettermi alla mia istanza PostgreSQL su Google Cloud SQL tramite il proxy Cloud SQL durante la creazione del mio progetto su Google Cloud Build?
Cose come le credenziali del mio database, ecc. Vivono già in Secrets Manager, quindi dovrei essere in grado di usare quei dettagli immagino 🤔
Risposte
Puoi utilizzare il contenitore che desideri (e di cui hai bisogno) per generare le tue pagine statiche e scaricare il proxy cloud sql per aprire un tunnel con il database
- name: '<YOUR CONTAINER>'
entrypoint: 'sh'
args:
- -c
- |
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy
./cloud_sql_proxy -instances=<my-project-id:us-central1:myPostgresInstance>=tcp:5432 &
<YOUR SCRIPT>
Il motore dell'app ha un wrapper exec che ha il vantaggio di inviare tramite proxy il tuo Cloud SQL per te, quindi lo uso per connettermi al database in cloud build ( quindi fai alcuni tutorial di Google ).
Tuttavia, tieni presente i problemi futuri: Cloud Build viene eseguito esclusivamente *, il us-central1che significa che sarà patologicamente lento connettersi da qualsiasi altra parte. Per una o due operazioni, non mi interessa, ma se stai eseguendo un'intera suite di test di integrazione che semplicemente non funzionerà.
Inoltre, dovrai concedere l'autorizzazione a GCB per accedere a GCSQL.
steps:
- id: 'Connect to DB using appengine wrapper to help'
name: gcr.io/google-appengine/exec-wrapper
args:
[
'-i', # The image you want to connect to the db from
'$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME:$SHORT_SHA',
'-s', # The postgres instance
'${PROJECT_ID}:${_POSTGRES_REGION}:${_POSTGRES_INSTANCE_NAME}', '-e', # Get your secrets here... 'GCLOUD_ENV_SECRET_NAME=${_GCLOUD_ENV_SECRET_NAME}',
'--', # And then the command you want to run, in my case a database migration
'python',
'manage.py',
'migrate',
]
substitutions:
_GCLOUD_ENV_SECRET_NAME: mysecret
_GCR_HOSTNAME: eu.gcr.io
_POSTGRES_INSTANCE_NAME: my-instance
_POSTGRES_REGION: europe-west1
* a meno che tu non sia disposto a pagare di più e farti punto molto dal software Beta, nel qual caso puoi utilizzare cloud build worker (al momento in cui scrivo sono in Beta, comunque ... Tornerò e aggiornerò se fanno in produzione e risolverà i problemi)