Utiliser Cloud SQL

Cette page explique comment se connecter à une instance Cloud SQL pour MySQL de deuxième génération à partir d'une application App Engine, et comment lire et écrire dans Cloud SQL. Cloud SQL est une base de données SQL qui réside dans le cloud de Google.

Pour en savoir plus sur Cloud SQL, consultez la documentation. Pour en savoir plus sur les tarifs et limites appliqués à Cloud SQL, consultez la page Tarifs de Cloud SQL. Les applications App Engine sont également soumises à des quotas.

Avant de commencer

  1. Créez ou sélectionnez un projet GCP dans la console GCP, puis assurez-vous que le projet inclut une application App Engine et que la facturation est activée :
    Accéder à App Engine

    Le tableau de bord s'affiche si une application App Engine existe déjà dans votre projet et si la facturation est activée. Sinon, suivez les instructions permettant de choisir une région et d'activer la facturation.

  2. Activez Cloud SQLl'API requise.

    Activer l'API.

  3. Pour déployer votre application avec l'outil gcloud, vous devez télécharger, installer et initialiser le SDK Cloud :
    Télécharger le SDK

Configurer l'instance Cloud SQL

Pour créer et configurer une instance Cloud SQL :

  1. Créez une instance Cloud SQL de deuxième génération.
  2. Si ce n'est pas déjà fait, définissez le mot de passe de l'utilisateur par défaut sur votre instance Cloud SQL :
    gcloud sql users set-password root --host=% --instance [INSTANCE_NAME] --password [PASSWORD]
    
  3. Si vous ne souhaitez pas utiliser l'utilisateur par défaut pour vous connecter, créez un utilisateur.
  4. Enregistrez le nom de connexion de l'instance :
    gcloud sql instances describe [INSTANCE_NAME]
    

    Exemple :

    connectionName: project1:us-central1:instance1
    

    Vous pouvez également trouver cette valeur sur la page Détails de l'instance de la console Google Cloud Platform.

  5. Créez une base de données sur votre instance Cloud SQL :
    gcloud sql databases create [DATABASE_NAME] --instance=[INSTANCE_NAME]
    
    Pour en savoir plus sur la création et la gestion de bases de données, consultez la documentation Cloud SQL.

Configurer votre environnement local

Une fois déployée, votre application communique avec l'instance Cloud SQL via le proxy Cloud SQL intégré à l'environnement d'exécution App Engine. Notez toutefois que, pour tester votre application en local, vous devez installer et utiliser une copie locale du proxy Cloud SQL dans votre environnement de développement.

Pour effectuer des tâches administratives de base sur votre instance Cloud SQL, vous pouvez utiliser le client d'administration de la base de données ou la console GCP.

  1. Authentifiez l'outil gcloud pour pouvoir vous connecter à partir de votre machine locale via le proxy :

    gcloud auth application-default login
    
  2. Installez le proxy Cloud SQL :

    Linux 64 bits

    1. Téléchargez le proxy :
      wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
      
    2. Rendez le proxy exécutable :
      chmod +x cloud_sql_proxy
      

    Linux 32 bits

    1. Téléchargez le proxy :
      wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
      
    2. Rendez le proxy exécutable :
      chmod +x cloud_sql_proxy
      

    macOS 64 bits

    1. Téléchargez le proxy :
      curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
      
    2. Rendez le proxy exécutable :
      chmod +x cloud_sql_proxy
      

    macOS 32 bits

    1. Téléchargez le proxy :
      curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
      
    2. Rendez le proxy exécutable :
      chmod +x cloud_sql_proxy
      

    Windows 64 bits

    Pour télécharger le proxy, effectuez un clic droit sur https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe, puis sélectionnez Enregistrer le lien sous. Renommez le fichier en cloud_sql_proxy.exe.

    Windows 32 bits

    Pour télécharger le proxy, effectuez un clic droit sur https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe, puis sélectionnez Enregistrer le lien sous. Renommez le fichier en cloud_sql_proxy.exe.
    Si votre système d'exploitation n'apparaît pas ici, vous pouvez également compiler le proxy à partir de la source.
  3. Exécutez le proxy :

    Selon le langage et l'environnement que vous employez, vous pouvez démarrer le proxy à l'aide de sockets TCP ou Unix.

    Sockets TCP

    1. Copiez le nom de connexion de l'instance depuis la page Détails de l'instance.

      Par exemple : myproject:us-central1:myinstance.

    2. Si vous utilisez un compte de service pour authentifier le proxy, notez l'emplacement sur votre machine cliente du fichier de clé privée généré au moment de la création du compte de service.
    3. Démarrez le proxy.

      Voici des exemples de chaînes d'appel du proxy :

      • Avec l'authentification via le SDK Cloud :
        ./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306
        
        Le port spécifié ne doit pas déjà être utilisé, par exemple par un serveur de base de données local.
      • Avec un compte de service et une spécification explicite d'instance (recommandé pour les environnements de production) :
        ./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306 \
                          -credential_file=<PATH_TO_KEY_FILE> &
        

      Pour en savoir plus sur les options de proxy, consultez les sections Options d'authentification du proxy et Options de spécification d'instances.

    Sockets Unix

    1. Si vous utilisez une spécification explicite d'instance, copiez le nom de connexion de l'instance depuis la page Détails de l'instance.
    2. Créez le répertoire où résideront les sockets du proxy :
      sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
    3. Si vous utilisez un compte de service pour authentifier le proxy, notez l'emplacement sur votre machine cliente du fichier de clé privée généré au moment de la création du compte de service.
    4. Ouvrez une nouvelle fenêtre de terminal et démarrez le proxy.

      Voici des exemples de chaînes d'appel du proxy :

      • Avec un compte de service et une spécification explicite d'instances (recommandé pour les environnements de production) :
        ./cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE_CONNECTION_NAME> \
                          -credential_file=<PATH_TO_KEY_FILE> &
      • Avec l'authentification via le SDK Cloud et la détection automatique d'instances :
        ./cloud_sql_proxy -dir=/cloudsql &

      Nous vous recommandons de démarrer le proxy dans son propre terminal, afin de pouvoir surveiller sa sortie sans qu'elle ne soit mélangée avec celle d'autres programmes.

      Pour en savoir plus sur les options de proxy, consultez les sections Options d'authentification du proxy et Options de spécification d'instances.

  4. Pour utiliser le client d'administration, vous pouvez installer une copie locale et vous connecter via le proxy ou via une adresse IP.

    Pour en savoir plus, consultez les pages Connecter un client MySQL à l'aide du proxy Cloud SQL et Connecter un client MySQL à l'aide d'adresses IP.

Définir des chaînes de connexion et ajouter une bibliothèque

  1. Configurez l'environnement local afin qu'il accepte les connexions pour les tests locaux.

    Dans le cas de l'exemple de code fourni :

    export MYSQL_USER=[YOUR_USER]
    export MYSQL_PASSWORD=[YOUR_PASSWORD]
    export MYSQL_DATABASE=[YOUR_DATABASE]
    export MYSQL_SOCKET_PATH=/cloudsql/[YOUR_INSTANCE_CONNECTION_NAME]
    
  2. Une fois votre application déployée, pour qu'elle puisse se connecter à l'instance Cloud SQL, vous devez ajouter les variables "user", "password", "database" et "instance_connection_name" de Cloud SQL aux variables d'environnement associées dans le fichier app.yaml :

    env_variables:
      MYSQL_USER: [YOUR_USER]
      MYSQL_PASSWORD: [YOUR_PASSWORD]
      MYSQL_DATABASE: [YOUR_DATABASE]
      MYSQL_SOCKET_PATH: /cloudsql/[YOUR_INSTANCE_CONNECTION_NAME]

  3. Ajoutez la section beta_settings au fichier app.yaml, en utilisant le nom de connexion de l'instance Cloud SQL.

    beta_settings:
      cloud_sql_instances: [YOUR_INSTANCE_CONNECTION_NAME]
  4. Ajoutez une bibliothèque cliente MySQL Ruby au fichier Gemfile de votre application. L'exemple de code fourni utilise Sequel avec Mysql2 comme pilote :

    source "https://rubygems.org"
    
    gem "mysql2"
    gem "sequel"
  5. Installez les dépendances de l'application :

    bundle install
    

    Pour en savoir plus sur Bundler, consultez la page Utiliser les bibliothèques Ruby.

Exécuter l'exemple de code

L'exemple de code app.rb présenté ci-dessous utilise le framework Sinatra pour créer un journal des visiteurs dans une instance Cloud SQL. Il utilise également Sequel, qui gère le regroupement et l'interrogation des connexions.

Avant d'exécuter cet exemple de code, créez les tables dont vous avez besoin et assurez-vous que la base de données est correctement configurée :

bundle exec ruby create_tables.rb
L'exemple suivant écrit les informations de visite dans Cloud SQL, puis lit et renvoie les dix dernières visites :
require "digest/sha2"
require "sinatra"
require "sequel"

DB = Sequel.mysql2 user:     ENV["MYSQL_USER"],
                   password: ENV["MYSQL_PASSWORD"],
                   database: ENV["MYSQL_DATABASE"],
                   socket:   ENV["MYSQL_SOCKET_PATH"]

get "/" do
  # Store a hash of the visitor's ip address
  visitor_ip = Digest::SHA256.hexdigest request.ip

  # Save visit in database
  DB[:visits].insert user_ip: visitor_ip, timestamp: Time.now

  # Retrieve the latest 10 visit records from the database
  visits = DB[:visits].limit(10).order Sequel.desc(:timestamp)

  response.write "Last 10 visits:\n"

  visits.each do |visit|
    response.write "Time: #{visit[:timestamp]} Addr: #{visit[:user_ip]}\n"
  end

  content_type "text/plain"
  status 200
end

Tester et déployer

  1. Pour tester votre application en local, procédez comme suit :

    bundle exec ruby app.rb
    
  2. Une fois les tests effectués en local, déployez votre application sur App Engine :

    gcloud app deploy
    

  3. Pour lancer le navigateur et afficher l'application sur http://[YOUR_PROJECT_ID].appspot.com, exécutez la commande suivante :

    gcloud app browse
    

Exécuter Cloud SQL et App Engine dans des projets distincts

Si votre application App Engine et votre instance Cloud SQL se trouvent dans des projets Google Cloud Platform distincts, vous devez utiliser un compte de service pour permettre à votre application App Engine d'accéder à Cloud SQL.

Ce compte de service représente votre application App Engine, et il est créé par défaut lorsque vous créez un projet Google Cloud Platform.

  1. Si votre application App Engine se trouve dans le même projet que votre instance Cloud SQL, vous pouvez ignorer cette section et passer à l'étape Configurer votre environnement local. Sinon, passez à l'étape suivante.
  2. Identifiez le compte de service associé à votre application App Engine. Le compte de service App Engine par défaut est nommé [PROJECT-ID]@appspot.gserviceaccount.com.

    Vous pouvez vérifier le compte de service App Engine sur la page Autorisations IAM. Assurez-vous de sélectionner le projet de votre application App Engine, et non votre instance Cloud SQL.

    Accéder à la page "Autorisations IAM"

  3. Accédez à la section des projets de la page IAM et administration dans la console Google Cloud Platform.

    Accéder à la section des projets de la page "IAM et administration"

  4. Sélectionnez le projet contenant l'instance Cloud SQL.
  5. Recherchez le nom du compte de service.
  6. Si le compte de service existe déjà et que le rôle qui lui est associé inclut l'autorisation cloudsql.instances.connect, vous pouvez passer à l'étape Configurer votre environnement local.

    Les rôles Cloud SQL Client, Cloud SQL Editor et Cloud SQL Admin accordent toutes les autorisations nécessaires, de même que les anciens rôles de projet Editor et Owner.

  7. Sinon, ajoutez le compte de service en cliquant sur Ajouter.
  8. Dans la boîte de dialogue Ajouter des membres, indiquez le nom du compte de service et sélectionnez un rôle qui inclut l'autorisation cloudsql.instances.connect (n'importe quel rôle Cloud SQL prédéfini peut être utilisé, à l'exception du rôle "Lecteur").

    Vous pouvez également utiliser le rôle primitif "Éditeur" en sélectionnant Projet > Éditeur. Sachez toutefois que ce rôle dispose d'autorisations pour les différents services Google Cloud Platform.

    Si vous ne voyez pas ces rôles, il est possible que votre utilisateur Google Cloud Platform ne dispose pas de l'autorisation resourcemanager.projects.setIamPolicy. Pour vérifier vos autorisations, accédez à la page IAM de la console Google Cloud Platform et recherchez votre ID utilisateur.

  9. Cliquez sur Ajouter.

    Le compte de service répertorié avec le rôle spécifié doit maintenant s'afficher.

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

Envoyer des commentaires concernant…

Environnement flexible App Engine pour les documents Ruby