1. Panoramica
Esistono diverse opzioni per connettersi a un'istanza privata Cloud SQL da un altro progetto o VPC. Private Service Connect (PSC) consente ai producer di servizi di esporre i propri servizi tramite collegamenti di servizio. Questi collegamenti di servizio possono essere utilizzati dai consumer per creare endpoint PSC e/o backend PSC nel proprio ambiente e connettersi a questi servizi producer tramite un IP privato specificato.
Cloud SQL è in grado di utilizzare il collegamento al servizio PSC per consentire la connessione privata. In questo lab puoi configurare e testare l'opzione.
In questo lab, creerai un'architettura semplice che illustra l'utilizzo dell'accesso all'endpoint PSC con CloudSQL.
Figura 1.

Per questo lab, avrai bisogno di due progetti o di VPC separati nello stesso progetto.
Obiettivi
In questo lab imparerai a:
- Crea un'istanza Cloud SQL con il collegamento a un servizio PSC.
- Crea un indirizzo IP statico
- Crea un endpoint PSC nel VPC consumer per connetterti al database CloudSQL
- Verifica l'accesso al database SQL da una VM di test nella rete consumer tramite l'IP dell'endpoint PSC.
2. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. Completare questo codelab non costa molto, se non nulla. Per arrestare le risorse ed evitare addebiti oltre a quelli previsti in questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Nella console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Tutto il lavoro in questo codelab può essere svolto all'interno di un browser. Non devi installare nulla.
3. Attività 1: Configura l'ambiente per il progetto di database con (Terraform)
Nel progetto di database,creeremo un VPC personalizzato con regole firewall e subnet. Apri la console Cloud e seleziona il progetto che utilizzerai per il database.
- Apri Cloud Shell in alto a destra nella console, assicurati di visualizzare l'ID progetto del progetto di database in Cloud Shell e conferma le richieste per consentire l'accesso.

- Crea una cartella denominata terraform-db e spostati al suo interno
mkdir terraform-db && cd terraform-db
- Crea un file main.tf, variable.tf e database.tf.
touch main.tf variable.tf database.tf
- Passa alla visualizzazione dell'editor di Cloud Shell. Seleziona Editor e assicurati di consentire tutti i prompt necessari per caricare l'interfaccia.
- Una volta caricato, vai a File > Apri cartella e vai a /home/your-user-name/terraform-db e seleziona Ok per aprire la cartella nell'editor.

- Seleziona il file variable.tf e aggiungi quanto segue. Sostituisci il testo
your-database-project-id-herecon l'ID effettivo del progetto di database tra virgolette. Sostituisci il testoyour-consumer-project-id-herecon l'ID del tuo progetto consumer effettivo tra virgolette.
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"
}
- A questo punto, apri il file main.tf. Aggiungeremo del codice Terraform per eseguire varie azioni, come spiegato di seguito.
Abilita API |
|
Crea VPC |
|
Aggiungere regole firewall |
|
- Copia e incolla quanto segue nel file 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"]
}
- Torna al terminale Cloud Shell, assicurati di trovarti nella directory terraform-db
cd terraform-dbed esegui questi comandi:
terraform init
Inizializza la directory di lavoro. Questo passaggio scarica i provider richiesti per la configurazione specificata.
terraform plan
Genera un piano di esecuzione, che mostra le azioni che Terraform eseguirà per eseguire il deployment dell'infrastruttura.
- Ora, per creare le risorse, esegui il comando
terraform applye digitayesper eseguire.
4. Attività 2: Crea un'istanza Cloud SQL con collegamento PSC (Terraform)
Utilizziamo Terraform per creare un'istanza Cloud SQL con l'opzione PSC per consentire la connettività. Completa questa configurazione nel progetto di database.
- Passa alla visualizzazione dell'editor di Cloud Shell. Assicurati di trovarti nella cartella
terraform-db. Seleziona il filedatabase.tfe aggiungi quanto segue.
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
}
- Torna al terminale Cloud Shell e assicurati di trovarti nella directory terraform-db. Ora, per creare le risorse, esegui il comando
terraform applye digitayesper eseguire. La creazione dell'istanza Cloud SQL con il collegamento PSC può richiedere fino a 5 minuti o più.
Verificare il database
- Al termine, vai a SQL nella console e seleziona l'istanza di database psc-sql-db appena creata.
- Sul lato sinistro, espandi il riquadro delle opzioni SQL e seleziona Connessioni.
- Nella scheda Riepilogo puoi visualizzare le informazioni sulla connessione.
- Copia l'indirizzo dell'allegato di servizio e salvalo in un punto qualsiasi del sistema.
- Ti servirà per completare il passaggio 8 dell'attività 3.

- Sul lato sinistro, espandi il riquadro delle opzioni SQL e seleziona Utenti.
- Dovresti visualizzare un utente chiamato testsql con la password cloudsql24 (che verrà utilizzata per accedere al database in un secondo momento)
5. Attività 3: Configura l'ambiente per il progetto consumer (Terraform)
Nel progetto consumer,creeremo un VPC personalizzato con regole firewall e subnet. Apri la console Cloud e seleziona il progetto che utilizzerai.
- Nella parte superiore della console, a destra, accanto all'icona di Google Cloud, fai clic sul menu a discesa e seleziona la scheda Tutti.


- Seleziona l'ID del tuo progetto consumer tra quelli elencati per continuare.
- Apri Cloud Shell, che si trova in alto a destra nella console, assicurati di visualizzare l'ID progetto consumer in Cloud Shell e conferma le richieste di autorizzazione dell'accesso.
- Crea una cartella denominata terraform-consumer e spostati nella cartella
mkdir terraform-consumer && cd terraform-consumer
- Crea un file main.tf, variable.tf e psc.tf.
touch main.tf variable.tf psc.tf
- Passa alla visualizzazione dell'editor Cloud Shell per l'ID progetto consumer. Seleziona Editor e assicurati di consentire tutti i prompt necessari per caricare l'interfaccia.
- Una volta caricato, vai a File > Apri cartella e vai a /home/your-user-name/terraform-consumer e seleziona Ok per aprire la cartella nell'editor.

- Seleziona il file variable.tf e aggiungi quanto segue. Sostituisci il testo
your-consumer-project-id-herecon il tuo ID progetto consumer effettivo tra virgolette. Sostituisci il testoyour-psc-attachment-id-herecon l'indirizzo dell'allegato psc tra virgolette. Questo è l'ID che hai copiato nella sezione 2-5 dell'attività 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"
}
- A questo punto, apri il file main.tf. Aggiungeremo del codice Terraform per eseguire varie azioni, come spiegato di seguito.
Abilita API |
|
Crea VPC |
|
Crea gateway NAT |
|
Aggiungere regole firewall |
|
- Copia e incolla quanto segue nel file 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"]
}
- Torna al terminale Cloud Shell, assicurati di trovarti nella directory terraform-consumer
cd terraform-consumernel progetto consumer ed esegui questi comandi:
terraform init
Inizializza la directory di lavoro. Questo passaggio scarica i provider richiesti per la configurazione specificata.
terraform plan
Genera un piano di esecuzione, che mostra le azioni che Terraform eseguirà per eseguire il deployment dell'infrastruttura.
- Ora, per creare le risorse, esegui il comando
terraform applye digitayesper eseguire.
6. Attività 4: Crea l'endpoint PSC per l'allegato SQL DB nel progetto consumer e nella VM di test (Terraform)
Completa questa configurazione nel progetto consumer.
- Torna all'editor di Cloud Shell, apri la directory terraform-consumer e seleziona il file
psc.tf. Aggiungi il seguente codice Terraform al file. Vengono creati un IP interno statico, un endpoint PSC e una VM di test con MariaDB installato.
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
}
- Torna al terminale Cloud Shell, assicurati di trovarti nella directory terraform-consumer
cd terraform-consumernel progetto consumer ed esegui questi comandi:
terraform plan
Genera un piano di esecuzione, che mostra le azioni che Terraform eseguirà per eseguire il deployment dell'infrastruttura.
- Ora, per creare le risorse, esegui il comando
terraform applye digitayesper eseguire - Poiché la nostra VM e il nostro endpoint si trovano in regioni diverse, dobbiamo abilitare l' accesso globale all'endpoint PSC. Lo facciamo tramite la console
- Nella console del progetto consumer, vai a Private Service Connect. Nella scheda Endpoint connesso, cerca la sezione Endpoint e seleziona psc-sql-endpoint.
- Ora seleziona MODIFICA,quindi fai clic sulla casella di controllo accanto a Attiva accesso globale e all'opzione Salva.

- Continua con il passaggio successivo per verificare la connettività
7. Attività 5: Verifica la connettività dell'endpoint dalla VM tramite l'indirizzo IP PSC
Completa questa operazione nel progetto consumer
- Vai a Istanza VM. Seleziona sql-test-vm
- Seleziona l'opzione SSH per connetterti alla VM.
- Connettiti al database tramite l'endpoint con quanto segue:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
- Una volta stabilita la connessione, crea un database con il seguente psc-sql-db.
CREATE DATABASE remotesqldb;
- Al termine, digita exit per uscire dalla connessione.
8. Attività 6: Verifica la voce del database
Completa questa verifica nel progetto di database
- Nella parte superiore della console, a destra, accanto all'icona di Google Cloud, fai clic sul menu a discesa e seleziona la scheda Tutti.


- Per continuare, seleziona l'ID progetto del database tra i progetti elencati.
- Vai a SQL, seleziona il database psc-sql-db, espandi le opzioni SQL e seleziona Database. Dovresti vedere il database appena creato chiamato remotesqldb dalla VM del progetto consumer**
.**

9. Esegui la pulizia
Completa questa operazione nel progetto Database
- Seleziona l'ID progetto del database
- Vai a Cloud Shell e assicurati di visualizzare l'ID progetto del database
- Vai alla directory terraform-db
cd terraform-dbed esegui il comando seguenteterraform destroye digitayestutte le risorse che hai creato nel progetto db con Terraform verranno rimosse.
Completa questa operazione nel progetto consumer
- Seleziona l'ID progetto consumer
- Vai a Cloud Shell e assicurati di visualizzare l'ID progetto consumer.
- Vai alla directory terraform-consumer
cd terraform-consumered esegui il seguente comandoterraform destroye digitayestutte le risorse che hai creato nel progetto db con Terraform verranno rimosse.
10. Complimenti
Congratulazioni, hai configurato correttamente un'istanza Cloud SQL con collegamento PSC e hai creato un endpoint Private Service Connect in un altro VPC. Sei riuscito a connetterti da una VM remota al database tramite l'endpoint PSC.
Scopri di più
Puoi scoprire di più su Private Service Connect e Cloud SQL.