1. Przegląd
Istnieje kilka opcji łączenia się z prywatnąinstancją Cloud SQL z innego projektu lub sieci VPC. Private Service Connect (PSC) umożliwia producentom usług udostępnianie usług za pomocą przyłączy usługi. Przyłącza usług mogą być używane przez klientów do tworzenia w ich środowisku punktów końcowych PSC lub backendów PSC i łączenia się z tymi usługami dostawcy za pomocą określonego prywatnego adresu IP.
Cloud SQL może korzystać z przyłącza usługi PSC, aby zezwalać na połączenia prywatne. W tym module możesz skonfigurować i przetestować tę opcję.
W tym module utworzysz prostą architekturę, która ilustruje użycie dostępu do punktu końcowego PSC w Cloud SQL.
Rysunek 1.

Na potrzeby tego modułu potrzebujesz 2 projektów lub oddzielnych sieci VPC w tym samym projekcie.
Cele
Z tego modułu dowiesz się, jak:
- Utwórz instancję Cloud SQL z przyłączem usługi PSC.
- Tworzenie statycznego adresu IP
- Utwórz punkt końcowy PSC w sieci VPC klienta, aby połączyć się z bazą danych Cloud SQL.
- Sprawdź dostęp do bazy danych SQL z testowej maszyny wirtualnej w sieci konsumenta za pomocą adresu IP punktu końcowego PSC.
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.



- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Uruchamianie Cloud Shell
Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
W konsoli Google Cloud kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno wyświetlić się coś takiego:

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym laboratorium możesz wykonać w przeglądarce. Nie musisz niczego instalować.
3. Zadanie 1. Konfigurowanie środowiska projektu bazy danych za pomocą Terraform
W projekcie bazy danych utworzymy niestandardową sieć VPC z regułami zapory sieciowej i podsiecią. Otwórz konsolę Google Cloud i wybierz projekt, którego będziesz używać w przypadku bazy danych.
- Otwórz Cloud Shell w prawym górnym rogu konsoli. Sprawdź, czy w Cloud Shell widzisz identyfikator projektu bazy danych w projekcie bazy danych. Potwierdź wszystkie prośby o przyznanie dostępu.

- Utwórz folder o nazwie terraform-db i przenieś się do niego.
mkdir terraform-db && cd terraform-db
- Utwórz pliki main.tf, variable.tf i database.tf.
touch main.tf variable.tf database.tf
- Przełącz się na widok edytora Cloud Shell. Wybierz edytor i zaakceptuj wszystkie niezbędne prośby, aby interfejs mógł się załadować.
- Po załadowaniu przejdź do Plik > Otwórz folder i otwórz /home/your-user-name/terraform-db, a następnie kliknij OK, aby otworzyć folder w edytorze.

- Wybierz plik variable.tf i dodaj do niego te informacje: Zastąp tekst
your-database-project-id-hererzeczywistym identyfikatorem projektu bazy danych w cudzysłowie. Zastąp tekstyour-consumer-project-id-hererzeczywistym identyfikatorem projektu konsumenckiego w cudzysłowie.
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"
}
- Następnie otwórz plik main.tf. Dodamy kod Terraform, aby wykonać różne działania opisane poniżej.
Włączanie interfejsów API |
|
Utwórz VPC |
|
Dodawanie reguł zapory sieciowej |
|
- Skopiuj poniższy kod i wklej go do pliku 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"]
}
- Wróć do terminala Cloud Shell i upewnij się, że jesteś w katalogu terraform-db
cd terraform-db. Następnie uruchom te polecenia:
terraform init
Inicjuje katalog roboczy. Ten krok pobiera dostawców wymaganych w danej konfiguracji.
terraform plan
Generuje plan wykonania, który pokazuje, jakie działania Terraform podejmie w celu wdrożenia infrastruktury.
- Aby utworzyć zasoby, uruchom polecenie
terraform applyi wpiszyes.
4. Zadanie 2. Tworzenie instancji Cloud SQL z przyłącznikiem PSC (Terraform)
Użyjemy Terraform, aby utworzyć instancję Cloud SQL z opcją PSC, która umożliwia połączenie. Skonfiguruj to w projekcie bazy danych.
- Przełącz się na widok edytora Cloud Shell. Upewnij się, że jesteś w folderze
terraform-db. Wybierz plikdatabase.tfi dodaj te elementy:
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
}
- Wróć do terminala Cloud Shell i upewnij się,że jesteś w katalogu terraform-db. Aby utworzyć zasoby, uruchom polecenie
terraform applyi wpiszyes. Tworzenie instancji Cloud SQL z załącznikiem PSC może potrwać ponad 5 minut.
Weryfikowanie bazy danych
- Po zakończeniu otwórz SQL w konsoli i wybierz nowo utworzoną instancję bazy danych psc-sql-db.
- Po lewej stronie rozwiń wysuwane menu opcji SQL i wybierz Połączenia.
- Na karcie podsumowania znajdziesz informacje o połączeniu.
- Skopiuj adres załącznika usługi i zapisz go w systemie.
- Będzie on potrzebny do wykonania kroku 8 w zadaniu 3.

- Po lewej stronie rozwiń panel opcji SQL i kliknij Użytkownicy.
- Powinien pojawić się użytkownik o nazwie testsql z hasłem cloudsql24(będzie ono później używane do uzyskiwania dostępu do bazy danych).
5. Zadanie 3. Konfigurowanie środowiska projektu konsumenta (Terraform)
W projekcie klienta utworzymy niestandardową sieć VPC z regułami zapory sieciowej i podsiecią. Otwórz konsolę Google Cloud i wybierz projekt, którego będziesz używać.
- W prawym górnym rogu konsoli obok ikony Google Cloud kliknij menu i wybierz kartę wszystkie.


- Z wyświetlonej listy projektów wybierz identyfikator projektu konsumenckiego, aby kontynuować.
- Otwórz Cloud Shell w prawym górnym rogu konsoli. Sprawdź, czy w Cloud Shell widzisz identyfikator projektu klienta, i potwierdź wszystkie prośby o zezwolenie na dostęp.
- Utwórz folder o nazwie terraform-consumer i przejdź do niego.
mkdir terraform-consumer && cd terraform-consumer
- Utwórz pliki main.tf, variable.tf i psc.tf.
touch main.tf variable.tf psc.tf
- Przełącz się na widok edytora Cloud Shell dla identyfikatora projektu klienta. Wybierz edytor i zaakceptuj wszystkie niezbędne prośby, aby interfejs mógł się załadować.
- Po załadowaniu przejdź do Plik > Otwórz folder i otwórz folder /home/your-user-name/terraform-consumer. Następnie kliknij OK, aby otworzyć folder w edytorze.

- Wybierz plik variable.tf i dodaj do niego te informacje: Zastąp tekst
your-consumer-project-id-hererzeczywistym identyfikatorem projektu klienta w cudzysłowie. Zastąp tekstyour-psc-attachment-id-hereadresem załącznika PSC w cudzysłowie. Jest to identyfikator skopiowany w sekcji 2–5 zadania 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"
}
- Następnie otwórz plik main.tf. Dodamy kod Terraform, aby wykonać różne działania opisane poniżej.
Włączanie interfejsów API |
|
Utwórz VPC |
|
Tworzenie bramy NAT |
|
Dodawanie reguł zapory sieciowej |
|
- Skopiuj poniższy kod i wklej go do pliku 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"]
}
- Wróć do terminala Cloud Shell i upewnij się, że znajdujesz się w katalogu terraform-consumer
cd terraform-consumerw projekcie klienta. Następnie uruchom te polecenia:
terraform init
Inicjuje katalog roboczy. Ten krok pobiera dostawców wymaganych w danej konfiguracji.
terraform plan
Generuje plan wykonania, który pokazuje, jakie działania Terraform podejmie w celu wdrożenia infrastruktury.
- Aby utworzyć zasoby, uruchom polecenie
terraform applyi wpiszyes.
6. Zadanie 4. Tworzenie punktu końcowego PSC do przyłączenia bazy danych SQL w projekcie klienta i testowanie maszyny wirtualnej (Terraform)
Dokończ tę konfigurację w projekcie konsumenta.
- Wróć do edytora Cloud Shell, otwórz katalog terraform-consumer i wybierz plik
psc.tf. Dodaj do pliku ten kod Terraform. Spowoduje to utworzenie statycznego wewnętrznego adresu IP, punktu końcowego usługi PSC i maszyny wirtualnej z zainstalowaną bazą danych MariaDB.
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
}
- Wróć do terminala Cloud Shell i upewnij się, że znajdujesz się w katalogu terraform-consumer
cd terraform-consumerw projekcie klienta. Następnie uruchom te polecenia:
terraform plan
Generuje plan wykonania, który pokazuje, jakie działania Terraform podejmie w celu wdrożenia infrastruktury.
- Aby utworzyć zasoby, uruchom polecenie
terraform applyi wpiszyes. - Ponieważ nasza maszyna wirtualna i punkt końcowy znajdują się w różnych regionach, musimy włączyć globalny dostęp do punktu końcowego PSC. Robimy to za pomocą konsoli.
- W konsoli projektu konsumenta otwórz Private Service Connect. Na karcie Połączony punkt końcowy w sekcji Punkt końcowy wybierz psc-sql-endpoint.
- Następnie wybierz EDYTUJ i kliknij pole wyboru obok opcji Włącz dostęp globalny oraz Zapisz.

- Aby sprawdzić połączenie, przejdź do następnego kroku
7. Zadanie 5. Sprawdzanie połączenia punktu końcowego z maszyny wirtualnej za pomocą adresu IP PSC
Wykonaj to w projekcie konsumenta
- Otwórz instancję maszyny wirtualnej. Wybierz sql-test-vm.
- Aby połączyć się z maszyną wirtualną, wybierz opcję SSH.
- Połącz się z bazą danych za pomocą punktu końcowego w następujący sposób:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
- Po nawiązaniu połączenia utwórz bazę danych o nazwie psc-sql-db.
CREATE DATABASE remotesqldb;
- Po zakończeniu wpisz exit, aby zamknąć połączenie.
8. Zadanie 6. Weryfikowanie wpisu w bazie danych
Przeprowadź weryfikację w projekcie bazy danych.
- W prawym górnym rogu konsoli obok ikony Google Cloud kliknij menu i wybierz kartę wszystkie.


- Aby kontynuować, z listy projektów wybierz identyfikator projektu bazy danych.
- Otwórz SQL, wybierz bazę danych psc-sql-db, rozwiń opcje SQL i kliknij Bazy danych. Powinna być widoczna utworzona przez Ciebie baza danych o nazwie remotesqldb z maszyny wirtualnej projektu klienta**
.**

9. Czyszczenie
Wykonaj to w projekcie bazy danych
- Wybierz identyfikator projektu bazy danych
- Otwórz Cloud Shell i sprawdź, czy widzisz identyfikator projektu bazy danych.
- Przejdź do katalogu terraform-db
cd terraform-dbi uruchom to polecenieterraform destroy, a następnie wpiszyeswszystkie zasoby utworzone w projekcie bazy danych za pomocą Terraform. Zostaną one usunięte.
Wykonaj te czynności w projekcie konsumenta
- Wybierz identyfikator projektu konsumenta
- Otwórz Cloud Shell i sprawdź, czy widzisz identyfikator projektu konsumenta.
- Przejdź do katalogu terraform-consumer
cd terraform-consumeri uruchom to polecenieterraform destroy. Wpiszyeswszystkie zasoby utworzone w projekcie bazy danych za pomocą Terraform. Zostaną one usunięte.
10. Gratulacje
Gratulacje. Udało Ci się skonfigurować instancję Cloud SQL z przyłączem PSC i utworzyć punkt końcowy Private Service Connect w innej sieci VPC. Udało Ci się połączyć z bazą danych z maszyny wirtualnej za pomocą punktu końcowego PSC.
Więcej informacji
Więcej informacji o Private Service Connect i Cloud SQL