۱. مرور کلی
گزینههای مختلفی برای اتصال به یک نمونه خصوصی Cloud SQL از یک پروژه دیگر یا VPCها وجود دارد. اتصال سرویس خصوصی (PSC) به تولیدکنندگان سرویس این امکان را میدهد که سرویسهای خود را از طریق پیوستهای سرویس ارائه دهند. این پیوستهای سرویس میتوانند توسط مصرفکنندگان برای ایجاد نقاط پایانی PSC و/یا پایانههای PSC در محیط خود و اتصال به این سرویسهای تولیدکننده از طریق یک IP خصوصی مشخص استفاده شوند.
Cloud SQL قابلیت استفاده از پیوست سرویس PSC را برای ایجاد اتصال خصوصی دارد. در این آزمایش میتوانید این گزینه را پیکربندی و آزمایش کنید.
در این آزمایش، شما یک معماری ساده خواهید ساخت که استفاده از دسترسی نقطه پایانی PSC را با CloudSQL نشان میدهد.
شکل ۱.

برای این آزمایش، به دو پروژه یا VPC های جداگانه در یک پروژه نیاز دارید .
اهداف
در این آزمایشگاه یاد خواهید گرفت که چگونه وظایف زیر را انجام دهید:
- یک نمونه CloudSQL با پیوست سرویس PSC ایجاد کنید.
- Create a static IP address
- یک نقطه پایانی PSC در VPC مصرفکننده ایجاد کنید تا به پایگاه داده CloudSQL متصل شود.
- دسترسی به پایگاه داده SQL را از طریق یک ماشین مجازی آزمایشی در شبکه مصرفکننده از طریق IP نقطه پایانی PSC تأیید کنید.
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. شما همیشه میتوانید آن را بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاههای کد، باید شناسه پروژه خود را (که معمولاً با عنوان
PROJECT_IDشناخته میشود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی میماند. - برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینهای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، میتوانید منابعی را که ایجاد کردهاید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوان از راه دور و از طریق لپتاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
از کنسول گوگل کلود ، روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

آمادهسازی و اتصال به محیط فقط چند لحظه طول میکشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

این ماشین مجازی با تمام ابزارهای توسعهای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه میدهد و روی فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. تمام کارهای شما در این آزمایشگاه کد را میتوان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.
۳. وظیفه ۱. راهاندازی محیط برای پروژه پایگاه داده با (Terraform)
در پروژه پایگاه داده، ما یک VPC سفارشی با قوانین فایروال و زیرشبکه ایجاد خواهیم کرد. کنسول ابری را باز کنید و پروژهای را که برای پایگاه داده استفاده خواهید کرد، انتخاب کنید.
- Cloud Shell را که در بالای کنسول شما در سمت راست قرار دارد باز کنید، مطمئن شوید که شناسه پروژه پایگاه داده را برای پروژه پایگاه داده در Cloud Shell مشاهده میکنید، هرگونه درخواستی را برای اجازه دسترسی تأیید کنید.

- یک پوشه به نام terraform-db ایجاد کنید و به پوشهی مربوطه بروید.
mkdir terraform-db && cd terraform-db
- فایلهای main.tf، variable.tf و database.tf را ایجاد کنید.
touch main.tf variable.tf database.tf
- به نمای ویرایشگر Cloud Shell بروید. ویرایشگر را انتخاب کنید، مطمئن شوید که هرگونه درخواست لازم را مجاز میدانید تا رابط کاربری بتواند بارگیری شود.
- پس از بارگذاری، به مسیر File > Open Folder بروید و به مسیر /home/your-user-name/terraform-db بروید و برای باز کردن پوشه در ویرایشگر، Ok را انتخاب کنید.

- فایل 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 | |
اضافه کردن قوانین فایروال | |
- موارد زیر را کپی کرده و در فایل اصلی .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"]
}
- به ترمینال Cloud Shell برگردید، مطمئن شوید که در دایرکتوری terraform-db هستید.
cd terraform-dbاجرا کنید و دستورات زیر را اجرا کنید.
terraform init
دایرکتوری کاری را مقداردهی اولیه میکند. این مرحله ارائهدهندگان مورد نیاز برای پیکربندی داده شده را دانلود میکند.
terraform plan
یک طرح اجرایی ایجاد میکند که نشان میدهد Terraform چه اقداماتی را برای استقرار زیرساخت شما انجام خواهد داد.
- حالا برای ایجاد منابع، دستور
terraform applyاجرا کنید و برای اجرا،yesرا تایپ کنید.
۴. وظیفه ۲. ایجاد نمونه CloudSQL با پیوست PSC (Terraform)
بیایید از Terraform برای ایجاد یک نمونه CloudSQL استفاده کنیم، با گزینه PSC برای امکان اتصال. این پیکربندی را در پروژه پایگاه داده تکمیل کنید.
- به نمای ویرایشگر Cloud Shell بروید. مطمئن شوید که در پوشه
terraform-dbهستید. فایلdatabase.tfرا انتخاب کرده و موارد زیر را اضافه کنید.
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
}
- Switch back to Cloud Shell terminal, make sure you are in the terraform-db directory. Now to create the resources run the
terraform applycommand and typeyesto run. Creating the CloudSQL instance with PSC attachment may take up to 5+ minutes.
تأیید پایگاه داده
- پس از اتمام، به SQL در کنسول بروید، نمونه پایگاه داده psc-sql-db که به تازگی ایجاد شده است را انتخاب کنید.
- در سمت چپ، اسلایدر گزینههای SQL را باز کنید و Connections را انتخاب کنید.
- در زیر برگه خلاصه میتوانید اطلاعات مربوط به اتصال را مشاهده کنید.
- آدرس پیوست سرویس را کپی کرده و در جایی از سیستم خود ذخیره کنید.
- برای تکمیل مرحله ۸ از بخش ۳ به این نیاز خواهید داشت.

- در سمت چپ، اسلایدر گزینههای SQL را باز کنید و کاربران را انتخاب کنید.
- شما باید کاربری به نام testsql با رمز عبور cloudsql24 را ببینید (این رمز بعداً برای دسترسی به پایگاه داده استفاده خواهد شد)
۵. وظیفه ۳. راهاندازی محیط برای پروژه مصرفکننده (Terraform)
در پروژه مصرفکننده، ما یک VPC سفارشی با قوانین فایروال و زیرشبکه ایجاد خواهیم کرد. کنسول ابری را باز کنید و پروژهای را که استفاده خواهید کرد انتخاب کنید.
- در بالای کنسول خود، در سمت راست، کنار آیکون Google Cloud، روی منوی کشویی کلیک کنید و سپس تب all را انتخاب کنید.


- از میان پروژههای فهرستشده، شناسه پروژه مصرفکننده خود را برای ادامه انتخاب کنید.
- Cloud Shell واقع در بالای کنسول خود در سمت راست را باز کنید، مطمئن شوید که شناسه پروژه مصرفکننده را در Cloud Shell مشاهده میکنید، هرگونه درخواستی را برای اجازه دسترسی تأیید کنید.
- یک پوشه به نام terraform-consumer ایجاد کنید و به پوشهی مربوطه بروید.
mkdir terraform-consumer && cd terraform-consumer
- یک فایل main.tf، variable.tf و psc.tf ایجاد کنید.
touch main.tf variable.tf psc.tf
- برای شناسه پروژه مصرفکننده به نمای ویرایشگر Cloud Shell بروید. ویرایشگر را انتخاب کنید، مطمئن شوید که هرگونه درخواست لازم را برای بارگیری رابط کاربری مجاز میدانید.
- پس از بارگذاری، به مسیر File > Open Folder بروید و به مسیر /home/your-user-name/terraform-consumer بروید و برای باز کردن پوشه در ویرایشگر، Ok را انتخاب کنید.

- Select the variable.tf file and add the following. Replace the
your-consumer-project-id-heretext with your actual consumer project ID in quotes Replace theyour-psc-attachment-id-heretext with your psc attachment address in quotes. This is the ID you copied in task 2 section 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"
}
- سپس فایل main.tf را باز کنید. ما قصد داریم مقداری کد terraform برای انجام اقدامات مختلف، همانطور که در زیر توضیح داده شده است، اضافه کنیم.
فعال کردن APIها | |
ایجاد VPC | |
ایجاد دروازه NAT | |
Add Firewall rules | |
- موارد زیر را کپی کرده و در فایل اصلی .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"]
}
- به ترمینال Cloud Shell برگردید و مطمئن شوید که در دایرکتوری terraform-consumer هستید. در پروژه consumer،
cd terraform-consumerاجرا کنید و دستورات زیر را اجرا کنید.
terraform init
دایرکتوری کاری را مقداردهی اولیه میکند. این مرحله ارائهدهندگان مورد نیاز برای پیکربندی داده شده را دانلود میکند.
terraform plan
یک طرح اجرایی ایجاد میکند که نشان میدهد Terraform چه اقداماتی را برای استقرار زیرساخت شما انجام خواهد داد.
- حالا برای ایجاد منابع، دستور
terraform applyاجرا کنید و برای اجرا،yesرا تایپ کنید.
۶. وظیفه ۴. ایجاد نقطه پایانی PSC به ضمیمه SQL DB در پروژه مصرفکننده و آزمایش ماشین مجازی (Terraform)
این پیکربندی را در پروژه مصرفکننده تکمیل کنید.
- Switch back to Cloud Shell editor, open the terraform-consumer directory and select the
psc.tffile. Add the following Terraform code to the file. This creates a static internal IP, a PSC endpoint and a test VM with Maria DB installed.
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
}
- به ترمینال Cloud Shell برگردید و مطمئن شوید که در دایرکتوری terraform-consumer هستید. در پروژه consumer،
cd terraform-consumerاجرا کنید و دستورات زیر را اجرا کنید.
terraform plan
یک طرح اجرایی ایجاد میکند که نشان میدهد Terraform چه اقداماتی را برای استقرار زیرساخت شما انجام خواهد داد.
- حالا برای ایجاد منابع، دستور
terraform applyاجرا کنید و برای اجرا،yesرا تایپ کنید. - از آنجا که ماشین مجازی و نقطه پایانی ما در مناطق مختلفی قرار دارند، باید دسترسی سراسری (Global Access) را روی نقطه پایانی PSC فعال کنیم . این کار را از طریق کنسول انجام میدهیم.
- در کنسول پروژه مصرفکننده، به Private Service Connect بروید. در زیر تب Connected Endpoint ، زیر بخش Endpoint را جستجو کنید و psc-sql-endpoint را انتخاب کنید.
- حالا گزینهی ویرایش (EDIT) را انتخاب کنید و سپس روی کادر کنار گزینهی فعال کردن دسترسی سراسری (Enable global access) و ذخیره (Save) کلیک کنید.

- Continue to next step to verify connectivity
۷. وظیفه ۵. تأیید اتصال نقطه پایانی از ماشین مجازی از طریق آدرس IP PSC
Complete this in the consumer project
- Go to VM Instance . Select sql-test-vm
- برای اتصال به ماشین مجازی، گزینه SSH را انتخاب کنید.
- از طریق endpoint با استفاده از دستور زیر به پایگاه داده متصل شوید:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
- وقتی اتصال برقرار شد، یک پایگاه داده با psc-sql-db زیر ایجاد کنید.
CREATE DATABASE remotesqldb;
- Once complete type exit to exit the connection.
8. Task 6. Verify database entry
این تأیید را در پروژه پایگاه داده تکمیل کنید
- در بالای کنسول خود، در سمت راست، کنار آیکون Google Cloud، روی منوی کشویی کلیک کنید و سپس تب all را انتخاب کنید.


- از میان پروژههای فهرستشده، شناسه پروژه پایگاه داده خود را برای ادامه انتخاب کنید.
- به SQL بروید، پایگاه داده psc-sql-db را انتخاب کنید، گزینههای SQL را گسترش داده و Databases را انتخاب کنید. باید پایگاه دادهای که اخیراً ایجاد کردهاید به نام remotesqldb را از پروژه مصرفکننده VM** ببینید
.**

۹. تمیز کردن
این را در پروژه پایگاه داده تکمیل کنید
- شناسه پروژه پایگاه داده را انتخاب کنید
- به Cloud Shell بروید و مطمئن شوید که شناسه پروژه پایگاه داده را مشاهده میکنید.
- به دایرکتوری terraform-db
cd terraform-dbبروید و دستورterraform destroyزیر را اجرا کنید و عبارتyesرا تایپ کنید. تمام منابعی که در پروژه پایگاه داده خود با Terraform ایجاد کردهاید حذف خواهند شد.
این را در پروژه Consumer تکمیل کنید
- شناسه پروژه مصرفکننده را انتخاب کنید
- به Cloud Shell بروید و مطمئن شوید که شناسه پروژه مصرفکننده را میبینید.
- Go to the terraform-consumer directory
cd terraform-consumerand run the following commandterraform destroyand typeyesall the resources you created in your db project with Terraform will be removed.
۱۰. تبریک
Congratulations, you've successfully configured a Cloud SQL instance with PSC attachment and created a Private Service Connect endpoint in another VPC. You have been able to successfully connect from a remote VM via the PSC endpoint into the database.
بیشتر بدانید
میتوانید درباره Private Service Connect و Cloud SQL بیشتر بخوانید