En esta página, se muestran información y ejemplos para conectarse a una instancia de Cloud SQL desde un servicio que se ejecuta en Cloud Run.
Para obtener instrucciones paso a paso sobre cómo ejecutar una aplicación web de muestra de Cloud Run conectada a Cloud SQL, consulta la Guía de inicio rápido para conectarte desde Cloud Run.
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 Run es una plataforma de procesamiento administrada que te permite ejecutar contenedores directamente sobre 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 Run
Los pasos para configurar Cloud Run dependen del tipo de dirección IP que hayas asignado a la instancia de Cloud SQL. Si enrutas todo el tráfico de salida a través de la salida de VPC directa o un conector de Acceso a VPC sin servidores, usa una dirección IP privada. Compara los dos métodos de salida de red.IP pública (predeterminada)
- Asegúrate de que la instancia que creaste antes tenga una dirección IP pública. Puedes verificarlo en la página Descripción general de tu instancia en la consola de Google Cloud. Si necesitas agregar una, consulta la sección sobre cómo configurar la conectividad de IP pública para obtener instrucciones.
- Obtén el INSTANCE_CONNECTION_NAME de tu instancia. Puedes encontrarlo en la página Descripción general de la instancia en la consola de Google Cloud o mediante la ejecución del siguiente comando:
gcloud sql instances describe INSTANCE_NAME
. - Configura la cuenta de servicio para tu servicio de Cloud Run. Asegúrate de que la cuenta de servicio tenga las funciones y los permisos de Cloud SQL adecuados para conectarse a Cloud SQL.
Cloud SQL Client
(recomendado)Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
- La cuenta de servicio de tu servicio necesita una de las siguientes funciones de IAM:
Como sucede con cualquier cambio de configuración, establecer una configuración nueva para la conexión de Cloud SQL da lugar a la creación de una nueva revisión de Cloud Run. Las revisiones posteriores también adoptarán de forma automática esta conexión de Cloud SQL, a menos que realices actualizaciones explícitas para cambiarla.
Console
-
Comienza a configurar el servicio:
- Si agregas una conexión de Cloud SQL a un servicio nuevo, haz lo siguiente:
El servicio debe estar alojado en contenedores y subido a Container Registry o Artifact Registry. Si aún no tienes una imagen de contenedor, consulta estas instrucciones para compilar e implementar una.
- Si agregas conexiones de Cloud SQL a un servicio existente, haz lo siguiente:
- Haz clic en el nombre del servicio.
- Haz clic en la pestaña Editar e implementar nueva revisión.
- Si agregas una conexión de Cloud SQL a un servicio nuevo, haz lo siguiente:
- Habilita la conexión a una instancia de Cloud SQL:
- Haz clic en Contenedores, variables y secretos, conexiones, seguridad .
- Haz clic en la pestaña Contenedor.
- Desplázate hasta Conexiones de Cloud SQL.
- Haz clic en Agregar conexión.
- Haz clic en el botón Habilitar la API de Cloud SQL Admin si aún no habilitaste la API.
- Si agregas una conexión a una instancia de Cloud SQL en tu proyecto, selecciona la instancia de Cloud SQL deseada en el menú desplegable.
- Si usas una instancia de Cloud SQL de otro proyecto, selecciona string de conexión personalizada en el menú desplegable y, luego, ingresa el nombre completo de la conexión de la instancia en el formato PROJECT-ID:REGION:INSTANCE-ID.
- Si deseas borrar una conexión, coloca el cursor a la derecha de la conexión para que se muestre el ícono de la papelera y haz clic en él.
-
Haz clic en Crear o Implementar.
Línea de comandos
Antes de usar cualquiera de los siguientes comandos, realiza los reemplazos que se muestran a continuación:
- IMAGE por la imagen que implementas
- SERVICE_NAME por el nombre del servicio de Cloud Run
-
INSTANCE_CONNECTION_NAME por el nombre de conexión de la instancia de Cloud SQL o por una lista delimitada por comas de nombres de conexión
Si implementas un contenedor nuevo, usa el siguiente comando:
Si actualizas un servicio existente, usa el siguiente comando:gcloud run deploy \ --image=IMAGE \ --add-cloudsql-instances=INSTANCE_CONNECTION_NAME
gcloud run services update SERVICE_NAME \ --add-cloudsql-instances=INSTANCE_CONNECTION_NAME
Terraform
El siguiente código crea un contenedor base de Cloud Run, con una instancia de Cloud SQL conectada.
-
Ingresa
terraform apply
para aplicar los cambios. - Para verificar los cambios, revisa el servicio Cloud Run, haz clic en la pestaña Revisiones y, luego, en la pestaña Conexiones.
IP privada
Si la cuenta de servicio de autorización pertenece a un proyecto distinto al que contiene la instancia de Cloud SQL, haz lo siguiente:
- En ambos proyectos, habilita la API de Cloud SQL Admin.
- Para la cuenta de servicio del proyecto que contiene la instancia de Cloud SQL, agrega los permisos de IAM.
- Asegúrate de que la instancia de Cloud SQL que creaste antes tenga una dirección IP privada. Para agregar una dirección IP interna, consulta Configura IP privadas.
- Configura tu método de salida para conectarte a la misma red de VPC que tu instancia de Cloud SQL. Ten en cuenta las siguientes condiciones:
- La salida de VPC directa y el Acceso a VPC sin servidores admiten la comunicación con las redes de VPC conectadas mediante Cloud VPN y el intercambio de tráfico entre redes de VPC.
- La salida de VPC directa y el Acceso a VPC sin servidores no son compatibles con las redes heredadas.
- A menos que uses la VPC compartida, un conector debe compartir el mismo proyecto y la misma región que el recurso que lo usa, pero puede enviar tráfico a recursos en diferentes regiones.
- Conéctate mediante la dirección IP privada y el puerto
5432
de tu instancia.
Conectar a Cloud SQL
Después de configurar Cloud Run, puedes conectarte a la instancia de Cloud SQL.
IP pública (predeterminada)
En las rutas de IP públicas, Cloud Run proporciona encriptación y se conecta mediante el proxy de autenticación de Cloud SQL de las siguientes dos maneras:
- A través de sockets Unix
- Mediante un conector de Cloud SQL
Usa Secret Manager
Google recomienda usar Secret Manager para almacenar información sensible, como credenciales de SQL. Puedes pasar secretos como variables de entorno o activar como un volumen con Cloud Run.
Después de crear un secreto en Secret Manager, actualiza un servicio existente con el siguiente comando:
Línea de comandos
gcloud run services update SERVICE_NAME \ --add-cloudsql-instances=INSTANCE_CONNECTION_NAME --update-env-vars=INSTANCE_CONNECTION_NAME=INSTANCE_CONNECTION_NAME_SECRET \ --update-secrets=DB_USER=DB_USER_SECRET:latest \ --update-secrets=DB_PASS=DB_PASS_SECRET:latest \ --update-secrets=DB_NAME=DB_NAME_SECRET:latest
Terraform
Lo siguiente crea recursos secretos para contener los valores de nombre, contraseña y usuario de la base de datos de forma segura mediante google_secret_manager_secret
y google_secret_manager_secret_version
. Ten en cuenta que debes actualizar la cuenta de servicio de procesamiento del proyecto para tener acceso a cada secreto.
Actualiza el recurso principal de Cloud Run para incluir los secretos nuevos.
Ingresa terraform apply
para aplicar los cambios.
En el comando de ejemplo, se usa la versión del secreto, latest. Sin embargo, Google recomienda fijar el secreto en una versión específica, SECRET_NAME:v1.
IP privada
En el caso de las rutas de IP privadas, tu aplicación se conecta directamente a tu instancia a través de una red de VPC. 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.
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.
Grupos de conexiones
Las conexiones a las bases de datos subyacentes pueden interrumpirse, ya sea por el servidor de la base de datos o por la infraestructura de la plataforma. Te recomendamos usar una biblioteca cliente que admita grupos de conexiones que vuelvan a establecer de forma automática las conexiones de clientes que no funcionan. Si quieres obtener ejemplos más detallados sobre cómo usar los grupos de conexiones, consulta la página Administra conexiones de bases de datos.Límites de conexión
Las ediciones de MySQL y PostgreSQL de Cloud SQL imponen un límite máximo en la cantidad de conexiones simultáneas, y estos límites pueden variar según el motor de la base de datos elegida (consulta la página Cuotas y límites de Cloud SQL).Las instancias de contenedor de Cloud Run están limitadas a 100 conexiones a una base de datos de Cloud SQL. Cada instancia de un servicio o trabajo de Cloud Run puede tener 100 conexiones a la base de datos y, a medida que este servicio o trabajo escala, puede aumentar la cantidad total de conexiones por implementación.
Puedes limitar la cantidad máxima de conexiones de cada instancia mediante un grupo de conexiones. Para obtener ejemplos más detallados sobre cómo limitar la cantidad de conexiones, consulta la página Administra conexiones de bases de datos.
Límites de cuota de la API
Cloud Functions proporciona un mecanismo que se conecta mediante el proxy de Auth de Cloud SQL, que usa la API de Cloud SQL Admin. Los límites de cuota de la API se aplican al proxy de Cloud SQL Auth. La cuota de la API de Cloud SQL Admin usada es aproximadamente dos veces la cantidad de instancias de Cloud SQL configuradas por la cantidad de instancias de Cloud Run de un servicio particular implementado a la vez. Puedes limitar o aumentar la cantidad de instancias de Cloud Run para modificar la cuota de API esperada que se consume.¿Qué sigue?
- Obtén más información sobre Cloud Run.
- Obtén más información sobre cómo compilar e implementar imágenes de contenedores.
- Consulta un ejemplo completo en Python sobre el uso de Cloud Run con PostgreSQL.