1. Présentation
Il existe plusieurs options pour vous connecter à une instance Cloud SQL privée à partir d'un autre projet ou de VPC. Private Service Connect (PSC) permet aux producteurs de services d'exposer leurs services via des rattachements de service. Les clients peuvent utiliser ces pièces jointes de service pour créer des points de terminaison et/ou des backends PSC dans leur environnement, et se connecter à ces services de production via une adresse IP privée spécifiée.
Cloud SQL peut utiliser le rattachement de service PSC pour autoriser les connexions privées. Dans cet atelier, vous allez configurer et tester l'option.
Dans cet atelier, vous allez créer une architecture simple qui illustre l'utilisation de l'accès au point de terminaison PSC avec CloudSQL.
Figure 1.
Pour cet atelier, vous aurez besoin de deux projets ou de VPC distincts dans le même projet.
Objectifs
Dans cet atelier, vous allez apprendre à effectuer la tâche suivante:
- Créez une instance Cloud SQL avec un rattachement de service PSC.
- Créer une adresse IP statique
- Créer un point de terminaison PSC dans le VPC du client pour se connecter à la base de données CloudSQL
- Vérifiez l'accès à la base de données SQL à partir d'une VM de test dans le réseau client 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 un 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 Cloud Console, puis 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 invites pour autoriser l'accès.
- Créez un dossier nommé terraform-db et déplacez-vous vers ce dossier.
mkdir terraform-db && cd terraform-db
- Créez des fichiers main.tf, variable.tf et database.tf.
touch main.tf variable.tf database.tf
- Accédez à la vue Éditeur Cloud Shell. Sélectionnez Éditeur, puis assurez-vous d'autoriser 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/votre-nom-utilisateur/terraform-db et sélectionnez Ok (OK) pour ouvrir le dossier dans l'éditeur.
- Sélectionnez le fichier variable.tf, puis ajoutez les éléments suivants. Remplacez le texte
your-database-project-id-here
par l'ID réel de votre projet de base de données entre guillemets. Remplacez le texteyour-consumer-project-id-here
par l'ID réel 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 diverses actions, comme expliqué ci-dessous.
Activer les API |
|
Créer un VPC |
|
Ajouter des règles de pare-feu |
|
- Copiez et collez le code 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
cd terraform-db
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 apply
, puis saisissezyes
pour l'exécuter.
4. Tâche 2 : Créer une instance Cloud SQL avec un rattachement PSC (Terraform)
Créons une instance Cloud SQL à l'aide de Terraform, avec l'option PSC pour autoriser la connectivité. Effectuez cette configuration dans le projet de base de données.
- Accédez à la vue Éditeur Cloud Shell. Assurez-vous d'être dans le dossier
terraform-db
. Sélectionnez le fichierdatabase.tf
, puis ajoutez ce qui suit.
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 apply
, puis saisissezyes
pour l'exécuter. La création de l'instance Cloud SQL avec un 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 nouvellement créée.
- Sur la gauche, développez le panneau des options SQL et sélectionnez Connexions.
- Dans l'onglet "Récapitulatif", vous pouvez consulter des informations sur la connexion.
- Copiez l'adresse de l'attachement de service, puis enregistrez-la 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 des options SQL, puis sélectionnez Utilisateurs.
- Un utilisateur appelé testsql avec le mot de passe cloudsql24(qui servira à accéder à la base de données plus tard) doit s'afficher.
5. Tâche 3 : Configurer l'environnement pour le projet de consommateur (Terraform)
Dans le projet client,nous allons créer un VPC personnalisé avec des règles de pare-feu et un sous-réseau. Ouvrez la console Cloud, puis sélectionnez le projet que vous utiliserez.
- En haut à droite de la console, à côté de l'icône Google Cloud, cliquez sur le menu déroulant, puis sélectionnez l'onglet Tout.
- Dans la liste des projets, sélectionnez l'ID de votre projet client pour continuer.
- Ouvrez Cloud Shell en haut à droite de la console, assurez-vous que l'ID de projet client s'affiche dans Cloud Shell, puis confirmez les invites pour autoriser l'accès.
- Créez un dossier nommé terraform-consumer et déplacez-vous vers ce dossier.
mkdir terraform-consumer && cd terraform-consumer
- Créez des fichiers main.tf, variable.tf et psc.tf.
touch main.tf variable.tf psc.tf
- Accédez à la vue de l'éditeur Cloud Shell pour l'ID de projet client. Sélectionnez Éditeur, puis assurez-vous d'autoriser 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/votre-nom-utilisateur/terraform-consumer et sélectionnez Ok (OK) pour ouvrir le dossier dans l'éditeur.
- Sélectionnez le fichier variable.tf, puis ajoutez les éléments suivants. Remplacez le texte
your-consumer-project-id-here
par votre ID de projet client réel entre guillemets. Remplacez le texteyour-psc-attachment-id-here
par votre adresse d'attachement 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 diverses 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 code 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
cd terraform-consumer
terraform-consumer du projet client, 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 apply
, puis saisissezyes
pour l'exécuter.
6. Tâche 4 : Créer le point de terminaison PSC pour le rattachement à la base de données SQL dans le projet utilisateur et la VM de test (Terraform)
Effectuez cette configuration dans le projet client.
- Revenez à l'éditeur Cloud Shell, ouvrez le répertoire terraform-consumer, puis sélectionnez le fichier
psc.tf
. Ajoutez le code Terraform suivant au fichier. Une adresse IP interne statique, un point de terminaison PSC et une VM de test avec Maria DB installé sont créés.
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
cd terraform-consumer
terraform-consumer du projet client, 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 apply
, puis saisissezyes
pour 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. Nous le faisons via la console.
- Dans la console du projet client, accédez à Private Service Connect. Dans l'onglet Connected Endpoint (Point de terminaison connecté), recherchez la section "Endpoint" (Point de terminaison) et sélectionnez psc-sql-endpoint.
- Sélectionnez maintenant MODIFIER,puis cochez la case à côté de Activer l'accès global et cliquez sur Enregistrer.
- Passez à l'étape suivante pour vérifier la connectivité.
7. Tâche 5 : Vérifier la connectivité des points de terminaison à partir de la VM via l'adresse IP du 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 le point de terminaison avec les éléments suivants:
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 la connexion établie, saisissez "exit" pour la quitter.
8. Tâche 6 : Vérifier la saisie dans la base de données
Effectuez cette vérification dans le projet de base de données.
- En haut à droite de la console, à côté de l'icône Google Cloud, cliquez sur le menu déroulant, puis sélectionnez l'onglet Tout.
- Dans la liste des projets, sélectionnez l'ID de votre projet de 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 Databases (Bases de données). La base de données que vous venez de créer, appelée remotesqldb, devrait s'afficher à partir de la VM du projet client.**
.
**
9. Effectuer un nettoyage
Effectuez cette opération dans le projet de base de données.
- Sélectionner 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
cd terraform-db
terraform-db et exécutez la commandeterraform destroy
suivante, puis 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électionner l'ID du projet client
- Accédez à Cloud Shell et assurez-vous que l'ID du projet client s'affiche.
- Accédez au répertoire
cd terraform-consumer
terraform-consumer et exécutez la commandeterraform destroy
suivante, 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 correctement 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
Pour en savoir plus sur Private Service Connect et Cloud SQL,