1. Introduction
Dernière mise à jour : 06/05/2021
Réfléchir à la connexion
Il existe de nombreux types d'applications et de frameworks. Dans cet atelier de programmation, nous allons voir comment se connecter à Cloud SQL depuis une application exécutée sur une machine virtuelle gérée dans Google Compute Engine via une adresse IP privée interne à l'aide du proxy Cloud SQL. Il s'agit d'un moyen extrêmement sécurisé d'exécuter une application avec état dans le cloud. Vous minimisez votre exposition à Internet en limitant l'utilisation à une adresse IP privée et en utilisant le proxy SQL, qui gère la connectivité SSL pour vous.
Un cas d'utilisation courant serait, par exemple, une application sur site qui a été transférée pour s'exécuter dans le cloud au lieu de localement.
Objectifs de l'atelier
Cet atelier de programmation est très minimaliste. L'idée est de vous présenter les bases de la partie connexion, sans trop réfléchir à l'application elle-même. Dans un monde idéal, la connexion à Cloud SQL est identique à celle de toute autre instance de base de données SQL. Vous devriez donc pouvoir appliquer ce que vous créez dans cet atelier de programmation à n'importe quelle application de production.
Les instructions incluront une procédure pas à pas pour effectuer des opérations dans la console GCP, ainsi que les commandes gcloud équivalentes à utiliser dans la CLI ou pour l'automatisation.
Voici les étapes à suivre :
- Créer un compte de service minimal pour permettre la connexion à l'instance Cloud SQL
- Créer une VM sur Google Compute Engine (GCE)
- Créez une instance Cloud SQL (ce tutoriel utilise Postgres, mais la procédure est similaire pour MySQL ou SQL Server).
- Télécharger et exécuter le proxy Cloud SQL sur l'instance GCE
Prérequis
- Un compte GCP sur lequel vous êtes autorisé à activer des API et à créer des services
2. Créer un compte de service
Les comptes de service permettent d'accorder des autorisations afin d'utiliser différents services dans votre projet GCP. Pour cet atelier de programmation, nous en aurons besoin pour accorder au proxy Cloud SQL l'autorisation de se connecter à l'instance Cloud SQL.
Dans la console
Accédez à la page Comptes de service IAM puis cliquez sur le bouton
en haut de la page.
Attribuez un nom et un identifiant uniques à votre compte de service, puis cliquez sur CRÉER.
Sur la page suivante, cliquez sur le menu déroulant "Sélectionner un rôle". Filtrez sur "Cloud SQL" et sélectionnez le rôle "Client Cloud SQL". Cliquez sur CONTINUER.
Cliquez sur "DONE" (Terminé).
Utiliser gcloud
Créez le compte de service :
gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"
Le compte de service est créé, mais aucun rôle ni aucune autorisation ne lui sont attribués pour le moment. Pour attribuer le rôle approprié, exécutez la commande suivante :
gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client
Par exemple, si votre compte de service s'appelle sa-test et que votre projet est my-project-test, la commande sera la suivante :
gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com
3. Créer la VM Compute Engine
Google Compute Engine est le service géré sur lequel la machine virtuelle exécutera l'application à partir de laquelle nous souhaitons nous connecter. Dans cet atelier de programmation, nous ne créerons pas d'application, mais nous confirmerons la connectivité en exécutant psql.
Dans la console
Accédez à la page Google Compute Engine, puis cliquez sur le bouton
.
De nombreuses options s'offrent à vous. Il vous suffit de faire ce qui suit :
- Donnez un nom à votre instance.
- Remplacez
Machine typeparf1-micro - Sous "Identité et accès à l'API", remplacez le menu déroulant de
Service accountpar celui que vous avez créé à l'étape précédente.Default compute service account - Cliquez sur "Créer" tout en bas de la page.
Utiliser gcloud
Le compte de service correspond au nom complet du compte de service que vous avez créé précédemment. Il se présente donc au format <NAME>@<PROJECT>.iam.gserviceaccount.com.
gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list
4. Créer l'instance Cloud SQL
Cloud SQL est notre offre de bases de données relationnelles gérées. Il prend en charge MySQL, PostgreSQL et SQL Server. Pour cet atelier de programmation, nous allons créer une base de données Postgres, mais les instructions sont similaires pour les trois.
Dans la console
Accédez à la page Cloud SQL, puis cliquez sur le bouton
.
Comme je l'ai mentionné, la plupart de cet atelier de programmation est générique à n'importe quelle variante SQL, mais pour cet atelier de programmation, choisissez PostgreSQL.
- Attribuez un ID à votre instance.
- Saisissez un mot de passe pour l'utilisateur par défaut (le nom d'utilisateur sera celui par défaut pour la base de données sélectionnée, par exemple
rootpour MySQL oupostgrespour PostgreSQL). - Si vous avez modifié la région de votre instance de calcul, vous devez également la modifier ici pour qu'elle corresponde.
- Faites défiler la page vers le bas, puis cliquez sur
show configuration options. - Développer la section
Connectivity - Décochez l'option
Public IPet cochez la casePrivate IP. - Assurez-vous que
defaultest sélectionné dans le menu déroulant qui s'affiche lorsque l'adresse IP privée est cochée. - Faites défiler la page vers le bas, puis cliquez sur "Créer".
Le démarrage de l'instance prend généralement quelques minutes.
Utiliser gcloud
Comme nous n'avons pas d'invites intéressantes pour activer les API à partir d'ici, nous devrons le faire manuellement.
gcloud services enable servicenetworking.googleapis.com
Ensuite, nous devons activer la connectivité de service privée sur notre réseau VPC par défaut. La première étape consiste à allouer une plage d'adresses IP nommée à utiliser pour notre instance.
gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default
Ensuite, nous allons attribuer cette plage d'adresses IP à nos services internes (cela prend environ une minute).
gcloud services vpc-peerings update --service=servicenetworking.googleapis.com --network=default --project=<PROJECT ID> --ranges=sql-codelab-allocation --force
Enfin, la création de l'instance elle-même n'est actuellement disponible qu'avec la version bêta. La combinaison de --no-assign-ip et --network=default permet la connectivité IP privée. Pour le moment, il n'est pas possible d'activer à la fois les adresses IP privées et publiques. Si vous avez besoin d'un accès public, vous devrez modifier l'instance après sa création. Cette opération prend quelques minutes.
gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>
5. Configurer et exécuter le proxy Cloud SQL
Une fois connecté à la VM, nous aurons besoin d'une chaîne de connexion à l'instance. Nous allons d'abord récupérer cette adresse, puis nous connecter à la VM elle-même via SSH. Les instructions pour ces éléments se trouveront dans les sections respectives pour la console et gcloud, puis le reste sera constitué de commandes exécutées à partir du shell sur la VM dans sa propre section.
Dans la console
Cliquez ici, puis sur le nom de votre instance Cloud SQL.
Faites défiler la page vers le bas et copiez Connection name quelque part pour l'utiliser plus tard.
Accédez à la page de la liste des instances Google Compute Engine, puis recherchez la ligne correspondant à votre VM.
Dans la colonne Connect, cliquez sur le bouton SSH. Une fenêtre distincte s'ouvre et se connecte de manière sécurisée à la machine virtuelle.
Passez la section Using gcloud pour le reste des instructions, car elles sont les mêmes pour les deux.
Utiliser gcloud
Remplacez <INSTANCE NAME> par le nom de votre instance Cloud SQL :
gcloud sql instances describe <INSTANCE NAME> | grep connectionName
Enregistrez le nom de connexion de l'instance pour l'utiliser ultérieurement.
Vous devrez remplacer <ZONE> par la zone utilisée lors de la création de l'instance. Si vous ne l'avez pas modifiée, elle a été définie sur us-central1-b. Remplacez également <INSTANCE_NAME> par le nom que vous avez spécifié précédemment.
gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>
Une fois connecté à la VM
Tout d'abord, nous devons télécharger le proxy. Cela dépend de votre système d'exploitation. Si vous n'avez pas modifié l'OS lors de la création de la VM, il s'agit de Linux. Vous pouvez alors utiliser :
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy
Si vous avez changé de système d'exploitation, cliquez ici pour obtenir la commande appropriée permettant d'obtenir le proxy pour votre OS.
Pour exécuter le proxy, récupérez le nom de connexion de l'instance que vous avez copié à partir des détails de l'instance Cloud SQL pour remplacer <INSTANCE_CONNECTION_NAME>. Notez également que le numéro de port TCP peut changer si vous n'utilisez pas de base de données Postgres ou si vous avez modifié le port par défaut sur lequel la base de données est à l'écoute.
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &
6. Tester la connexion et conclure
Comme mentionné précédemment, si vous souhaitez déployer une application dans l'instance GCE pour la tester, vous pouvez le faire. Pour cet atelier de programmation, nous allons installer psql et utiliser ce client pour vérifier que nous pouvons nous connecter à notre base de données.
Dans la session SSH sur la VM :
sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"
Spécifiez ensuite le mot de passe de l'utilisateur par défaut que vous avez configuré lors de la création de l'instance Cloud SQL.
Félicitations ! Si tout s'est déroulé comme prévu, vous devriez avoir l'invite Postgres et pouvoir exécuter des commandes sur votre base de données.
Et ensuite ?
Découvrez quelques-uns des ateliers de programmation...