1. סקירה כללית
יש כמה אפשרויות להתחבר למופע פרטי של Cloud SQL מפרויקט אחר או מרשתות VPC. Private Service Connect (PSC) מאפשר לספקי שירותים לחשוף את השירותים שלהם באמצעות קבצים מצורפים של שירותים. צרכנים יכולים להשתמש בחיבורי השירות האלה כדי ליצור נקודות קצה של PSC או עורפי PSC בסביבה שלהם ולהתחבר לשירותים האלה של הספק באמצעות כתובת IP פרטית שצוינה.
ל-Cloud SQL יש אפשרות להשתמש ב-PSC service attachment כדי לאפשר חיבור פרטי. בשיעור ה-Lab הזה תוכלו להגדיר את האפשרות ולבדוק אותה.
בשיעור ה-Lab הזה תבנו ארכיטקטורה פשוטה שממחישה את השימוש בגישה לנקודת קצה (endpoint) של PSC עם CloudSQL.
איור 1.

לשיעור ה-Lab הזה תצטרכו שני פרויקטים או שתי רשתות VPC נפרדות באותו פרויקט.
מטרות
בשיעור ה-Lab הזה תלמדו איך לבצע את המשימה הבאה:
- יצירת מכונה של Cloud SQL עם קובץ מצורף לשירות PSC.
- יצירת כתובת IP סטטית
- יצירת נקודת קצה (endpoint) מסוג PSC ב-VPC של הלקוח כדי להתחבר למסד הנתונים של CloudSQL
- מאמתים את הגישה למסד הנתונים של SQL מ-VM לבדיקה ברשת הצרכן באמצעות כתובת ה-IP של נקודת הקצה של PSC.
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
ב-מסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-codelab הזה בדפדפן. לא צריך להתקין שום דבר.
3. משימה 1: הגדרת סביבה לפרויקט מסד נתונים באמצעות Terraform
בפרויקט מסד הנתונים,ניצור VPC בהתאמה אישית עם כללי חומת אש ותת-רשת. פותחים את מסוף Cloud ובוחרים את הפרויקט שבו ישמש מסד הנתונים.
- פותחים את 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 Editor. בוחרים באפשרות עורך ומוודאים שמאשרים את כל ההנחיות הנדרשות כדי שהממשק ייטען.
- אחרי הטעינה, עוברים אל 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 |
|
הוספת כללים לחומת האש |
|
- מעתיקים את הקוד הבא ומדביקים אותו בקובץ 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"]
}
- חוזרים אל הטרמינל של Cloud Shell, מוודאים שאתם בספרייה terraform-db
cd terraform-dbומריצים את הפקודות הבאות:
terraform init
מאתחלת את ספריית העבודה. בשלב הזה מתבצעת הורדה של הספקים שנדרשים להגדרה הנתונה.
terraform plan
יוצרת תוכנית ביצוע שמראה אילו פעולות Terraform תבצע כדי לפרוס את התשתית.
- כדי ליצור את המשאבים, מריצים את הפקודה
terraform applyומקלידיםyesכדי להריץ.
4. משימה 2: יצירת מכונה של Cloud SQL עם צירוף של PSC (Terraform)
נשתמש ב-Terraform כדי ליצור מופע CloudSQL עם אפשרות PSC כדי לאפשר קישוריות. משלימים את ההגדרה בפרויקט מסד הנתונים.
- עוברים לתצוגה של Cloud Shell Editor. מוודאים שאתם נמצאים בתיקייה
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
}
- חוזרים אל הטרמינל של Cloud Shell ומוודאים שאתם נמצאים בספרייה terraform-db. כדי ליצור את המשאבים, מריצים את הפקודה
terraform applyומקלידיםyesכדי להריץ. יצירת מכונת CloudSQL עם קובץ מצורף של PSC עשויה להימשך 5 דקות ויותר.
אימות מסד הנתונים
- אחרי שהפעולה מסתיימת, עוברים אל SQL במסוף ובוחרים את מופע מסד הנתונים psc-sql-db שנוצר.
- בצד ימין, מרחיבים את האפשרויות של SQL ובוחרים באפשרות Connections (חיבורים).
- בכרטיסיית הסיכום אפשר לראות מידע על החיבור.
- מעתיקים את הכתובת של קובץ השירות ושומרים אותה במקום כלשהו במערכת.
- תצטרכו את זה כדי להשלים את שלב 8 במשימה 3.

- בצד ימין, מרחיבים את החלונית הנפתחת של אפשרויות SQL ובוחרים באפשרות משתמשים.
- אמור להופיע משתמש בשם testsql עם הסיסמה cloudsql24 (הסיסמה הזו תשמש לגישה למסד הנתונים בהמשך)
5. משימה 3: הגדרת סביבה לפרויקט צרכן (Terraform)
בפרויקט הצרכן ניצור VPC מותאם אישית עם כללי חומת אש ורשת משנה. פותחים את Cloud Console ובוחרים את הפרויקט שבו רוצים להשתמש.
- בחלק העליון של המסוף, בצד שמאל של סמל 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 (אישור) כדי לפתוח את התיקייה בעורך.

- בוחרים את הקובץ variable.tf ומוסיפים את הקוד הבא. מחליפים את הטקסט
your-consumer-project-id-hereבמזהה הפרויקט בפועל של הלקוח בתוך מרכאות. מחליפים את הטקסטyour-psc-attachment-id-hereבכתובת של קובץ ה-PSC המצורף בתוך מרכאות. זהו המזהה שהעתקתם במשימה 2, קטע 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 |
|
הוספת כללים לחומת האש |
|
- מעתיקים את הקוד הבא ומדביקים אותו בקובץ 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"]
}
- חוזרים אל הטרמינל של Cloud Shell, מוודאים שאתם בספרייה terraform-consumer
cd terraform-consumerבפרויקט הצרכן ומריצים את הפקודות הבאות:
terraform init
מאתחלת את ספריית העבודה. בשלב הזה מתבצעת הורדה של הספקים שנדרשים להגדרה הנתונה.
terraform plan
יוצרת תוכנית ביצוע שמראה אילו פעולות Terraform תבצע כדי לפרוס את התשתית.
- כדי ליצור את המשאבים, מריצים את הפקודה
terraform applyומקלידיםyesכדי להריץ.
6. משימה 4: יצירת נקודת קצה (endpoint) של PSC לצירוף של מסד נתונים של SQL במכונה וירטואלית לבדיקה בפרויקט של הצרכן (Terraform)
משלימים את ההגדרה בפרויקט הצרכן.
- חוזרים אל Cloud Shell Editor, פותחים את הספרייה terraform-consumer ובוחרים את הקובץ
psc.tf. מוסיפים את קוד Terraform הבא לקובץ. הפעולה הזו יוצרת כתובת IP פנימית סטטית, נקודת קצה (endpoint) של PSC ומכונה וירטואלית לבדיקה עם Maria DB מותקן.
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
cd terraform-consumerבפרויקט הצרכן ומריצים את הפקודות הבאות:
terraform plan
יוצרת תוכנית ביצוע שמראה אילו פעולות Terraform תבצע כדי לפרוס את התשתית.
- כדי ליצור את המשאבים, מריצים את הפקודה
terraform applyומקלידיםyesכדי להריץ - מכיוון שהמכונה הווירטואלית ונקודת הקצה שלנו נמצאות באזורים שונים, אנחנו צריכים להפעיל גישה גלובלית בנקודת הקצה של PSC. אנחנו עושים את זה דרך המסוף
- במסוף של פרויקט הצרכן, עוברים אל Private Service Connect. בכרטיסייה Connected Endpoint, בקטע Endpoint, בוחרים באפשרות psc-sql-endpoint.
- עכשיו לוחצים על עריכה,ואז על תיבת הסימון לצד האפשרות הפעלת גישה גלובלית ועל שמירה.

- כדי לאמת את הקישוריות, ממשיכים לשלב הבא
7. משימה 5: אימות הקישוריות של נקודת הקצה מ-VM באמצעות כתובת ה-IP של PSC
משלימים את הפעולה הזו בפרויקט של הצרכן
- עוברים אל VM Instance. בוחרים באפשרות sql-test-vm.
- בוחרים באפשרות SSH כדי להתחבר למכונה הווירטואלית.
- מתחברים למסד הנתונים דרך נקודת הקצה באמצעות הפקודה הבאה:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
- אחרי שנוצר החיבור, יוצרים מסד נתונים עם שם psc-sql-db.
CREATE DATABASE remotesqldb;
- בסיום, מקלידים exit כדי לצאת מהחיבור.
8. משימה 6: אימות של רשומה במסד נתונים
צריך להשלים את האימות הזה בפרויקט מסד הנתונים
- בחלק העליון של המסוף, בצד שמאל של סמל Google Cloud, לוחצים על התפריט הנפתח ואז בוחרים בכרטיסייה all (הכול).


- מהרשימה של הפרויקטים, בוחרים את מזהה הפרויקט של מסד הנתונים כדי להמשיך.
- עוברים אל SQL, בוחרים במסד הנתונים psc-sql-db, מרחיבים את האפשרויות של SQL ובוחרים באפשרות Databases (מסדי נתונים). אמורה להופיע מסד הנתונים שיצרתם שנקרא remotesqldb מהמכונה הווירטואלית של פרויקט הצרכן**
.**

9. הסרת המשאבים
צריך להשלים את הפעולה הזו בפרויקט של מסד הנתונים
- בחירת מזהה פרויקט מסד הנתונים
- עוברים אל Cloud Shell ומוודאים שמזהה פרויקט מסד הנתונים מופיע.
- עוברים לספרייה terraform-db
cd terraform-db, מריצים את הפקודהterraform destroyומקלידיםyes. כל המשאבים שיצרתם בפרויקט מסד הנתונים באמצעות Terraform יוסרו.
משלימים את הפעולה הזו בפרויקט של הצרכן
- בחירת מזהה פרויקט הצרכן
- עוברים אל Cloud Shell ומוודאים שמזהה פרויקט הלקוח מופיע.
- עוברים לספרייה terraform-consumer
cd terraform-consumer, מריצים את הפקודה הבאהterraform destroyומקלידיםyes. כל המשאבים שיצרתם בפרויקט db באמצעות Terraform יוסרו.
10. מזל טוב
סיימתם להגדיר בהצלחה את מופע Cloud SQL עם צירוף PSC ויצרתם נקודת קצה של Private Service Connect בענן וירטואלי פרטי (VPC) אחר. הצלחת להתחבר למסד הנתונים מ-VM מרוחק דרך נקודת הקצה של PSC.
מידע נוסף
מידע נוסף על Private Service Connect ו-Cloud SQL