1. סקירה כללית
יש כמה אפשרויות להתחבר למכונה פרטית של Cloud SQL מפרויקט אחר או מרשתות VPC אחרות. Private Service Connect (PSC) מאפשר ליוצרי שירותים לחשוף את השירותים שלהם באמצעות קבצים מצורפים לשירות. צרכני השירות יכולים להשתמש בקבצים המצורפים האלה כדי ליצור נקודות קצה של PSC ו/או קצוות עורפיים של PSC בסביבה שלהם, ולהתחבר לשירותי הבעלים האלה דרך כתובת IP פרטית שצוינה.
ב-Cloud SQL יש אפשרות להשתמש בשירות PSC כדי לאפשר חיבור פרטי. בשיעור ה-Lab הזה תוכלו להגדיר ולבדוק את האפשרות הזו.
בשיעור ה-Lab הזה תלמדו איך ליצור ארכיטקטורה פשוטה שממחישה את השימוש בגישה לנקודת קצה מסוג PSC עם CloudSQL.
איור 1.
בשיעור ה-Lab הזה תצטרכו שני פרויקטים או רשתות VPC נפרדות באותו פרויקט.
מטרות
בשיעור ה-Lab הזה תלמדו איך לבצע את המשימה הבאה:
- יצירת מכונה של CloudSQL עם צירוף שירות של PSC.
- יצירת כתובת IP סטטית
- יצירת נקודת קצה מסוג PSC ב-VPC של הצרכן כדי להתחבר למסד הנתונים של CloudSQL
- אימות הגישה למסד הנתונים של SQL ממכונת וירטואלית לבדיקה ברשת של הצרכן דרך כתובת ה-IP של נקודת הקצה של PSC.
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- שם הפרויקט הוא השם המוצג של המשתתפים בפרויקט. זוהי מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן אותו.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שמגדירים אותו. מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי. בדרך כלל לא משנה מה המחרוזת הזו. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט (בדרך כלל מזהים אותו בתור
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניכם, תוכלו ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות כתובת משלכם ולבדוק אם היא זמינה. לא ניתן לשנות את השם אחרי השלב הזה, והוא יישאר למשך כל תקופת הפרויקט. - לידיעתך, יש ערך שלישי, מספר פרויקט, שמשתמשים בו בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי העזרה.
- בשלב הבא, כדי להשתמש במשאבים או ב-API של Cloud, תצטרכו להפעיל את החיוב במסוף Cloud. השלמת הקודלאב הזה לא תעלה הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים אחרי סיום המדריך, אפשר למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בסך 300$.
הפעלת Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל בסדנת הקוד הזו נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת ב-Cloud.
במסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:
תהליך ההקצאה והחיבור לסביבת העבודה אמור להימשך רק כמה רגעים. בסיום, אמור להופיע משהו כזה:
המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, משפרת מאוד את ביצועי הרשת ואת האימות. אתם יכולים לבצע את כל העבודה בקודלאב הזה בדפדפן. אין צורך להתקין שום דבר.
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. בוחרים באפשרות editor (עריכה) ומוודאים שמאשרים את כל ההנחיות הנדרשות כדי שהממשק יוכל לטעון.
- אחרי הטעינה, עוברים אל קובץ > פתיחת תיקייה, עוברים אל /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, מוודאים שנמצאים בספרייה
cd terraform-db
terraform-db ומריצים את הפקודות הבאות:
terraform init
אתחול ספריית העבודה. בשלב הזה מתבצעת הורדה של הספקים הנדרשים להגדרה הנתונה.
terraform plan
יצירת תוכנית ביצוע שמציגה את הפעולות ש-Terraform תבצע כדי לפרוס את התשתית.
- עכשיו, כדי ליצור את המשאבים, מריצים את הפקודה
terraform apply
ומקלידיםyes
כדי להריץ אותה.
4. משימה 2: יצירת מכונה של CloudSQL עם צירוף 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 ובוחרים את הפרויקט שבו רוצים להשתמש.
- בחלק העליון של המסוף, בצד שמאל ליד סמל 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 עבור מזהה הפרויקט של הצרכן. בוחרים באפשרות editor (עריכה) ומוודאים שמאשרים את כל ההנחיות הנדרשות כדי שהממשק יוכל לטעון.
- אחרי הטעינה, עוברים אל קובץ > פתיחת תיקייה, עוברים אל /home/your-user-name/terraform-consumer ובוחרים באפשרות Ok כדי לפתוח את התיקייה בעורך.
- בוחרים את הקובץ variable.tf ומוסיפים את הטקסט הבא. מחליפים את הטקסט
your-consumer-project-id-here
במזהה הפרויקט של הצרכן בפועל במירכאות. מחליפים את הטקסטyour-psc-attachment-id-here
בכתובת הקובץ המצורף ל-PSC במירכאות. זהו המזהה שהעתקת בקטע 2-5 של משימה 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" }
- לאחר מכן פותחים את הקובץ 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, מוודאים שנמצאים בספרייה
cd terraform-consumer
terraform-consumer בפרויקט של הצרכן ומריצים את הפקודות הבאות:
terraform init
אתחול ספריית העבודה. בשלב הזה מתבצעת הורדה של הספקים הנדרשים להגדרה הנתונה.
terraform plan
יצירת תוכנית ביצוע שמציגה את הפעולות ש-Terraform תבצע כדי לפרוס את התשתית.
- עכשיו, כדי ליצור את המשאבים, מריצים את הפקודה
terraform apply
ומקלידיםyes
כדי להריץ אותה.
6. משימה 4: יצירת נקודת הקצה של PSC לקובץ המצורף של מסד הנתונים של SQL בפרויקט של הצרכן ובמכונה הווירטואלית לבדיקה (Terraform)
משלימים את ההגדרה הזו בפרויקט של הצרכן.
- חוזרים לעורך של Cloud Shell, פותחים את הספרייה terraform-consumer ובוחרים את הקובץ
psc.tf
. מוסיפים לקובץ את הקוד הבא של Terraform. כך נוצרת כתובת IP פנימית סטטית, נקודת קצה מסוג PSC ומכונה וירטואלית לבדיקה עם 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 }
- חוזרים למסוף Cloud Shell, מוודאים שנמצאים בספרייה
cd terraform-consumer
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. מסביבת ה-VM של פרויקט הצרכן**
.
**, אתם אמורים לראות את מסד הנתונים שיצרתם, שנקרא remotesqldb.
9. הסרת המשאבים
מבצעים את הפעולה הזו בפרויקט Database
- בוחרים את מזהה הפרויקט של מסד הנתונים.
- נכנסים ל-Cloud Shell ומוודאים שמופיע מזהה הפרויקט של מסד הנתונים.
- עוברים לספרייה terraform-db
cd terraform-db
ומריצים את הפקודה הבאהterraform destroy
ומקלידיםyes
. כל המשאבים שיצרתם בפרויקט ה-db באמצעות Terraform יוסרו.
משלימים את הפעולה הזו בפרויקט של הצרכן
- בוחרים את מזהה הפרויקט של הצרכן.
- נכנסים ל-Cloud Shell ומוודאים שמופיע מזהה הפרויקט של הצרכן.
- עוברים לספרייה terraform-consumer
cd terraform-consumer
ומריצים את הפקודה הבאהterraform destroy
ומקלידיםyes
. כל המשאבים שיצרתם בפרויקט מסוג db באמצעות Terraform יוסרו.
10. מזל טוב
סיימתם להגדיר מכונה של Cloud SQL עם צירוף PSC וליצור נקודת קצה של Private Service Connect ב-VPC אחר. הצלחתם להתחבר למסד הנתונים ממכונה וירטואלית מרוחקת דרך נקודת הקצה של PSC.
מידע נוסף
מידע נוסף זמין במאמר Private Service Connect ו-Cloud SQL