Se connecter depuis App Engine

Cette page contient des informations et des exemples de connexion à une instance Cloud SQL à partir d'une application App Engine.

Configurer Cloud SQL et App Engine

Pour en savoir plus sur la configuration d'une instance Cloud SQL ou d'une application App Engine, consultez les instructions suivantes :

  • Identifiez le nom de connexion à l'instance Cloud SQL. Il s'agit d'une chaîne unique pour chaque instance au format <PROJECT_ID>:<REGION>:<INSTANCE_ID>. Il est répertorié sous Nom de connexion de l'instance sur la page Détails de l'instance ou sous connectionName lorsque vous utilisez la commande gcloud sql instances describe <INSTANCE_ID>.

  • Assurez-vous que l'API d'administration Cloud SQL est activée pour le projet contenant l'instance Cloud SQL.

    Activer l'API.

Votre application doit utiliser le pooling de connexions pour optimiser les performances et les temps de réponse. Pour des exemples spécifiques de pooling de connexions, consultez la page Gérer les connexions à la base de données .

Connecter l'environnement standard App Engine à Cloud SQL

L'environnement standard App Engine fournit un socket de domaine Unix pour la connexion aux instances Cloud SQL. Ces connexions sont automatiquement autorisées à l'aide du compte de service App Engine par défaut.

Le socket se trouve dans /cloudsql/INSTANCE_CONNECTION_NAME et peut être utilisé directement par l'application. Un exemple d'utilisation se trouve ci-dessous.

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_connection_name)
        }
    ),
    # ... Specify additional properties here.
    # ...
)
Si vous souhaitez voir l'extrait ci-dessus dans le contexte d'une application, l'intégralité du projet est disponible ici.

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_CONNECTION_NAME);
config.addDataSourceProperty("useSSL", "false");

// ... Specify additional connection properties here.
// ...

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);
Si vous souhaitez voir l'extrait ci-dessus dans le contexte d'une application, l'intégralité du projet est disponible ici.

Connecter l'environnement flexible App Engine à Cloud SQL

L'environnement flexible App Engine fournit des options de connexion sécurisée aux instances Cloud SQL à l'aide d'un socket de domaine Unix ou d'une connexion TCP.

Socket de domaine Unix

Ajoutez les éléments suivants au fichier app.yaml de votre projet pour activer le socket Unix fourni :
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME> 
Votre application peut se connecter à l'instance Cloud SQL à l'aide du socket Unix situé dans /cloudsql/<INSTANCE_CONNECTION_NAME>.
Lors de la connexion à plusieurs instances Cloud SQL, utilisez une liste de noms de connexion d'instance séparés par des virgules. Chaque instance répertoriée créera un socket différent, dérivé du nom de connexion à l'instance.

Connexion TCP

Ajoutez les éléments suivants au fichier app.yaml de votre projet pour activer le port TCP spécifié :
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<TCP_PORT>
Votre application peut se connecter à l'instance Cloud SQL à l'aide du port TCP à l'écoute sur 127.0.0.1:<TCP_PORT>.
Lorsque vous vous connectez à plusieurs instances Cloud SQL, utilisez une liste de noms de connexion d'instance séparés par des virgules. Chaque instance doit utiliser un port local différent.

Informations supplémentaires

App Engine et Cloud SQL dans des projets différents

Dans le cas d'applications App Engine et d'instances Cloud SQL dans des projets différents, vous devez attribuer au compte de service App Engine par défaut ([PROJECT-ID]@appspot.gserviceaccount.com) l'un des rôles IAM suivants :

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

Pour obtenir des instructions détaillées sur l'ajout de rôles IAM à un compte de service, consultez la page Attribuer des rôles aux comptes de service.

Bonnes pratiques

Lorsque vous vous connectez à Cloud SQL depuis App Engine, tenez compte des bonnes pratiques suivantes :

  • App Engine peut créer automatiquement des instances supplémentaires lorsque la charge augmente. Si le nombre d'instances App Engine devient trop élevé pour être traité par l'instance Cloud SQL, cette dernière n'est plus en mesure de répondre à la demande. Vous pouvez éviter ce problème en limitant le nombre maximal d'instances App Engine. Pour plus d'informations, consultez la section Scaling d'éléments.

  • Les connexions aux bases de données consomment des ressources. Votre application doit donc appliquer les bonnes pratiques de gestion des connexions afin de réduire le nombre de connexions nécessaires. Pour l'environnement standard App Engine, il existe une limite stricte quant au nombre de connexions à Cloud SQL qu'une instance App Engine peut ouvrir.

Connecter l'environnement standard App Engine au service Cloud SQL de première génération

Les instances Cloud SQL de première génération n'acceptent que les connexions depuis l'environnement standard App Engine et nécessitent une autorisation. Pour accorder une autorisation, suivez les étapes ci-dessous.

Console

  1. Accédez à la page "Instances Cloud SQL" de la console Google Cloud Platform.

    Accéder à la page "Instances Cloud SQL"

  2. Cliquez sur le nom d'une instance pour ouvrir la page Détails de l'instance correspondante.
  3. Sélectionnez l'onglet Connexions.
  4. Dans la section Applications App Engine Standard autorisées, cliquez sur Ajouter un ID de projet et saisissez l'ID de projet de l'application que vous souhaitez autoriser.
  5. Cliquez sur Terminé pour quitter le mode d'édition.
  6. Cliquez sur Enregistrer pour mettre l'instance à jour.

gcloud

  1. Répertoriez les projets App Engine autorisés existants pour l'instance.
    gcloud sql instances describe [INSTANCE_NAME]
    
  2. Utilisez la commande sql instances patch pour fournir l'ID de projet à toutes les applications pouvant accéder à cette instance. Utilisez des virgules pour séparer plusieurs identifiants.
    gcloud sql instances patch [INSTANCE_NAME] --authorized-gae-apps [GAE_APP_PROJECT_ID]
    

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Cloud SQL pour MySQL