En esta página, se muestran información y ejemplos para conectar a una instancia de Cloud SQL desde un servicio que se ejecuta en Cloud Build.
Cloud SQL es un servicio de base de datos completamente administrado que te ayuda a configurar, mantener, controlar y administrar tus bases de datos relacionales en la nube.
Cloud Build es un servicio que ejecuta tus compilaciones en la infraestructura de Google Cloud.
Configura una instancia de Cloud SQL
- Habilita la API de Cloud SQL Admin en el proyecto de Google Cloud desde el que te conectas, si
aún no lo has hecho:
- Crea una instancia de Cloud SQL para PostgreSQL. Te recomendamos que elijas una ubicación de instancia de Cloud SQL en la misma región que tu servicio de Cloud Run para obtener una mejor latencia, evitar algunos costos de red y reducir los riesgos de fallas entre regiones.
De forma predeterminada, Cloud SQL asigna una dirección IP pública a una instancia nueva. También puedes asignar una dirección IP privada. Para obtener más información sobre las opciones de conectividad de ambos, consulta la página Descripción general de conexión.
Configura Cloud Build
Los pasos para configurar Cloud Run dependen del tipo de dirección IP que hayas asignado a la instancia de Cloud SQL.IP pública (predeterminada)
Asegúrate de que tu
cuenta de servicio de Cloud Build tenga los roles y permisos de IAM necesarios para conectarse a la instancia de Cloud SQL.
La cuenta de servicio de Cloud Build aparece en la página IAM de la consola de Google Cloud como la Principal [YOUR-PROJECT-NUMBER]@cloudbuild.gserviceaccount.com
.
Para ver esta cuenta de servicio en la consola de Google Cloud, selecciona la casilla de verificación Incluir asignaciones de roles proporcionadas por Google.
Tu cuenta de servicio de Cloud Build necesita uno de los siguientes roles de IAM:
Cloud SQL Client
(recomendado)Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
Si la cuenta de servicio de Cloud Build pertenece a un proyecto distinto del de la instancia de Cloud SQL, se deberán agregar los permisos de IAM y la API de Cloud SQL Admin para ambos proyectos.
IP privada
Para conectarte a tu instancia de Cloud SQL a través de una IP privada, Cloud Build debe estar en la misma red de VPC que tu instancia de Cloud SQL. Para configurar esto, haz lo siguiente:
- Configura una conexión privada entre la red de VPC de tu instancia de Cloud SQL y la red del productor de servicios.
- Crea un grupo privado de Cloud Build.
Una vez configurada, la aplicación podrá conectarse directamente mediante la dirección IP privada y el puerto 5432
de la instancia cuando la compilación se ejecute en el grupo.
Conectar a Cloud SQL
Después de configurar Cloud Build, puedes conectarte a la instancia de Cloud SQL.
IP pública (predeterminada)
Para rutas de IP públicas, Cloud Build es compatible con sockets Unix y TCP.
Puedes usar el proxy de autenticación de Cloud SQL en un paso de Cloud Build para permitir conexiones a tu base de datos. Esta configuración tiene las siguientes características:
- Compila el contenedor y lo envía a Container Registry.
- Compila un segundo contenedor y copia el objeto binario del proxy de autenticación de Cloud SQL.
- Los contenedores que compila Cloud Build no necesitan enviarse a ningún registro y se descartan cuando finaliza la compilación.
- Mediante el segundo contenedor, inicia el proxy de Cloud SQL Auth y ejecuta cualquier comando de migración.
La muestra de código de Cloud Build anterior muestra cómo puedes ejecutar una secuencia de comandos hipotética de migración después de implementar la app de ejemplo anterior para actualizar su base de datos de Cloud SQL con el proxy de Cloud SQL Auth y Cloud Build. Para ejecutar esta muestra de código de Cloud Build, los pasos de configuración necesarios son los siguientes:
- Crea un nombre de carpeta llamada
sql-proxy
- Crea un archivo
Dockerfile
en la carpetasql-proxy
con la siguiente línea de código única para el contenido del archivo:FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
- Crea un archivo
cloudbuild.yaml
en la carpetasql-proxy
. - Actualiza el archivo
cloudbuild.yaml
:- Copia el código de muestra de Cloud Build anterior y pégalo en el archivo
cloudbuild.yaml
. - Quita el bloque de código del método de conexión que no se usa para usar una conexión TCP o una conexión de socket Unix.
- Reemplaza los siguientes valores de marcador de posición por los valores que se usan en tu proyecto:
mydatabase
myuser
myinstance
- Copia el código de muestra de Cloud Build anterior y pégalo en el archivo
- Crea un Secret llamado
database_password
en Secret Manager.- Para que la cuenta de servicio de Cloud Build acceda a este Secret, deberás otorgarle el rol de descriptor de acceso a secretos de Secret Manager en IAM. Consulta Usa Secrets de Secret Manager para obtener más información.
- Crea un archivo de secuencia de comandos migrate.py en la carpeta
sql-proxy
.- La secuencia de comandos puede hacer referencia a las siguientes variables de entorno y el Secret creado en el archivo
cloudbuild.yaml
mediante los siguientes ejemplos:os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('INSTANCE_CONNECTION_NAME')
- Para hacer referencia a las mismas variables desde una secuencia de comandos de Bash (por ejemplo:
migrate.sh
), usa los siguientes ejemplos:$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$INSTANCE_CONNECTION_NAME
- La secuencia de comandos puede hacer referencia a las siguientes variables de entorno y el Secret creado en el archivo
- Ejecuta el siguiente comando
gcloud builds submit
para compilar un contenedor con el proxy de autenticación de Cloud SQL, inicia el proxy de Cloud SQL Auth y ejecuta la secuencia de comandosmigrate.py
:gcloud builds submit --config cloudbuild.yaml
IP privada
En el caso de las rutas de IP privadas, tu aplicación se conecta directamente a tu instancia a través de grupos privados. En este método, se usa TCP para conectarse directamente a la instancia de Cloud SQL sin usar el proxy de autenticación de Cloud SQL.
Conéctate con TCP
Conéctate con la dirección IP privada de tu instancia de Cloud SQL como host y puerto 5432
.
Python
Para ver este fragmento en el contexto de una aplicación web, consulta el archivo README en GitHub.
Java
Para ver este fragmento en el contexto de una aplicación web, consulta el archivo README en GitHub.
Nota:
- CLOUD_SQL_CONNECTION_NAME debe representarse como <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>
- Con el argumento ipTypes=PRIVATE, se forzará a SocketFactory a la conexión con la IP privada asociada de una instancia
- Consulta los requisitos de la versión de fábrica de los sockets de JDBC para el archivo pom.xml aquí.
Node.js
Para ver este fragmento en el contexto de una aplicación web, consulta el archivo README en GitHub.
Go
Para ver este fragmento en el contexto de una aplicación web, consulta el archivo README en GitHub.
C#
Para ver este fragmento en el contexto de una aplicación web, consulta el archivo README en GitHub.
Ruby
Para ver este fragmento en el contexto de una aplicación web, consulta el archivo README en GitHub.
PHP
Para ver este fragmento en el contexto de una aplicación web, consulta el archivo README en GitHub.
Luego, puedes crear un paso de Cloud Build para ejecutar tu código directamente.
La muestra de código de Cloud Build anterior muestra cómo puedes ejecutar una secuencia de comandos hipotética de migración después de implementar la app de ejemplo anterior para actualizar su base de datos de Cloud SQL con Cloud Build. Para ejecutar esta muestra de código de Cloud Build, los pasos de configuración necesarios son los siguientes:
- Crea un nombre de carpeta llamada
sql-private-pool
- Crea un archivo
Dockerfile
en la carpetasql-private-pool
con la siguiente línea de código única para el contenido del archivo:FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
- Crea un archivo
cloudbuild.yaml
en la carpetasql-private-pool
. - Actualiza el archivo
cloudbuild.yaml
:- Copia el código de muestra de Cloud Build anterior y pégalo en el archivo
cloudbuild.yaml
. - Reemplaza los siguientes valores de marcador de posición por los valores que se usan en tu proyecto:
mydatabase
myuser
databasehost
, en el formatohost:port
.
- Copia el código de muestra de Cloud Build anterior y pégalo en el archivo
- Crea un Secret llamado
database_password
en Secret Manager.- Para que la cuenta de servicio de Cloud Build acceda a este Secret, deberás otorgarle el rol de descriptor de acceso a secretos de Secret Manager en IAM. Consulta Usa Secrets de Secret Manager para obtener más información.
- Crea un archivo de secuencia de comandos migrate.py en la carpeta
sql-proxy
.- La secuencia de comandos puede hacer referencia a las siguientes variables de entorno y el Secret creado en el archivo
cloudbuild.yaml
mediante los siguientes ejemplos:os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('DATABASE_HOST')
- Para hacer referencia a las mismas variables desde una secuencia de comandos de Bash (por ejemplo:
migrate.sh
), usa los siguientes ejemplos:$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$DATABASE_HOST
- La secuencia de comandos puede hacer referencia a las siguientes variables de entorno y el Secret creado en el archivo
- Ejecuta el siguiente comando
gcloud builds submit
para compilar un contenedor con el proxy de autenticación de Cloud SQL, inicia el proxy de Cloud SQL Auth y ejecuta la secuencia de comandosmigrate.py
:gcloud builds submit --config cloudbuild.yaml
Prácticas recomendadas y más información
Puedes usar el Proxy de Cloud SQL Auth cuando pruebes tu aplicación de forma local. Consulta la guía de inicio rápido para usar el Proxy de Cloud SQL Auth a fin de obtener instrucciones detalladas.
También puedes realizar pruebas mediante el proxy de Cloud SQL a través de un contenedor de Docker.
Migraciones de esquemas de bases de datos
Si configuras Cloud Build para conectarte a Cloud SQL, puedes ejecutar tareas de migración del esquema de la base de datos en Cloud Build mediante el mismo código que implementarías en cualquier otra plataforma sin servidores.
Usa Secret Manager
Puedes usar Secret Manager para incluir información sensible en tus compilaciones.