Conectar Google Cloud Build a Google Cloud SQL
Google Cloud Run permite usar Cloud SQL. Pero, ¿qué sucede si necesita Cloud SQL al crear su contenedor en Google Cloud Build? ¿Es eso posible?
Fondo
Tengo un proyecto Next.js, que se ejecuta en un contenedor en Google Cloud Run. Enviar mi código a Cloud Build (instalar el material, generar páginas estáticas y poner todo en un contenedor) e implementarlo en Cloud Run funciona perfectamente. 👌
Cloud SQL
Pero, acabo de agregar alguna funcionalidad en la que también necesita algunos datos de mi instancia de PostgreSQL que se ejecuta en Google Cloud SQL. Estos datos se utilizan al construir el proyecto (generar las páginas estáticas).
Localmente, en mi máquina, esto funciona bien ya que el proyecto puede conectarse a mi proxy de CloudSQL. Mientras se ejecuta en CloudRun, esto también debería funcionar, ya que Cloud Run permite conectarse a mi instancia de Postgres en Cloud SQL .
Mi problema
Cuando construyo mi proyecto con Cloud Build, necesito acceso a mi base de datos para poder generar mis páginas estáticas. Estoy buscando una forma de conectar mi generador de nube Docker a Cloud SQL, tal vez al igual que Cloud Run (completamente administrado) proporciona un mecanismo que se conecta mediante el proxy de Cloud SQL.
¡De esa manera podría conectarme /cloudsql/INSTANCE_CONNECTION_NAME
mientras construyo mi proyecto!
Pregunta
Entonces, mi pregunta es: ¿Cómo me conecto a mi instancia de PostgreSQL en Google Cloud SQL a través del proxy de Cloud SQL mientras construyo mi proyecto en Google Cloud Build?
Cosas como las credenciales de mi base de datos, etc. ya se encuentran en Secrets Manager, así que supongo que debería poder usar esos detalles 🤔
Respuestas
Puede usar el contenedor que desea (y necesita) para generar sus páginas estáticas y descargar el proxy SQL en la nube para abrir un túnel con la base de datos
- 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>
El motor de la aplicación tiene una envoltura ejecutiva que tiene la ventaja de transferir su Cloud SQL por usted, así que lo uso para conectarme a la base de datos en la compilación de la nube ( así que haga algunos tutoriales de Google ).
Sin embargo, tenga cuidado con los problemas que se avecinan: Cloud Build se ejecuta exclusivamente *, lo us-central1
que significa que será patológicamente lento conectarse desde cualquier otro lugar. Para una o dos operaciones, no me importa, pero si está ejecutando un conjunto completo de pruebas de integración, eso simplemente no funcionará.
Además, deberá otorgar permiso para que GCB acceda 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 menos que esté dispuesto a pagar más y le moleste mucho el software Beta, en cuyo caso puede usar los trabajadores de compilación en la nube (en el momento de escribir este artículo están en Beta, de todos modos ... Volveré y actualizaré si hacen ponerlo en producción y solucionar los problemas)