Guide de démarrage rapide pour l'utilisation de Cloud SQL avec Cloud Functions

Cette page explique comment se connecter à Cloud SQL à l'aide de Cloud Functions.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

Configuration requise pour le projet :

  • Le nom de la charge de travail doit contenir entre 4 et 30 caractères.
  • Lorsque vous saisissez ce nom, le formulaire suggère un ID de projet, que vous pouvez modifier.
  • L'ID du projet doit contenir entre 6 et 30 caractères, et commencer par une lettre minuscule.
  • Vous pouvez utiliser un tiret, une lettre minuscule ou un chiffre pour chacun des autres caractères, mais le dernier caractère ne peut pas être un tiret.

Créer une instance

Dans cette procédure, vous utilisez Cloud Console. Pour utiliser gcloud ou cURL, consultez la page Créer des instances.

  1. Accédez à la page "Instances Cloud SQL" dans Google Cloud Console.

    Accéder à la page Instances Cloud SQL

  2. Sélectionnez votre projet et cliquez sur Continuer.

  3. Cliquez sur Créer une instance.

  4. Cliquez sur PostgreSQL.

  5. Dans le champ ID d'instance, saisissez myinstance.

  6. Indiquez le mot de passe de l'utilisateur postgres.

  7. Utilisez les valeurs par défaut dans les autres champs.

  8. Cliquez sur Créer.

    Vous êtes redirigé vers la liste des instances. Vous pouvez cliquer directement sur la nouvelle instance pour en afficher les détails, mais elle ne sera disponible qu'une fois initialisée et démarrée.

Se connecter à l'instance à l'aide du client psql dans Cloud Shell

  1. Dans Google Cloud Console, cliquez sur l'icône Cloud Shell (Icône Cloud Shell) dans l'angle supérieur droit.

    Une fois l'initialisation de Cloud Shell terminée, le message suivant s'affiche :

    Welcome to Cloud Shell! Type "help" to get started.
    username@example-id:~$
    

  2. Lorsque l'invite Cloud Shell s'affiche, connectez-vous à votre instance Cloud SQL :

    gcloud sql connect myinstance --user=postgres
    
  3. Saisissez votre mot de passe postgres.

    L'invite psql apparaît.

Créer une base de données et importer des données

  1. Créez une base de données SQL sur votre instance Cloud SQL :
    CREATE DATABASE guestbook;
    
  2. Connectez-vous à la base de données.
    \connect guestbook;
    
  3. Insérez des échantillons de données dans la base de données :
    CREATE TABLE entries (guestName VARCHAR(255), content VARCHAR(255),
                            entryID SERIAL PRIMARY KEY);
    INSERT INTO entries (guestName, content) values ('first guest', 'I got here!');
    INSERT INTO entries (guestName, content) values ('second guest', 'Me too!');
    
  4. Récupérez les données :
    SELECT * FROM entries;
    
    Vous obtenez le résultat suivant :
      guestname   |   content   | entryid
    --------------+-------------+---------
     first guest  | I got here! |       1
     second guest | Me too!     |       2
    (2 rows)
    postgres=>
    

Obtenir le nom de connexion de l'instance

  1. Accédez à la page "Instances Cloud SQL" dans Google Cloud Console.

    Accéder à la page Instances Cloud SQL

  2. Cliquez sur le nom de l'instance pour ouvrir la page Détails de l'instance.

  3. Dans Se connecter à cette instance, notez le nom de connexion de l'instance.

Activer l'API Cloud SQL Admin

Activer l'API

Configurer des comptes de service pour Cloud Functions

Pour configurer Cloud Functions afin d'activer les connexions à une instance Cloud SQL, procédez comme suit :

  • Assurez-vous que l'instance créée ci-dessus possède une adresse IP publique. Vous pouvez le vérifier sur la page Présentation de votre instance dans Google Cloud Console. Si vous devez en ajouter une, consultez la page Configurer une adresse IP publique pour obtenir des instructions.
  • Obtenez le INSTANCE_CONNECTION_NAME pour votre instance. Vous le trouverez sur la page Présentation de votre instance dans Google Cloud Console ou en exécutant la commande suivante : gcloud sql instances describe [INSTANCE_NAME].
  • Assurez-vous que le compte de service utilisé par votre fonction pour authentifier les appels à Cloud SQL dispose des rôles et autorisations Cloud SQL appropriés.
    • Le compte de service de votre service doit disposer de l'un des rôles IAM suivants :
      • Cloud SQL Client (rôle à privilégier)
      • Cloud SQL Editor
      • Cloud SQL Admin
      Vous pouvez également attribuer manuellement les autorisations IAM suivantes :
      • cloudsql.instances.connect
      • cloudsql.instances.get
      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.

    Par défaut, votre application autorise vos connexions à l'aide du compte de service Cloud Functions. Le compte de service est au format service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com.

    Si le compte de service autorisé appartient à un autre projet que celui de l'instance Cloud SQL, vous devez ajouter l'API Cloud SQL Admin et les autorisations IAM aux deux projets.

Cloud Functions utilise un compte de service pour autoriser vos connexions à Cloud SQL. Ce compte de service doit disposer des autorisations IAM correctes pour que la connexion aboutisse. Sauf indication contraire, le compte de service par défaut est au format service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com.

Vous pouvez vérifier si d'autres applications ou clients peuvent se connecter à votre instance Cloud SQL. Pour en savoir plus, consultez la section Options d'authentification afin de déterminer qui est autorisé à se connecter à votre instance et à partir d'où.

Lorsque vous connectez des ressources de deux projets différents, assurez-vous que ceux-ci ont activé les rôles IAM corrects et accordé les autorisations appropriées au compte de service.

Vérifiez que le compte de service de votre service dispose de l'un des rôles IAM suivants :

  • Cloud SQL Client (rôle à privilégier)
  • Cloud SQL Editor
  • Cloud SQL Admin

Vous pouvez également attribuer manuellement les autorisations IAM suivantes :

  • cloudsql.instances.connect
  • cloudsql.instances.get

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.

Préparer le code

Vous trouverez ci-dessous la totalité du code Cloud Functions dont vous avez besoin pour vous connecter à une base de données Cloud SQL. Certaines valeurs de variables dépendent des informations de votre propre base de données.

Ce guide de démarrage rapide utilise Python 3.7 ou version ultérieure.

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'interface utilisateur.

Les paramètres du fichier requirements.txt indiquent à Python les modules qu'il doit importer :

SQLAlchemy==1.3.12

pg8000==1.13.2

Le fichier main.py contient tout le code utilisé dans ce guide de démarrage rapide :

import sqlalchemy

# Set the following variables depending on your specific
# connection name and root password from the earlier steps:
connection_name = "[INSTANCE_CONNECTION_NAME]"
db_password = "[DATABASE_USER_PASSWORD]"
db_name = "guestbook"

db_user = "postgres"
driver_name = 'postgres+pg8000'
query_string = dict({"unix_sock": "/cloudsql/{}/.s.PGSQL.5432".format(connection_name)})

def insert(request):
    request_json = request.get_json()
    stmt = sqlalchemy.text('INSERT INTO entries (guestName, content) values ("third guest", "Also this one");')
    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'

Créer la fonction

  1. Dans le navigateur, accédez à l'UI de la console.

  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 se présente 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, supprimez le contenu existant pour requirements.txt et main.py, puis remplacez-le 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.

Tester la fonction

  1. Dans le navigateur, accédez à l'UI de la console.

  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 suivant s'affiche : ok. Si le test échoue, une trace de la 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. Le résultat ok apparaît également dans le navigateur.

Nettoyer

Pour éviter que les ressources utilisées dans ce guide démarrage rapide soient facturées sur votre compte Google Cloud :

  1. Accédez à la page "Instances Cloud SQL" dans Google Cloud Console.
    Accéder à la page "Instances Cloud SQL"
  2. Sélectionnez l'instance myinstance pour ouvrir la page Détails de l'instance.
  3. Dans la barre d'icônes en haut de la page, cliquez sur Supprimer.
  4. Dans la fenêtre Supprimer l'instance, saisissez myinstance, puis cliquez sur Supprimer pour supprimer l'instance.

    Vous ne pouvez pas réutiliser le nom d'une instance pendant environ sept jours après la suppression de cette instance.

Étape suivante