1. Visão geral
Há várias opções para se conectar a uma instância privada do Cloud SQL de outro projeto ou VPCs. O Private Service Connect (PSC) permite que os produtores de serviços exponham os serviços por meio de anexos de serviço. Esses anexos de serviço podem ser usados pelos consumidores para criar endpoints e/ou back-ends do PSC no ambiente e se conectar a esses serviços de produção por um IP particular especificado.
O Cloud SQL tem a capacidade de usar o anexo de serviço do PSC para permitir a conexão particular. 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 a endpoints do PSC com o CloudSQL.
Figura 1.
Para este laboratório, você vai precisar de dois projetos ou VPCs separados no mesmo projeto.
Objetivos
Neste laboratório, você vai aprender a fazer o seguinte:
- Crie uma instância do CloudSQL com anexo do serviço 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 CloudSQL
- Verifique o acesso ao banco de dados SQL de uma VM de teste na rede do consumidor pelo 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 do 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 de cima do console, à direita. Verifique se o ID do projeto do banco de dados aparece para o projeto do banco de dados no Cloud Shell. Confirme todos os avisos para permitir o acesso.
- Crie uma pasta chamada terraform-db e mova para a pasta
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 as solicitações necessárias para que a interface possa ser carregada.
- Depois de carregar, navegue até File > Open Folder e acesse /home/your-user-name/terraform-db e selecione Ok para abrir a pasta no editor.
- Selecione o arquivo variable.tf e adicione o seguinte. Substitua o texto
your-database-project-id-here
pelo ID do seu projeto de banco de dados real entre aspas. Substitua o textoyour-consumer-project-id-here
pelo ID do seu projeto de consumidor real 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 as 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, verifique se você está no diretório
cd terraform-db
terraform-db e execute os comandos a seguir.
terraform init
Inicializa o diretório de trabalho. Esta etapa faz o download dos provedores necessários para a configuração.
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 apply
e digiteyes
para executar.
4. Tarefa 2: Criar uma instância do CloudSQL com anexo do PSC (Terraform)
Vamos usar o Terraform para criar uma instância do CloudSQL com a opção PSC para permitir a conectividade. Conclua essa configuração no projeto do banco de dados.
- Mude para a visualização do editor do Cloud Shell. Verifique se você está na pasta
terraform-db
. Selecione o arquivodatabase.tf
e 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 verifique se você está no diretório terraform-db. Agora, para criar os recursos, execute o comando
terraform apply
e digiteyes
para executar. A criação da instância do CloudSQL com anexo do PSC pode levar mais de 5 minutos.
Verificar o banco de dados
- Depois de concluir, acesse SQL no console e selecione a instância de banco de dados psc-sql-db recém-criada.
- No lado esquerdo, abra o menu suspenso de opções do SQL e selecione Conexões.
- Na guia "Resumo", você pode conferir informações sobre a conexão.
- Copie o Endereço do anexo do serviço e salve-o em algum lugar do seu sistema.
- Você vai precisar dele para concluir a etapa 8 da tarefa 3.
- No lado esquerdo, abra o menu suspenso de opções do SQL e selecione Usuários.
- Um usuário chamado testsql com a senha cloudsql24 (que será usada para acessar o banco de dados mais tarde)
5. Tarefa 3: Configurar o ambiente para o projeto do consumidor (Terraform)
No projeto do 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 do ícone do Google Cloud, clique no menu suspenso e selecione a guia todos.
- Nos projetos listados, selecione o ID do projeto do consumidor para continuar.
- Abra o Cloud Shell, localizado na parte de cima do console, à direita. Verifique se o ID do projeto do consumidor aparece no Cloud Shell e confirme as solicitações para permitir o acesso.
- Crie uma pasta chamada terraform-consumer e mova para a pasta
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 as solicitações necessárias para que a interface possa ser carregada.
- Depois de carregar, navegue até File > Open Folder e acesse /home/your-user-name/terraform-consumer e selecione Ok para abrir a pasta no editor.
- Selecione o arquivo variable.tf e adicione o seguinte. Substitua o texto
your-consumer-project-id-here
pelo seu ID do projeto do consumidor real entre aspas. Substitua o textoyour-psc-attachment-id-here
pelo endereço de anexo do PSC entre aspas. Este é o ID que você copiou na tarefa 2, seção 2-5
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 as 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-consumer
no projeto do consumidor e execute os comandos a seguir.
terraform init
Inicializa o diretório de trabalho. Esta etapa faz o download dos provedores necessários para a configuração.
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 apply
e digiteyes
para executar.
6. Tarefa 4: Criar o endpoint do PSC para o anexo do banco de dados SQL no projeto do consumidor e testar a VM (Terraform)
Conclua essa configuração no projeto do consumidor.
- Volte para o 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-consumer
no projeto do consumidor e execute os comandos a seguir.
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 apply
e digiteyes
para executar. - Como nossa VM e o endpoint estão em regiões diferentes, precisamos ativar o acesso global no endpoint do PSC. Isso é feito pelo console
- No console do projeto do 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 Salvar.
- Continuar para a próxima etapa para verificar a conectividade
7. Tarefa 5: Verificar a conectividade do endpoint da VM pelo 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 DB pelo 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 encerrar a conexão.
8. Tarefa 6: Verificar a entrada do banco de dados
Conclua essa verificação no projeto de banco de dados.
- Na parte de cima do console, à direita do ícone do Google Cloud, clique no menu suspenso e selecione a guia todos.
- Nos projetos listados, selecione o ID do projeto do banco de dados 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 do consumidor**
.
**.
9. Limpeza
Conclua isso no projeto do banco de dados
- Selecione o ID do projeto do 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-db
e execute o comandoterraform destroy
a seguir e digiteyes
. Todos os recursos que você criou no projeto do banco de dados com o Terraform serão removidos.
Conclua isso no projeto de consumidor
- Selecione o ID do projeto do consumidor
- Acesse o Cloud Shell e verifique se o ID do projeto do consumidor está disponível.
- Acesse o diretório terraform-consumer
cd terraform-consumer
e execute o comandoterraform destroy
a seguir e digiteyes
. Todos os recursos que você criou no projeto do 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 pelo endpoint do PSC.
Saiba mais
Leia mais sobre o Private Service Connect e o Cloud SQL.