Cómo establecer conexiones desde App Engine

Esta página contiene información y ejemplos sobre cómo conectarse a una instancia de Cloud SQL desde una aplicación de App Engine.

Cómo configurar Cloud SQL y App Engine

Para obtener más información sobre cómo configurar una instancia de Cloud SQL o una aplicación de App Engine, consulta las siguientes instrucciones:

  • Identifica el nombre de conexión para la instancia de Cloud SQL. Esta es una string única para cada instancia en el formato <PROJECT_ID>:<REGION>:<INSTANCE_ID>. Aparece en Nombre de conexión de instancia en la página Detalles de instancia de tu instancia o en connectionName cuando se usa el comando gcloud sql instances describe <INSTANCE_ID>.

  • Si usas el lenguaje de programación Java, habilita la API de Administrador de Cloud SQL.

    Habilita las API

Tu aplicación debe usar la reducción de conexión para obtener el mejor rendimiento y los mejores tiempos de respuesta. Para obtener ejemplos específicos sobre la reducción de conexión, consulta Cómo administrar conexiones de bases de datos.

Cómo conectar el entorno estándar de App Engine a Cloud SQL

El entorno flexible de App Engine proporciona un socket de dominio Unix para conectarse a las instancias de Cloud SQL. Estas conexiones se autorizan de forma automática mediante la cuenta de servicio predeterminada de App Engine.

El socket se encuentra en /cloudsql/INSTANCE_CONNECTION_NAME y la aplicación puede usarlo directamente. A continuación, se muestra un ejemplo de uso.

Python

# The SQLAlchemy engine will help manage interactions, including automatically
# managing a pool of connections to your database
db = sqlalchemy.create_engine(
    # Equivalent URL:
    # mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<cloud_sql_instance_name>
    sqlalchemy.engine.url.URL(
        drivername='mysql+pymysql',
        username=db_user,
        password=db_pass,
        database=db_name,
        query={
            'unix_socket': '/cloudsql/{}'.format(cloud_sql_instance_name)
        }
    ),
    # ... Specify additional properties here.
    # ...
)
Si quieres ver el fragmento anterior en el contexto de una aplicación, puedes encontrar el proyecto completo aquí.

Java

// The configuration object specifies behaviors for the connection pool.
HikariConfig config = new HikariConfig();

// Configure which instance and what database user to connect with.
config.setJdbcUrl(String.format("jdbc:mysql:///%s", DB_NAME));
config.setUsername(DB_USER); // e.g. "root", "postgres"
config.setPassword(DB_PASS); // e.g. "my-password"

// For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.mysql.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_INSTANCE_NAME);
config.addDataSourceProperty("useSSL", "false");

// ... Specify additional connection properties here.

// ...

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);
Si quieres ver el fragmento anterior en el contexto de una aplicación, puedes encontrar el proyecto completo aquí.

Cómo conectar el entorno flexible de App Engine a Cloud SQL

El entorno flexible de App Engine proporciona opciones de conexión seguras para las instancias de Cloud SQL mediante un socket de dominio Unix o una conexión TCP.

Socket de dominio Unix

Agrega lo siguiente al app.yaml de tu proyecto para habilitar el socket Unix proporcionado:
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME> 
Tu aplicación puede conectarse a la instancia de Cloud SQL con el socket Unix ubicado en /cloudsql/<INSTANCE_CONNECTION_NAME>.
Cuando te conectes a varias instancias de Cloud SQL, usa una lista de nombres de conexión de instancia separados por comas. Cada instancia creará un socket diferente que se deriva del nombre de conexión de la instancia.

Conexión TCP

Agrega lo siguiente al app.yaml de tu proyecto para habilitar el puerto TCP proporcionado:
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<TCP_PORT>
Tu aplicación puede conectarse a la instancia de Cloud SQL con el puerto TCP a la escucha en 127.0.0.1:<TCP_PORT>.
Cuando te conectes a varias instancias de Cloud SQL, usa una lista de nombres de conexión de instancia separados por comas. Cada instancia debe usar un puerto local diferente.

Información adicional

App Engine y Cloud SQL en diferentes proyectos

Para las aplicaciones de App Engine y las instancias de Cloud SQL en diferentes proyectos, debes otorgar a la cuenta de servicio appengine predeterminada ([PROJECT-ID]@appspot.gserviceaccount.com) una de las siguientes funciones de IAM:

  • Cloud SQL Client
  • Cloud SQL Editor
  • Cloud SQL Admin

Para obtener instrucciones detalladas sobre cómo agregar funciones de IAM a una cuenta de servicio, consulta Cómo otorgar funciones a cuentas de servicio.

Recomendaciones

Cuando te conectes a Cloud SQL desde App Engine, ten en cuenta estas recomendaciones:

  • App Engine puede crear de forma automática más instancias cuando aumenta la carga. Si el número de instancias de App Engine aumenta más de lo que la instancia de Cloud SQL puede manejar, tu instancia de Cloud SQL no podrá satisfacer la demanda. Puedes evitar este problema si limitas el número máximo de instancias de App Engine. Para obtener más información, consulta Elementos de escalamiento.

  • Las conexiones de base de datos consumen recursos. Tu aplicación deberá seguir las recomendaciones de la administración de conexiones para reducir la cantidad de conexiones necesarias. Para el entorno estándar de App Engine, hay un límite estricto en el número de conexiones a Cloud SQL que una instancia de App Engine puede tener abiertas.

Cómo conectar el entorno estándar de App Engine a la primera generación de Cloud SQL

Las instancias de Cloud SQL de primera generación solo admiten conexiones desde el entorno estándar de App Engine y requieren autorización. Para otorgar la autorización, sigue los siguientes pasos.

Console

  1. Ve a la página de las instancias de Cloud SQL en Google Cloud Platform Console.

    Ir a la página de las instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página de Detalles de la instancia.
  3. Selecciona la pestaña Conexiones.
  4. En la sección Aplicaciones autorizadas de App Engine estándar, haz clic en Agregar ID del proyecto y luego ingresa el ID del proyecto de la aplicación que quieres autorizar.
  5. Haz clic en Listo para salir del modo de edición.
  6. Haz clic en Guardar para actualizar la instancia.

gcloud

  1. Haz una lista de los proyectos existentes de App Engine autorizados para la instancia.
    gcloud sql instances describe [INSTANCE_NAME]
    
  2. Usa el comando sql instances patch para proporcionar el ID del proyecto de todas las aplicaciones que pueden acceder a esta instancia. Usa comas para separar múltiples ID.
    gcloud sql instances patch [INSTANCE_NAME] --authorized-gae-apps [GAE_APP_PROJECT_ID]
    

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Cloud SQL para MySQL