Se connecter à Cloud SQL avec Cloud Functions

Dernière mise à jour : 17/06/2020

Qu'est-ce que Cloud SQL ?

Cloud SQL est un service de base de données entièrement géré qui facilite la configuration, la maintenance, la gestion et l'administration de vos bases de données relationnelles sur Google Cloud Platform.

Qu'est-ce que Cloud Functions ?

Cloud Functions est une solution de calcul légère permettant aux développeurs de créer des fonctions autonomes à usage spécifique qui répondent aux événements Cloud sans avoir à gérer de serveur ni d'environnement d'exécution.

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez écrire une fonction Cloud en Python. Cette fonction :

  • se connecte à une instance de base de données Cloud SQL ;
  • envoie une instruction d'insertion à une table de la base de données.

Points abordés

  • Accéder à l'UI Web de Cloud Functions dans Google Cloud Console
  • Créer une fonction Cloud
  • Tester une fonction Cloud
  • Se connecter à une instance de base de données Cloud SQL (MySQL ou PostgreSQL) à l'aide de Python
  • Écrire dans une base de données Cloud SQL à l'aide de Python
  • Un navigateur (Chrome ou Firefox, par exemple)
  • Un projet Google Cloud Platform contenant votre instance Cloud SQL.
  • Si vous n'en possédez pas déjà un, consultez ce tutoriel. Suivez toute la procédure, à l'exception de l'étape de suppression de l'instance.
  • Votre instance contient une base de données MySQL ou PostgreSQL avec une table.
  • Nom de connexion à l'instance, noms de la base de données et de la table, nom d'utilisateur de la base de données et mot de passe de l'utilisateur
  • Un compte de service avec le rôle Client Cloud SQL

Le code de la fonction Cloud permettant de se connecter à une base de données Cloud SQL est indiqué ici. Certaines valeurs de variables varient selon que votre base de données Cloud SQL est MySQL ou PostgreSQL, et dépendent des informations de votre propre base de données.

L'interface utilisateur de Cloud Functions dans Cloud Console inclut un éditeur de texte. Vous pouvez copier-coller le code et le modifier dans l'éditeur de texte, ou modifier d'abord le code localement puis le copier-coller dans l'UI.

requirements.txt

# This file tells Python which modules it needs to import
SQLAlchemy==1.3.12
# If your database is MySQL, uncomment the following line:
#PyMySQL==0.9.3
# If your database is PostgreSQL, uncomment the following line:
#pg8000==1.13.2

main.py

# This file contains all the code used in the codelab.
import sqlalchemy

# Depending on which database you are using, you'll set some variables differently.
# In this code we are inserting only one field with one value.
# Feel free to change the insert statement as needed for your own table's requirements.

# Uncomment and set the following variables depending on your specific instance and database:
#connection_name = ""
#table_name = ""
#table_field = ""
#table_field_value = ""
#db_name = ""
#db_user = ""
#db_password = ""

# If your database is MySQL, uncomment the following two lines:
#driver_name = 'mysql+pymysql'
#query_string = dict({"unix_socket": "/cloudsql/{}".format(connection_name)})

# If your database is PostgreSQL, uncomment the following two lines:
#driver_name = 'postgres+pg8000'
#query_string =  dict({"unix_sock": "/cloudsql/{}/.s.PGSQL.5432".format(connection_name)})

# If the type of your table_field value is a string, surround it with double quotes.

def insert(request):
    request_json = request.get_json()
    stmt = sqlalchemy.text('insert into table_name (table_field) values (table_field_value)')

    db = sqlalchemy.create_engine(
      sqlalchemy.engine.url.URL(
        drivername=driver_name,
        username=db_user,
        password=db_password,
        database=db_name,
        query=query_string,
      ),
      pool_size=5,
      max_overflow=2,
      pool_timeout=30,
      pool_recycle=1800
    )
    try:
        with db.connect() as conn:
            conn.execute(stmt)
    except Exception as e:
        return 'Error: {}'.format(str(e))
    return 'ok'
  1. Dans un navigateur, accédez à l'UI de la console Google Cloud Platform.
  2. Dans le menu de navigation, sélectionnez Cloud Functions.
  3. Dans la barre de boutons, cliquez sur Créer une fonction.
  4. Saisissez un nom pour la fonction.
  5. Sélectionnez le déclencheur HTTP. Notez l'URL affichée sous le déclencheur. Elle est au format suivant : https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME.
  6. Pour l'option de code source, sélectionnez l'option Éditeur intégré.
  7. Pour l'option d'environnement d'exécution, sélectionnez Python 3.7.
  8. Dans les fenêtres de l'éditeur de code source, supprimez le contenu existant des fichiers requirements.txt et main.py, puis remplacez-les par les versions modifiées du code ci-dessus.
  9. Saisissez insert comme nom de la fonction à exécuter.
  10. Dans les Options avancées, sélectionnez un compte de service doté du rôle Client Cloud SQL.
  11. Cliquez sur Créer, puis attendez que l'icône de chargement s'arrête. Une coche verte s'affiche lorsque la fonction est prête à être utilisée.
  1. Dans un navigateur, accédez à l'UI de la console Google Cloud Platform.
  2. Dans le menu de navigation, sélectionnez Cloud Functions.
  3. Cliquez sur le nom de la fonction que vous avez créée précédemment.
  4. Sélectionnez le lien Test au milieu de la page.
  5. Sélectionnez Tester la fonction.
  6. Le résultat doit s'afficher comme suit : ok. Si le test échoue, une trace de pile s'affiche pour faciliter le débogage.
  7. Dans le navigateur, accédez à l'URL que vous avez enregistrée lors de la création de la fonction.
  8. Le résultat ok doit également apparaître dans le navigateur.

Félicitations ! Vous venez de créer une fonction Cloud qui fonctionne avec Cloud SQL.

Pour être plus précis, vous avez créé une fonction Cloud qui se connecte à une instance de base de données Cloud SQL et écrit dessus.

Découvrez quelques-uns des ateliers de programmation...

Documentation complémentaire

Documents de référence