En esta página se ofrece información y ejemplos sobre cómo conectarse a una instancia de Cloud SQL desde un servicio que se ejecuta en Cloud Run.
Para obtener instrucciones detalladas sobre cómo ejecutar una aplicación web de ejemplo de Cloud Run conectada a Cloud SQL, consulta la guía de inicio rápido para conectarse desde Cloud Run.
Cloud SQL es un servicio de base de datos totalmente gestionado que te permite configurar, mantener y gestionar tus bases de datos relacionales en la nube.
Cloud Run es una plataforma de computación gestionada que te permite ejecutar contenedores directamente en la infraestructura de Google Cloud .
Configurar una instancia de Cloud SQL
- Habilita la API Admin de Cloud SQL en el Google Cloud proyecto desde el que te conectas, si aún no lo has hecho:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - 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 mejorar la latencia, evitar algunos costes de redes y reducir los riesgos de fallos 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 Información general sobre la conexión.
- Cuando crees la instancia, puedes elegir la
jerarquía de certificados de servidor (CA) de la instancia y, a continuación, configurar la jerarquía
como
serverCaMode
de la instancia. Debes seleccionar la opción de AC por instancia (GOOGLE_MANAGED_INTERNAL_CA
) como modo de AC del servidor para las instancias a las que quieras conectarte desde aplicaciones web.
Configurar Cloud Run
Los pasos para configurar Cloud Run dependen del tipo de dirección IP que hayas asignado a tu instancia de Cloud SQL. Si diriges todo el tráfico de salida a través de la salida de VPC directa o de un conector de Acceso a VPC sin servidor, 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 tenga una dirección IP pública. Puedes comprobarlo en la página Resumen de tu instancia en la Google Cloud consola. Si necesitas añadir una, consulta las instrucciones en la página Configurar IP pública.
- Obtén el INSTANCE_CONNECTION_NAME de tu instancia. Puedes encontrar este valor en la página Resumen de tu instancia en la Google Cloud consola o ejecutando el siguiente comando:
gcloud sql instances describe
Sustituye INSTANCE_NAME por el nombre de tu instancia de Cloud SQL.gcloud sql instances describe INSTANCE_NAME
- Obtén el CLOUD_RUN_SERVICE_ACCOUNT_NAME de tu servicio de Cloud Run. Puedes encontrar este valor en la página IAM del proyecto que aloja el servicio de Cloud Run en la Google Cloud consola o ejecutando el siguiente comando
gcloud run services describe
en el proyecto que aloja el servicio de Cloud Run: Sustituye las siguientes variables:gcloud run services describe CLOUD_RUN_SERVICE_NAME --region CLOUD_RUN_SERVICE_REGION --format="value(spec.template.spec.serviceAccountName)"
- CLOUD_RUN_SERVICE_NAME: el nombre de tu servicio de Cloud Run
- CLOUD_RUN_SERVICE_REGION: la región de tu servicio de Cloud Run
-
Configura la cuenta de servicio de tu servicio de Cloud Run. Para conectarte a Cloud SQL, asegúrate de que la cuenta de servicio tenga el
Cloud SQL Client
rol de gestión de identidades y accesos. - Si vas a añadir una conexión de Cloud SQL a un servicio nuevo, debes contenerizar el servicio y subirlo a Container Registry o Artifact Registry. Si aún no tienes una conexión, consulta estas instrucciones sobre cómo crear e implementar una imagen de contenedor.
Si te conectas a instancias configuradas con la opción de autoridad de certificación (AC) compartida (
GOOGLE_MANAGED_CAS_CA
) o con la opción de AC gestionada por el cliente (CUSTOMER_MANAGED_CAS_CA
) como modo de AC del servidor, selecciona el entorno de ejecución de segunda generación cuando elijas el entorno de ejecución del servicio. Ambas opciones del modo de AC del servidor requieren que te conectes a la instancia con el proxy de autenticación de Cloud SQL v2.Si tu servicio se ejecuta en un entorno de ejecución de primera generación, solo puedes conectarte a instancias de Cloud SQL configuradas con la opción de autoridad de certificación (CA) por instancia (
GOOGLE_MANAGED_INTERNAL_CA
) como modo de CA del servidor. El entorno de ejecución de primera generación de Cloud Run incorpora el proxy de autenticación de Cloud SQL v1. Para obtener más información sobre los requisitos de conexión a Cloud SQL para el proxy de autenticación de Cloud SQL, consulta Requisitos para usar el proxy de autenticación de Cloud SQL.
Al igual que con cualquier otro cambio de configuración, al definir una nueva configuración para la conexión de Cloud SQL, se crea una nueva revisión de Cloud Run. Las revisiones posteriores también obtendrán automáticamente esta conexión de Cloud SQL, a menos que hagas cambios explícitos para modificarla.
Consola
-
Empieza a configurar el servicio. Para añadir conexiones de Cloud SQL a un servicio, sigue estos pasos:
- En la lista Servicios, haz clic en el nombre del servicio que quieras.
- Haz clic en Editar y desplegar nueva revisión.
- Habilita la conexión a una instancia de Cloud SQL:
- Haga clic en Contenedores y, a continuación, en Configuración.
- Desplázate hasta Conexiones de Cloud SQL.
- Haz clic en Añadir conexión.
- Haz clic en el botón Habilitar Cloud SQL Admin si aún no has habilitado la API Admin de Cloud SQL.
- Si vas a añadir una conexión a una instancia de Cloud SQL de tu proyecto, selecciona la instancia de Cloud SQL que quieras en el menú.
- Si usas una instancia de Cloud SQL de otro proyecto, selecciona Cadena de conexión personalizada en el menú e introduce el nombre de conexión completo de la instancia con el formato PROJECT-ID:REGION:INSTANCE-ID.
- Para eliminar una conexión, coloca el cursor a la derecha de la conexión para que se muestre el icono Eliminar y haz clic en él.
-
Haz clic en Crear o en Implementar.
Línea de comandos
Antes de usar cualquiera de los siguientes comandos, haz las sustituciones que se indican a continuación:
- IMAGE con la imagen que vas a implementar
- SERVICE_NAME con el nombre de tu servicio de Cloud Run
-
INSTANCE_CONNECTION_NAME con el nombre de conexión de la instancia de Cloud SQL o una lista de nombres de conexión separados por comas.
Si vas a implementar un contenedor nuevo, usa el siguiente comando:
Si va a actualizar un servicio que ya está disponible, utilice 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.
-
Para aplicar los cambios, introduce
terraform apply
. - Para verificar los cambios, comprueba el servicio Cloud Run, haz clic en la pestaña Revisiones y, a continuación, en la pestaña Conexiones.
IP privada
Si la cuenta de servicio de autorización pertenece a un proyecto distinto del que contiene la instancia de Cloud SQL, haz lo siguiente:
- En ambos proyectos, habilita la API Admin de Cloud SQL.
- Añade los permisos de gestión de identidades y accesos a la cuenta de servicio del proyecto que contiene la instancia de Cloud SQL.
- Asegúrate de que la instancia de Cloud SQL que has creado anteriormente tenga una dirección IP privada. Para añadir una dirección IP interna, consulta Configurar una IP privada.
- 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:
- Tanto la salida de VPC directa como el acceso a VPC sin servidor admiten la comunicación con redes de VPC conectadas mediante Cloud VPN y emparejamiento entre redes de VPC.
- La salida de VPC directa y el acceso a VPC sin servidor no admiten redes antiguas.
- A menos que utilices una VPC compartida, un conector debe compartir el mismo proyecto y la misma región que el recurso que lo utiliza, aunque el conector puede enviar tráfico a recursos de otras regiones.
- Conéctate mediante la dirección IP privada y el puerto de tu instancia
5432
.
Conectar a Cloud SQL
Una vez que hayas configurado Cloud Run, podrás conectarte a tu instancia de Cloud SQL.
IP pública (predeterminada)
En el caso de las rutas de IP públicas, Cloud Run proporciona cifrado y se conecta mediante el proxy de autenticación de Cloud SQL de dos formas:
- Mediante sockets Unix
- Usando un conector de Cloud SQL
Usar Secret Manager
Google recomienda usar Secret Manager para almacenar información sensible, como las credenciales de SQL. Puedes transferir secretos como variables de entorno o montarlos como un volumen con Cloud Run.
Después de crear un secreto en Secret Manager, actualiza un servicio 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
Con lo siguiente, se crean recursos secretos para almacenar de forma segura los valores del usuario, la contraseña y el nombre de la base de datos mediante google_secret_manager_secret
y google_secret_manager_secret_version
. Ten en cuenta que debes actualizar la cuenta de servicio de computación del proyecto para que tenga acceso a cada secreto.
Actualiza el recurso principal de Cloud Run para incluir los nuevos secretos.
Para aplicar los cambios, introduce terraform apply
.
El comando de ejemplo usa la versión del secreto latest. Sin embargo, Google recomienda fijar el secreto a 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 VPC. Este método usa TCP para conectarse directamente a la instancia de Cloud SQL sin usar el proxy de autenticación de Cloud SQL.
Conectarse con TCP
Conéctate mediante la dirección IP privada de tu instancia de Cloud SQL como host y el 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:
- NOMBRE_CONEXIÓN_CLOUD_SQL debe representarse como <MI-PROYECTO>:<REGIÓN-INSTANCIA>:<NOMBRE-INSTANCIA>.
- Si usas el argumento ipTypes=PRIVATE, se obligará a SocketFactory a conectarse con la IP privada asociada a una instancia.
- Consulta los requisitos de la versión de la fábrica de sockets JDBC para el archivo pom.xml.
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 otra información
Puedes usar el proxy de autenticación de Cloud SQL cuando pruebes tu aplicación de forma local. Consulta la guía de inicio rápido para usar el proxy de autenticación de Cloud SQL para obtener instrucciones detalladas.
También puedes hacer pruebas con el proxy de Cloud SQL a través de un contenedor de Docker.
Grupos de conexión
Es posible que se interrumpan las conexiones a las bases de datos subyacentes, ya sea por el propio servidor de la base de datos o por la infraestructura de la plataforma. Te recomendamos que utilices una biblioteca de cliente que admita grupos de conexiones que vuelvan a conectar automáticamente las conexiones de cliente interrumpidas. Puedes usar la agrupación de conexiones gestionada con tus instancias de Cloud SQL, lo que te permite escalar tus cargas de trabajo optimizando la utilización de recursos y la latencia de conexión de tus instancias de Cloud SQL mediante la agrupación. Para obtener información detallada sobre la agrupación de conexiones gestionadas, consulta el artículo Información general sobre la agrupación de conexiones gestionadas.
Para ver ejemplos más detallados sobre cómo usar los grupos de conexiones, consulta la página Gestionar conexiones de bases de datos.Límites de conexiones
Tanto la edición MySQL como la PostgreSQL de Cloud SQL imponen un límite máximo en las conexiones simultáneas, y estos límites pueden variar en función del motor de base de datos elegido (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. De esta forma, al aumentar el número de instancias, aumenta el número total de conexiones de cada despliegue.
Puedes limitar el número máximo de conexiones que se usan por instancia mediante un grupo de conexiones. Para ver ejemplos más detallados sobre cómo limitar el número de conexiones, consulta la página Gestión de conexiones de bases de datos.
Límites de cuota de la API
Cloud Run proporciona un mecanismo que se conecta mediante el proxy de autenticación de Cloud SQL, que usa la API Admin de Cloud SQL. Se aplican límites de cuota de API al proxy de autenticación de Cloud SQL. La cuota de la API Cloud SQL Admin utilizada es aproximadamente el doble del número de instancias de Cloud SQL configuradas por el número de instancias de Cloud Run de un servicio concreto desplegado en un momento dado. Puedes limitar o aumentar el número de instancias de Cloud Run para modificar la cuota de API prevista que se consumirá.Siguientes pasos
- Consulta más información sobre Cloud Run.
- Consulta más información sobre cómo crear y desplegar imágenes de contenedor.
- Consulta un ejemplo completo en Python para usar Cloud Run con PostgreSQL.