1. Обзор
Существует несколько вариантов подключения к частному экземпляру Cloud SQL из другого проекта или сети VPC. Вы можете использовать доступ к частным сервисам (PSA) для доступа к внутренним IP-адресам Google и сторонних сервисов через частные соединения. Для расширения доступа к базе данных теперь также можно включить подключение к частным сервисам (PSC).
Private Service Connect (PSC) позволяет производителям услуг предоставлять доступ к своим сервисам через сервисные вложения , которые потребители могут использовать для создания конечных точек PSC и/или бэкэндов PSC в своей среде. Через эти конечные точки PSC они могут подключаться к сервисам производителя через указанный пользователем частный IP-адрес.
В этой лабораторной работе вы можете настроить и протестировать данную опцию.
В этой лабораторной работе вы создадите простую архитектуру, иллюстрирующую использование доступа к конечным точкам PSA и PSC с помощью CloudSQL.
Рисунок 1.

Для выполнения этой лабораторной работы вам потребуется два проекта или отдельные VPC в рамках одного проекта.
Цели
В этой лабораторной работе вы научитесь выполнять следующее задание:
- Включить сетевое взаимодействие сервисов
- Настройка PSA
- Создайте экземпляр CloudSQL с помощью PSA.
- Включить подключение услуги PSC.
- Создайте конечную точку PSC в потребительской VPC для подключения к базе данных CloudSQL.
- Проверьте доступ к базе данных SQL с тестовых виртуальных машин как в VPC производителя, так и в VPC потребителя.
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.
В консоли Google Cloud нажмите на значок Cloud Shell на панели инструментов в правом верхнем углу:

Подготовка и подключение к среде займут всего несколько минут. После завершения вы должны увидеть примерно следующее:

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Вся работа в этом практическом задании может выполняться в браузере. Вам не нужно ничего устанавливать.
3. Задание 1. Настройка среды для проекта базы данных с использованием Terraform.
В проекте базы данных мы включим сетевое взаимодействие сервисов, создадим VPC, создадим диапазон PSA, настроим пиринговое соединение для сетевого взаимодействия сервисов и создадим правила брандмауэра. Откройте консоль облака и выберите проект, который вы будете использовать для базы данных.
- Откройте Cloud Shell, расположенный в верхней части консоли справа. Убедитесь, что в Cloud Shell отображается идентификатор проекта базы данных , и подтвердите все запросы на предоставление доступа.

- Создайте папку с именем terraform-db-psc и переместите в неё содержимое.
mkdir terraform-db-psc && cd terraform-db-psc
- Создайте файлы main.tf, variable.tf, nat-vm.tf и database.tf .
touch main.tf variable.tf nat-vm.tf database.tf
- Переключитесь в режим редактора Cloud Shell . Выберите редактор и убедитесь, что вы разрешили все необходимые запросы, чтобы интерфейс загрузился.
- После загрузки перейдите в меню «Файл» > «Открыть папку» и найдите папку /home/your-user-name/terraform-db-psc , затем нажмите «ОК» , чтобы открыть папку в редакторе.

- Выберите файл variable.tf и добавьте следующее. Замените текст
your-database-project-id-hereна фактический идентификатор вашего проекта базы данных в кавычках. Замените текстyour-consumer-project-id-hereна фактический идентификатор вашего потребительского проекта в кавычках.
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"
}
- Далее откройте файл main.tf. Мы собираемся добавить в него код Terraform для выполнения различных действий, как описано ниже.
Включить API | |
Создать VPC | |
Добавить правила брандмауэра | |
Создать диапазон PSA | |
Создать пиринг | |
- Скопируйте и вставьте следующий текст в основной файл .tf .
resource "google_project_service" "default" {
for_each = toset([
"compute.googleapis.com",
"servicenetworking.googleapis.com",
"sqladmin.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 = true
mtu = 1460
routing_mode = "GLOBAL"
}
resource "google_compute_global_address" "psa_range" {
name = "psa-range-${google_compute_network.default.name}"
project = var.project_id
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 20
address = "172.18.0.0"
network = google_compute_network.default.id
}
resource "google_service_networking_connection" "private_connection" {
network = google_compute_network.default.self_link
service = "servicenetworking.googleapis.com"
reserved_peering_ranges = [
google_compute_global_address.psa_range.name,
]
}
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", "172.18.0.0/20"] # Include PSA range
}
- Вернитесь в терминал Cloud Shell , убедитесь, что вы находитесь в каталоге terraform-db-psc
cd terraform-db-pscи выполните следующие команды.
terraform init
Инициализирует рабочий каталог. На этом шаге загружаются поставщики, необходимые для данной конфигурации.
terraform plan
Генерирует план выполнения, показывающий, какие действия Terraform предпримет для развертывания вашей инфраструктуры.
- Теперь, чтобы создать ресурсы, выполните команду
terraform applyи введитеyesдля запуска.
4. Задание 2. Создайте экземпляр CloudSQL с использованием PSA (Terraform).
Давайте воспользуемся Terraform для создания экземпляра CloudSQL с опцией PSA, разрешающей подключение. Завершите эту настройку в проекте базы данных .
- Переключитесь в редактор Cloud Shell . Убедитесь, что вы находитесь в папке
terraform-db-psc. Выберите файлdatabase.tfи добавьте следующее.
resource "google_sql_database_instance" "default" {
name = "psc-psa-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 {
ipv4_enabled = "false"
private_network = google_compute_network.default.id
}
}
deletion_protection = false
}
resource "google_sql_user" "users" {
name = "testsql"
instance = google_sql_database_instance.default.name
password = var.db_password
}
- Вернитесь в терминал Cloud Shell и убедитесь, что вы находитесь в каталоге terraform-db-psc . Теперь, чтобы создать ресурсы, выполните команду
terraform applyи введитеyesдля запуска. Создание экземпляра CloudSQL с PSA может занять до 15 минут и более.
Проверьте базу данных
- После завершения перейдите в консоль в раздел SQL и выберите только что созданный экземпляр базы данных psc-psa-sql-db .
- В левой части экрана разверните выдвижную панель параметров SQL и выберите «Подключения».
- На вкладке «Сводка» вы можете увидеть информацию о соединении.
- Скопируйте внутренний IP-адрес и сохраните его где-нибудь на вашем компьютере. Как видите, он был назначен из зарезервированного нами диапазона.
- Этот IP-адрес понадобится вам для выполнения шага 5 задания 3.

- В левой части экрана разверните выдвижную панель параметров SQL и выберите «Пользователи».
- Вы должны увидеть пользователя с именем testsql и паролем cloudsql24 (он будет использоваться для доступа к базе данных позже).
5. Задание 3. Создайте тестовую виртуальную машину и подключитесь к экземпляру SQL из проекта базы данных (Terraform).
Давайте воспользуемся Terraform для создания тестовой виртуальной машины и NAT-шлюза. Завершите эту настройку в проекте базы данных .
- Переключитесь в редактор Cloud Shell . Убедитесь, что вы находитесь в папке
terraform-db-psc. Выберите файлnat-vm.tfи добавьте следующее.
resource "google_compute_router" "default" {
name = "outbound-nat"
region = var.region_id
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_instance" "sql_net_vm" {
name = "db-vm-test"
machine_type = "e2-medium"
zone = "${var.region_id}-b"
project = var.project_id
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = google_compute_network.default.self_link
}
# 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
}
- Вернитесь в терминал Cloud Shell и убедитесь, что вы находитесь в каталоге terraform-db-psc . Теперь, чтобы создать ресурсы, выполните команду
terraform plan, then terraform applyи введитеyesдля запуска. Это создаст NAT-шлюз и виртуальную машину с установленной MariaDB.
Проверьте базу данных
Выполните это в рамках потребительского проекта.
- Перейдите в раздел «Экземпляр виртуальной машины» . Выберите db-vm-test.
- Для подключения к виртуальной машине выберите опцию SSH .
- Подключитесь к базе данных через локальный IP-адрес, который вы скопировали ранее, используя следующую команду:
mysql --host=172.18.0.2 --user=testsql --password=cloudsql24
P.S. Для подключения измените IP-адрес на свой фактический IP-адрес.
- После установления соединения создадим базу данных с помощью следующего скрипта : localvpcsqldb .
CREATE DATABASE localvpcsqldb;
- После завершения введите exit, чтобы разорвать соединение. Введите exit еще раз, чтобы закрыть виртуальную машину.
6. Задание 4. Включите PSC на экземпляре CloudSQL.
Давайте воспользуемся командами gcloud, чтобы включить опцию PSC для обеспечения подключения. Завершите эту настройку в проекте базы данных .
- Переключитесь в режим просмотра Cloud Shell .
- Выполните следующую команду в Cloud Shell.
- Замените Ensure
YOUR_DB_PROJECT_HEREна идентификатор проекта базы данных. - Замените Ensure
YOUR_CONSUMER_PROJECT_HEREна идентификатор потребительского проекта.
project_id=YOUR_DB_PROJECT_HERE
allowed_project=YOUR_CONSUMER_PROJECT_HERE
gcloud beta sql instances patch psc-psa-sql-db \
--project=$project_id \
--enable-private-service-connect \
--allowed-psc-projects=$allowed_project
- Это обновит существующую базу данных с прикрепленным файлом PSC. Процесс займет некоторое время, более 10 минут.
Если вы получите ошибку ожидания по таймауту, вам также будет предложена команда для продолжения просмотра хода выполнения. Что-то вроде: «Вы можете продолжить ожидание операции, выполнив команду `gcloud beta sql operations wait –project` ».
Обратите внимание, что вы можете развернуть новую базу данных с включенными функциями PSA и PSC с самого начала.
Проверьте базу данных
- После завершения перейдите в консоль в раздел SQL и выберите экземпляр базы данных psc-psa-sql-db .
- В левой части экрана разверните выдвижную панель параметров SQL и выберите «Подключения».
- На вкладке «Сводка» вы можете увидеть информацию о соединении.
- Скопируйте адрес приложения и сохраните его где-нибудь на своем компьютере.
- Это понадобится вам для выполнения следующего задания, шага 8 (5).

7. Задание 5. Настройка среды для потребительского проекта (Terraform)
В проекте для потребителей мы создадим пользовательскую VPC с правилами брандмауэра и подсетью. Откройте консоль облака и выберите проект, который будете использовать.
- В верхней части консоли справа, рядом со значком Google Cloud, щелкните раскрывающееся меню и выберите вкладку «Все» .


- Выберите из списка проектов идентификатор вашего потребительского проекта , чтобы продолжить.
- Откройте Cloud Shell, расположенный в верхней части консоли справа, убедитесь, что в Cloud Shell отображается идентификатор проекта потребителя , и подтвердите все запросы на предоставление доступа.
- Создайте папку с именем terraform-consumer-psc и переместите в неё содержимое.
mkdir terraform-consumer-psc && cd terraform-consumer-psc
- Создайте файлы main.tf, variable.tf и psc.tf.
touch main.tf variable.tf psc.tf
- Переключитесь в редактор Cloud Shell для идентификатора потребительского проекта . Выберите редактор и убедитесь, что вы разрешили все необходимые запросы, чтобы интерфейс загрузился.
- После загрузки перейдите в меню «Файл» > «Открыть папку» и найдите папку /home/your-user-name/terraform-consumer-psc , затем нажмите «ОК» , чтобы открыть папку в редакторе.

- Выберите файл variable.tf и добавьте следующее. Замените текст
your-consumer-project-id-hereна фактический идентификатор вашего потребительского проекта в кавычках. Замените текстyour-psc-attachment-id-hereна адрес вашего PSC-вложения в кавычках. Это идентификатор, который вы скопировали в задании 4, раздел 5-7.
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-vpc"
}
variable "region_id" {
type = string
default = "us-east1"
}
- Далее откройте файл main.tf. Мы собираемся добавить в него код Terraform для выполнения различных действий, как описано ниже.
Включить API | |
Создать VPC | |
Создать NAT-шлюз | |
Добавить правила брандмауэра | |
- Скопируйте и вставьте следующий текст в основной файл .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_pc" {
name = "vm-net"
ip_cidr_range = "192.168.80.0/24"
region = var.region_id
network = google_compute_network.default.name
project = var.project_id
}
resource "google_compute_subnetwork" "psc_subnet_ip" {
name = "psc-subnet"
ip_cidr_range = "192.168.100.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_id
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"]
}
- Вернитесь в терминал Cloud Shell , убедитесь, что вы находитесь в каталоге terraform-consumer-psc
cd terraform-consumer-pscв проекте consumer и выполните следующие команды.
terraform init
Инициализирует рабочий каталог. На этом шаге загружаются поставщики, необходимые для данной конфигурации.
terraform plan
Генерирует план выполнения, показывающий, какие действия Terraform предпримет для развертывания вашей инфраструктуры.
- Теперь, чтобы создать ресурсы, выполните команду
terraform applyи введитеyesдля запуска.
8. Задание 6. Создайте конечную точку PSC для подключения к базе данных SQL в проекте потребителя и протестируйте виртуальную машину (Terraform).
Завершите эту настройку в проекте потребителя .
- Вернитесь в редактор Cloud Shell, откройте каталог terraform-consumer-psc и выберите файл
psc.tfДобавьте в файл следующий код Terraform. Это создаст статический внутренний IP-адрес, конечную точку PSC и тестовую виртуальную машину с установленной базой данных Maria DB.
resource "google_compute_address" "default" {
name = "psc-ip-1"
region = var.region_id
address_type = "INTERNAL"
subnetwork = google_compute_subnetwork.psc_subnet_ip.name
address = "192.168.100.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 = "remote-sql-test-vm"
machine_type = "e2-medium"
zone = "${var.region_id}-b"
project = var.project_id
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
subnetwork = google_compute_subnetwork.vm_subnet_pc.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
}
- Вернитесь в терминал Cloud Shell , убедитесь, что вы находитесь в каталоге terraform-consumer-psc
cd terraform-consumer-pscв проекте consumer и выполните следующие команды.
terraform plan
Генерирует план выполнения, показывающий, какие действия Terraform предпримет для развертывания вашей инфраструктуры.
- Теперь, чтобы создать ресурсы, выполните команду
terraform applyи введитеyesдля запуска.
9. Задание 7. Проверьте подключение конечной точки с виртуальной машины по IP-адресу PSC.
Выполните это в рамках потребительского проекта.
- Перейдите в раздел «Экземпляр виртуальной машины» . Выберите remote-sql-test-vm.
- Для подключения к виртуальной машине выберите опцию SSH .
- Подключитесь к базе данных через конечную точку, используя следующие параметры:
mysql --host=192.168.100.100 --user=testsql --password=cloudsql24
- После установления соединения создадим базу данных с помощью следующего скрипта : psc-sql-db .
CREATE DATABASE remotepscpsasqldb;
- После завершения введите exit, чтобы разорвать соединение. Введите exit еще раз, чтобы закрыть виртуальную машину.
10. Задание 8. Проверка записи в базе данных.
Выполните эту проверку в проекте базы данных.
- В верхней части консоли справа, рядом со значком Google Cloud, щелкните раскрывающееся меню и выберите вкладку «Все» .


- Из списка проектов выберите идентификатор вашего проекта базы данных , чтобы продолжить.
- Перейдите в раздел SQL , выберите базу данных psc-psa-sql-db , разверните параметры SQL и выберите «Базы данных» . Вы должны увидеть только что созданную базу данных remotepscpsasqldb из виртуальной машины проекта потребителя , а также localvpcsqldb из виртуальной машины проекта базы данных**
.**

11. Уборка
Выполните это в проекте «Потребитель».
- Выберите идентификатор потребительского проекта.
- Перейдите в Cloud Shell и убедитесь, что вы видите идентификатор проекта потребителя.
- Перейдите в каталог terraform-consumer-psc , выполните команду
cd terraform-consumer-pscи запустите командуterraform destroy, затем введитеyesВсе ресурсы, созданные вами в проекте потребителя с помощью Terraform, будут удалены.
Выполните это в проекте «База данных».
- Выберите идентификатор проекта базы данных.
- Перейдите в Cloud Shell и убедитесь, что вы видите идентификатор проекта базы данных.
- Перейдите в каталог terraform-db-psc , выполните команду `cd
terraform destroycd terraform-db-pscи введитеyesБольшая часть ресурсов, созданных в вашем проекте базы данных с помощью Terraform, будет удалена. Сервис networking может не быть удален и выдать ошибку. - Далее удалите следующие файлы из папки terraform-db-psc.
rm -r terraform.tfstate terraform.tfstate.backup
- Далее в консоли перейдите в раздел «Сети VPC».
- Выберите VPC database-net , затем выберите PRIVATE SERVICES ACCESS , в разделе Allocated IP Ranges for Services выберите psa-range-database-net и выберите параметр Release.

- Далее выберите VPC NETWORK PEERING, выберите servicenetworking-googleapis-com и выберите параметр Delete.

- Далее выберите «Удалить сеть VPC» .

12. Поздравляем!
Поздравляем, вы успешно настроили экземпляр Cloud SQL с подключением PSA и PSC и создали конечную точку Private Service Connect в другой VPC.
Узнать больше
Вы можете узнать больше о Private Service Connect и Cloud SQL.
Другие примеры кода по этой теме: https://codelabs.developers.google.com/codelabs/cloudsql-psc-terraform