1. Présentation
Il existe plusieurs options pour se connecter à une instance Cloud SQL privée à partir d'un autre projet ou VPC. Private Service Connect (PSC) permet aux producteurs de services d'exposer leurs services via des rattachements de service. Les clients peuvent utiliser ces rattachements de service pour créer des points de terminaison et/ou des backends PSC dans leur environnement, et se connecter à ces services de producteur via une adresse IP privée spécifique.
Cloud SQL peut utiliser un rattachement de service PSC pour autoriser une connexion privée. Dans cet atelier, vous pouvez configurer et tester l'option.
Dans cet atelier, vous allez créer une architecture simple qui illustre l'utilisation de l'accès aux points de terminaison PSC avec Cloud SQL.
Figure 1.

Pour cet atelier, vous aurez besoin de deux projets ou de deux VPC distincts dans le même projet.
Objectifs
Dans cet atelier, vous apprendrez à effectuer les tâches suivantes :
- Créez une instance Cloud SQL avec un rattachement de service PSC.
- Créer une adresse IP statique
- Créez un point de terminaison PSC dans le VPC consommateur pour vous connecter à la base de données CloudSQL.
- Vérifiez l'accès à la base de données SQL depuis une VM de test dans le réseau consommateur via l'adresse IP du point de terminaison PSC.
2. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. Si vous n'avez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.



- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par
PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Dans la console Google Cloud, cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure :

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez effectuer toutes les tâches de cet atelier de programmation dans un navigateur. Vous n'avez rien à installer.
3. Tâche 1 : Configurer l'environnement pour le projet de base de données avec Terraform
Dans le projet de base de données,nous allons créer un VPC personnalisé avec des règles de pare-feu et un sous-réseau. Ouvrez la console Cloud et sélectionnez le projet que vous utiliserez pour la base de données.
- Ouvrez Cloud Shell en haut à droite de la console. Assurez-vous que l'ID de projet de la base de données s'affiche pour le projet de base de données dans Cloud Shell, puis confirmez les éventuelles invites pour autoriser l'accès.

- Créez un dossier appelé terraform-db et accédez-y.
mkdir terraform-db && cd terraform-db
- Créez les fichiers main.tf, variable.tf et database.tf.
touch main.tf variable.tf database.tf
- Passez à la vue Éditeur Cloud Shell. Sélectionnez éditeur et assurez-vous d'autoriser toutes les invites nécessaires pour que l'interface puisse se charger.
- Une fois le fichier chargé, accédez à File > Open Folder (Fichier > Ouvrir le dossier), puis accédez à /home/your-user-name/terraform-db et sélectionnez OK pour ouvrir le dossier dans l'éditeur.

- Sélectionnez le fichier variable.tf et ajoutez-y le code suivant. Remplacez le texte
your-database-project-id-herepar l'ID réel de votre projet de base de données entre guillemets. Remplacez le texteyour-consumer-project-id-herepar l'ID de votre projet client entre guillemets.
variable "project_id" {
type = string
default = "your-database-project-id-here"
}
variable "project_id_consumer" {
type = set(string)
default = ["your-consumer-project-id-here"]
}
variable "network_id" {
type = string
default = "database-net"
}
variable "region_id" {
type = string
default = "us-east1"
}
variable "db_password" {
type = string
default = "cloudsql24"
}
- Ouvrez ensuite le fichier main.tf. Nous allons ajouter du code Terraform pour effectuer différentes actions, comme expliqué ci-dessous.
Activer les API |
|
Créer un VPC |
|
Ajouter des règles de pare-feu |
|
- Copiez et collez le texte suivant dans le fichier main .tf.
resource "google_project_service" "default" {
for_each = toset([
"compute.googleapis.com",
"sqladmin.googleapis.com"
])
service = each.value
disable_on_destroy = false
}
resource "google_compute_network" "default" {
project = var.project_id
name = var.network_id
auto_create_subnetworks = true
mtu = 1460
routing_mode = "GLOBAL"
}
resource "google_compute_firewall" "allow_icmp" {
name = "allow-icmp-${google_compute_network.default.name}"
network = google_compute_network.default.id
project = var.project_id
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
target_tags = ["allow-icmp"]
}
resource "google_compute_firewall" "allow_ssh" {
name = "allow-ssh-${google_compute_network.default.name}"
network = google_compute_network.default.id
project = var.project_id
allow {
protocol = "tcp"
ports = ["22"]
}
source_ranges = ["0.0.0.0/0"]
target_tags = ["allow-ssh"]
}
resource "google_compute_firewall" "allow_sql" {
name = "allow-sql-${google_compute_network.default.name}"
network = google_compute_network.default.id
project = var.project_id
allow {
protocol = "tcp"
ports = ["3306"]
}
source_ranges = ["0.0.0.0/0"]
}
resource "google_compute_firewall" "allow_internal" {
name = "allow-internal-${google_compute_network.default.name}"
network = google_compute_network.default.id
project = var.project_id
allow {
protocol = "icmp"
}
allow {
protocol = "tcp"
ports = ["0-65535"]
}
allow {
protocol = "udp"
ports = ["0-65535"]
}
source_ranges = ["10.128.0.0/9"]
}
- Revenez au terminal Cloud Shell, assurez-vous d'être dans le répertoire terraform-db
cd terraform-db, puis exécutez les commandes suivantes :
terraform init
Initialise le répertoire de travail. Cette étape télécharge les fournisseurs requis pour la configuration donnée.
terraform plan
Génère un plan d'exécution, qui indique les actions que Terraform effectuera pour déployer votre infrastructure.
- Pour créer les ressources, exécutez la commande
terraform applyet saisissezyespour l'exécuter.
4. Tâche 2 : Créer une instance Cloud SQL avec un rattachement PSC (Terraform)
Utilisons Terraform pour créer une instance Cloud SQL avec l'option PSC pour autoriser la connectivité. Effectuez cette configuration dans le projet de base de données.
- Passez à la vue Éditeur Cloud Shell. Assurez-vous d'être dans le dossier
terraform-db. Sélectionnez le fichierdatabase.tfet ajoutez-y le code suivant.
resource "google_sql_database_instance" "default" {
name = "psc-sql-db"
region = var.region_id
database_version = "MYSQL_8_0"
settings {
tier = "db-f1-micro"
availability_type = "REGIONAL"
backup_configuration {
enabled = true
binary_log_enabled = true
}
ip_configuration {
psc_config {
psc_enabled = true
allowed_consumer_projects = var.project_id_consumer
}
ipv4_enabled = false
}
}
deletion_protection = false
}
resource "google_sql_user" "users" {
name = "testsql"
instance = google_sql_database_instance.default.name
password = var.db_password
}
- Revenez au terminal Cloud Shell et assurez-vous d'être dans le répertoire terraform-db. Pour créer les ressources, exécutez la commande
terraform applyet saisissezyespour l'exécuter. La création de l'instance Cloud SQL avec rattachement PSC peut prendre jusqu'à cinq minutes ou plus.
Vérifier la base de données
- Une fois l'opération terminée, accédez à SQL dans la console, puis sélectionnez l'instance de base de données psc-sql-db que vous venez de créer.
- Sur la gauche, développez le panneau coulissant des options SQL et sélectionnez Connexions.
- L'onglet "Récapitulatif" contient des informations sur la connexion.
- Copiez l'adresse du rattachement de service et enregistrez-la quelque part sur votre système.
- Vous en aurez besoin pour effectuer l'étape 8 de la tâche 3.

- Sur la gauche, développez le panneau coulissant des options SQL et sélectionnez Utilisateurs.
- Vous devriez voir un utilisateur nommé testsql avec le mot de passe cloudsql24(il servira à accéder à la base de données ultérieurement).
5. Tâche 3 : Configurer l'environnement pour le projet consommateur (Terraform)
Dans le projet consommateur,nous allons créer un VPC personnalisé avec des règles de pare-feu et un sous-réseau. Ouvrez la console Cloud et sélectionnez le projet que vous allez utiliser.
- En haut de la console, à droite de l'icône Google Cloud, cliquez sur le menu déroulant, puis sélectionnez l'onglet Tous.


- Dans la liste des projets, sélectionnez l'ID de votre projet consommateur pour continuer.
- Ouvrez Cloud Shell en haut à droite de la console. Assurez-vous que l'ID du projet consommateur s'affiche dans Cloud Shell et confirmez toutes les invites pour autoriser l'accès.
- Créez un dossier appelé terraform-consumer et accédez-y.
mkdir terraform-consumer && cd terraform-consumer
- Créez les fichiers main.tf, variable.tf et psc.tf.
touch main.tf variable.tf psc.tf
- Passez à la vue Éditeur Cloud Shell pour l'ID du projet consommateur. Sélectionnez éditeur et assurez-vous d'autoriser toutes les invites nécessaires pour que l'interface puisse se charger.
- Une fois le fichier chargé, accédez à File > Open Folder (Fichier > Ouvrir le dossier), puis accédez à /home/your-user-name/terraform-consumer et sélectionnez OK pour ouvrir le dossier dans l'éditeur.

- Sélectionnez le fichier variable.tf et ajoutez-y le code suivant. Remplacez le texte
your-consumer-project-id-herepar l'ID de votre projet consommateur entre guillemets. Remplacez le texteyour-psc-attachment-id-herepar l'adresse de votre pièce jointe PSC entre guillemets. Il s'agit de l'ID que vous avez copié dans la section 2-5 de la tâche 2
.
variable "project_id" {
type = string
default = "your-consumer-project-id-here"
}
variable "psc_attachment_id" {
type = string
default = "your-psc-attachment-id-here"
}
variable "network_id" {
type = string
default = "psc-endpoint-net"
}
variable "region_id" {
type = string
default = "us-east1"
}
variable "region_id2" {
type = string
default = "us-central1"
}
- Ouvrez ensuite le fichier main.tf. Nous allons ajouter du code Terraform pour effectuer différentes actions, comme expliqué ci-dessous.
Activer les API |
|
Créer un VPC |
|
Créer une passerelle NAT |
|
Ajouter des règles de pare-feu |
|
- Copiez et collez le texte suivant dans le fichier main .tf.
resource "google_project_service" "default" {
for_each = toset([
"compute.googleapis.com",
"cloudresourcemanager.googleapis.com"
])
service = each.value
disable_on_destroy = false
}
resource "google_compute_network" "default" {
project = var.project_id
name = var.network_id
auto_create_subnetworks = false
mtu = 1460
routing_mode = "GLOBAL"
}
resource "google_compute_subnetwork" "vm_subnet" {
name = "vm-subnet"
ip_cidr_range = "192.168.50.0/24"
region = var.region_id2
network = google_compute_network.default.name
project = var.project_id
}
resource "google_compute_subnetwork" "psc_subnet" {
name = "psc-subnet"
ip_cidr_range = "192.168.90.0/24"
region = var.region_id
network = google_compute_network.default.name
project = var.project_id
}
resource "google_compute_router" "default" {
name = "outbound-nat"
region = var.region_id2
network = google_compute_network.default.id
bgp {
asn = 64514
}
}
resource "google_compute_router_nat" "default" {
name = "outbound-nat-gw"
router = google_compute_router.default.name
region = google_compute_router.default.region
nat_ip_allocate_option = "AUTO_ONLY"
source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
log_config {
enable = true
filter = "ERRORS_ONLY"
}
}
resource "google_compute_firewall" "allow_icmp" {
name = "allow-icmp-${google_compute_network.default.name}"
network = google_compute_network.default.id
project = var.project_id
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
resource "google_compute_firewall" "allow_ssh" {
name = "allow-ssh-${google_compute_network.default.name}"
network = google_compute_network.default.id
project = var.project_id
allow {
protocol = "tcp"
ports = ["22"]
}
source_ranges = ["0.0.0.0/0"]
target_tags = ["allow-ssh"]
}
resource "google_compute_firewall" "allow_internal" {
name = "allow-internal-${google_compute_network.default.name}"
network = google_compute_network.default.id
project = var.project_id
allow {
protocol = "icmp"
}
allow {
protocol = "tcp"
ports = ["0-65535"]
}
allow {
protocol = "udp"
ports = ["0-65535"]
}
source_ranges = ["192.168.0.0/16"]
}
- Revenez au terminal Cloud Shell, assurez-vous d'être dans le répertoire terraform-consumer
cd terraform-consumerdu projet consommateur, puis exécutez les commandes suivantes.
terraform init
Initialise le répertoire de travail. Cette étape télécharge les fournisseurs requis pour la configuration donnée.
terraform plan
Génère un plan d'exécution, qui indique les actions que Terraform effectuera pour déployer votre infrastructure.
- Pour créer les ressources, exécutez la commande
terraform applyet saisissezyespour l'exécuter.
6. Tâche 4 : Créer le rattachement du point de terminaison PSC à la base de données SQL dans le projet client et la VM de test (Terraform)
Effectuez cette configuration dans le projet client.
- Revenez à l'éditeur Cloud Shell, ouvrez le répertoire terraform-consumer et sélectionnez le fichier
psc.tf. Ajoutez le code Terraform suivant au fichier. Cela crée une adresse IP interne statique, un point de terminaison PSC et une VM de test avec MariaDB installé.
resource "google_compute_address" "default" {
name = "psc-ip"
region = var.region_id
address_type = "INTERNAL"
subnetwork = google_compute_subnetwork.psc_subnet.name
address = "192.168.90.100"
}
resource "google_compute_forwarding_rule" "default" {
name = "psc-sql-endpoint"
region = var.region_id
network = google_compute_network.default.name
ip_address = google_compute_address.default.self_link
load_balancing_scheme = ""
target = var.psc_attachment_id
}
resource "google_compute_instance" "sql_test_vm" {
name = "sql-test-vm"
machine_type = "e2-medium"
zone = "${var.region_id2}-b"
project = var.project_id
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
subnetwork = google_compute_subnetwork.vm_subnet.name
}
# No external IP address
network_performance_config {
total_egress_bandwidth_tier = "DEFAULT"
}
tags = ["allow-icmp", "allow-ssh", "allow-internal", "allow-health-check"]
# Install MariaDB at startup
metadata_startup_script = <<EOF
#!/bin/bash
apt-get update
apt-get install -y mariadb-server
systemctl enable mariadb
EOF
}
- Revenez au terminal Cloud Shell, assurez-vous d'être dans le répertoire terraform-consumer
cd terraform-consumerdu projet consommateur, puis exécutez les commandes suivantes.
terraform plan
Génère un plan d'exécution, qui indique les actions que Terraform effectuera pour déployer votre infrastructure.
- Pour créer les ressources, exécutez la commande
terraform applyet saisissezyespour l'exécuter. - Étant donné que notre VM et notre point de terminaison se trouvent dans des régions différentes, nous devons activer l' accès mondial sur le point de terminaison PSC. Pour ce faire, nous utilisons la console.
- Dans la console du projet consommateur, accédez à Private Service Connect. Dans l'onglet Point de terminaison connecté, recherchez la section "Point de terminaison", puis sélectionnez psc-sql-endpoint.
- Sélectionnez ensuite MODIFIER,puis cochez la case Activer l'accès mondial et cliquez sur Enregistrer.

- Passez à l'étape suivante pour vérifier la connectivité.
7. Tâche 5 : Vérifier la connectivité du point de terminaison à partir de la VM via l'adresse IP PSC
Effectuez cette opération dans le projet client.
- Accédez à Instance de VM. Sélectionnez sql-test-vm.
- Sélectionnez l'option SSH pour vous connecter à la VM.
- Connectez-vous à la base de données via un point de terminaison en procédant comme suit :
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
- Une fois la connexion établie, créez une base de données avec psc-sql-db.
CREATE DATABASE remotesqldb;
- Une fois l'opération terminée, saisissez "exit" pour fermer la connexion.
8. Tâche 6 : Vérifier l'entrée de la base de données
Effectuez cette validation dans le projet de base de données.
- En haut de la console, à droite de l'icône Google Cloud, cliquez sur le menu déroulant, puis sélectionnez l'onglet Tous.


- Dans la liste des projets, sélectionnez l'ID de projet de votre base de données pour continuer.
- Accédez à SQL, sélectionnez la base de données psc-sql-db, développez les options SQL, puis sélectionnez Bases de données. Vous devriez voir la base de données que vous venez de créer, appelée remotesqldb, à partir de la VM du projet consommateur**
.**

9. Effectuer un nettoyage
Effectuez cette étape dans le projet de base de données.
- Sélectionnez l'ID du projet de base de données.
- Accédez à Cloud Shell et assurez-vous que l'ID du projet de base de données s'affiche.
- Accédez au répertoire terraform-db
cd terraform-db, exécutez la commandeterraform destroyet saisissezyes. Toutes les ressources que vous avez créées dans votre projet de base de données avec Terraform seront supprimées.
Effectuez cette opération dans le projet client.
- Sélectionnez l'ID du projet client.
- Accédez à Cloud Shell et assurez-vous que l'ID du projet consommateur s'affiche.
- Accédez au répertoire terraform-consumer
cd terraform-consumer, exécutez la commande suivanteterraform destroy, puis saisissezyes. Toutes les ressources que vous avez créées dans votre projet de base de données avec Terraform seront supprimées.
10. Félicitations
Félicitations ! Vous avez configuré une instance Cloud SQL avec un rattachement PSC et créé un point de terminaison Private Service Connect dans un autre VPC. Vous avez réussi à vous connecter à la base de données depuis une VM distante via le point de terminaison PSC.
En savoir plus
En savoir plus sur Private Service Connect et Cloud SQL