1. Visão geral
Há várias opções para se conectar a uma instância privada do Cloud SQL de outro projeto ou VPC. O Private Service Connect (PSC) permite que os produtores de serviços exponham os serviços deles por anexos de serviço. Os consumidores podem usar esses anexos de serviço para criar endpoints e/ou back-ends do PSC no ambiente deles e se conectar aos serviços do produtor por um IP particular especificado.
O Cloud SQL pode usar o anexo de serviço do PSC para permitir conexões particulares. Neste laboratório, você pode configurar e testar a opção.
Neste laboratório, você vai criar uma arquitetura simples que ilustra o uso do acesso ao endpoint da PSC com o Cloud SQL.
Figura 1.

Para este laboratório, você vai precisar de dois projetos ou VPCs separadas no mesmo projeto.
Objetivos
Neste laboratório, você vai aprender a fazer o seguinte:
- Crie uma instância do Cloud SQL com um anexo de serviço do PSC.
- Criar um endereço IP estático
- Crie um endpoint do PSC na VPC do consumidor para se conectar ao banco de dados do Cloud SQL.
- Verifique o acesso ao banco de dados SQL de uma VM de teste na rede do consumidor usando o IP do endpoint do PSC.
2. Configuração e requisitos
Configuração de ambiente autoguiada
- Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.



- O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
- O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como
PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto. - Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
- Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.
Inicie o Cloud Shell
Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.
No Console do Google Cloud, clique no ícone do Cloud Shell na barra de ferramentas superior à direita:

O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Neste codelab, todo o trabalho pode ser feito com um navegador. Você não precisa instalar nada.
3. Tarefa 1: Configurar o ambiente para o projeto de banco de dados com o Terraform
No projeto de banco de dados,vamos criar uma VPC personalizada com regras de firewall e sub-rede. Abra o console do Cloud e selecione o projeto que você vai usar para o banco de dados.
- Abra o Cloud Shell, localizado na parte superior direita do console. Verifique se o ID do projeto do banco de dados aparece no projeto do banco de dados no Cloud Shell e confirme todas as solicitações para permitir o acesso.

- Crie uma pasta chamada terraform-db e mova para ela
mkdir terraform-db && cd terraform-db
- Crie um arquivo main.tf, variable.tf e database.tf.
touch main.tf variable.tf database.tf
- Mude para a visualização do editor do Cloud Shell. Selecione editor e permita todos os comandos necessários para que a interface possa ser carregada.
- Depois de carregado, navegue até Arquivo > Abrir pasta e acesse /home/your-user-name/terraform-db. Selecione Ok para abrir a pasta no editor.

- Selecione o arquivo variable.tf e adicione o seguinte. Substitua o texto
your-database-project-id-herepelo ID do seu projeto de banco de dados entre aspas. Substitua o textoyour-consumer-project-id-herepelo ID do seu projeto de consumidor entre aspas.
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"
}
- Em seguida, abra o arquivo main.tf. Vamos adicionar um código do Terraform para realizar várias ações, conforme explicado abaixo.
Ativar APIs |
|
Criar VPC |
|
Adicionar regras de firewall |
|
- Copie e cole o seguinte no arquivo 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"]
}
- Volte para o terminal do Cloud Shell, confira se você está no diretório terraform-db
cd terraform-dbe execute os comandos a seguir:
terraform init
Inicializa o diretório de trabalho. Essa etapa faz o download dos provedores necessários para a configuração especificada.
terraform plan
Gera um plano de execução, mostrando quais ações o Terraform vai realizar para implantar sua infraestrutura.
- Agora, para criar os recursos, execute o comando
terraform applye digiteyespara executar.
4. Tarefa 2: Criar uma instância do Cloud SQL com anexo do PSC (Terraform)
Vamos usar o Terraform para criar uma instância do Cloud SQL com a opção PSC para permitir a conectividade. Conclua essa configuração no projeto de banco de dados.
- Mude para a visualização do editor do Cloud Shell. Verifique se você está na pasta
terraform-db. Selecione o arquivodatabase.tfe adicione o seguinte.
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
}
- Volte para o terminal do Cloud Shell e confira se você está no diretório terraform-db. Agora, para criar os recursos, execute o comando
terraform applye digiteyespara executar. A criação da instância do Cloud SQL com o anexo do PSC pode levar mais de cinco minutos.
Verificar banco de dados
- Depois da conclusão, acesse SQL no console e selecione a instância de banco de dados psc-sql-db recém-criada.
- À esquerda, expanda o painel de opções do SQL e selecione Conexões.
- Na guia "Resumo", você encontra informações sobre a conexão.
- Copie o Endereço de vinculação de serviço e salve em algum lugar no seu sistema.
- Você vai precisar disso para concluir a etapa 8 da tarefa 3.

- À esquerda, abra o painel lateral de opções do SQL e selecione Usuários.
- Você vai encontrar um usuário chamado testsql com a senha cloudsql24 (será usada para acessar o banco de dados mais tarde)
5. Tarefa 3: Configurar o ambiente para o projeto do consumidor (Terraform)
No projeto consumidor,vamos criar uma VPC personalizada com regras de firewall e sub-rede. Abra o console do Cloud e selecione o projeto que você vai usar.
- Na parte de cima do console, à direita, ao lado do ícone do Google Cloud, clique no menu suspenso e selecione a guia all.


- Na lista de projetos, selecione o ID do seu projeto consumidor para continuar.
- Abra o Cloud Shell, localizado na parte superior direita do console. Verifique se o ID do projeto do consumidor aparece no Cloud Shell e confirme todas as solicitações para permitir o acesso.
- Crie uma pasta chamada terraform-consumer e mova para ela.
mkdir terraform-consumer && cd terraform-consumer
- Crie um arquivo main.tf, variable.tf e psc.tf.
touch main.tf variable.tf psc.tf
- Mude para a visualização do editor do Cloud Shell para o ID do projeto do consumidor. Selecione editor e permita todos os comandos necessários para que a interface possa ser carregada.
- Depois de carregado, navegue até Arquivo > Abrir pasta e acesse /home/your-user-name/terraform-consumer. Selecione Ok para abrir a pasta no editor.

- Selecione o arquivo variable.tf e adicione o seguinte. Substitua o texto
your-consumer-project-id-herepelo ID do projeto do consumidor entre aspas. Substitua o textoyour-psc-attachment-id-herepelo endereço do anexo do PSC entre aspas. Esse é o ID que você copiou na seção 2-5 da tarefa 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"
}
- Em seguida, abra o arquivo main.tf. Vamos adicionar um código do Terraform para realizar várias ações, conforme explicado abaixo.
Ativar APIs |
|
Criar VPC |
|
Criar gateway NAT |
|
Adicionar regras de firewall |
|
- Copie e cole o seguinte no arquivo 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"]
}
- Volte para o terminal do Cloud Shell, verifique se você está no diretório terraform-consumer
cd terraform-consumerno projeto consumidor e execute os seguintes comandos:
terraform init
Inicializa o diretório de trabalho. Essa etapa faz o download dos provedores necessários para a configuração especificada.
terraform plan
Gera um plano de execução, mostrando quais ações o Terraform vai realizar para implantar sua infraestrutura.
- Agora, para criar os recursos, execute o comando
terraform applye digiteyespara executar.
6. Tarefa 4: Crie o endpoint do PSC para o anexo do banco de dados SQL no projeto do consumidor e teste a VM (Terraform)
Conclua essa configuração no projeto do consumidor.
- Volte ao editor do Cloud Shell, abra o diretório terraform-consumer e selecione o arquivo
psc.tf. Adicione o seguinte código do Terraform ao arquivo. Isso cria um IP interno estático, um endpoint do PSC e uma VM de teste com o Maria DB instalado.
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
}
- Volte para o terminal do Cloud Shell, verifique se você está no diretório terraform-consumer
cd terraform-consumerno projeto consumidor e execute os seguintes comandos:
terraform plan
Gera um plano de execução, mostrando quais ações o Terraform vai realizar para implantar sua infraestrutura.
- Agora, para criar os recursos, execute o comando
terraform applye digiteyespara executar. - Como nossa VM e nosso endpoint estão em regiões diferentes, precisamos ativar o acesso global no endpoint do PSC. Isso é feito no console.
- No console do projeto consumidor, acesse Private Service Connect. Na guia Endpoint conectado, procure a seção "Endpoint" e selecione psc-sql-endpoint.
- Agora selecione EDITAR e clique na caixa de seleção ao lado de Ativar acesso global e na opção Salvar.

- Continue para a próxima etapa e verifique a conectividade
7. Tarefa 5: Verificar a conectividade do endpoint da VM usando o endereço IP do PSC
Conclua isso no projeto do consumidor
- Acesse Instância de VM. Selecione sql-test-vm.
- Selecione a opção SSH para se conectar à VM.
- Conecte-se ao banco de dados via endpoint com o seguinte:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
- Quando a conexão for estabelecida, crie um banco de dados com o seguinte psc-sql-db.
CREATE DATABASE remotesqldb;
- Quando terminar, digite "exit" para sair da conexão.
8. Tarefa 6: Verificar a entrada do banco de dados
Conclua essa verificação no projeto do banco de dados.
- Na parte de cima do console, à direita, ao lado do ícone do Google Cloud, clique no menu suspenso e selecione a guia all.


- Selecione o ID do projeto do banco de dados na lista para continuar.
- Navegue até SQL, selecione o banco de dados psc-sql-db, expanda as opções de SQL e selecione Bancos de dados. O banco de dados que você acabou de criar chamado remotesqldb vai aparecer na VM do projeto consumidor**
.**

9. Limpeza
Conclua isso no projeto do banco de dados
- Selecione o ID do projeto de banco de dados
- Acesse o Cloud Shell e verifique se o ID do projeto do banco de dados aparece.
- Acesse o diretório terraform-db
cd terraform-dbe execute o comandoterraform destroy. Digiteyes. Todos os recursos criados no projeto de banco de dados com o Terraform serão removidos.
Conclua isso no projeto do consumidor
- Selecione o ID do projeto do consumidor
- Acesse o Cloud Shell e verifique se o ID do projeto consumidor aparece.
- Acesse o diretório terraform-consumer
cd terraform-consumere execute o comandoterraform destroy. Digiteyes. Todos os recursos criados no projeto de banco de dados com o Terraform serão removidos.
10. Parabéns
Parabéns! Você configurou uma instância do Cloud SQL com anexo do PSC e criou um endpoint do Private Service Connect em outra VPC. Você conseguiu se conectar de uma VM remota ao banco de dados usando o endpoint do PSC.
Saiba mais
Leia mais sobre o Private Service Connect e o Cloud SQL.