1. نظرة عامة
هناك عدة خيارات للاتصال بمثيل Cloud SQL خاص من مشروع آخر أو شبكات VPC أخرى. تتيح Private Service Connect (PSC) لمطوّري الخدمات إمكانية عرض خدماتهم من خلال مرفقات الخدمات. يمكن للمستهلكين استخدام مرفقات الخدمة هذه لإنشاء نقاط نهاية PSC و/أو الخلفيات في PSC في بيئتهم والاتصال بخدمات المنتجين هذه من خلال عنوان IP خاص محدّد.
تتيح خدمة Cloud SQL إمكانية استخدام مرفق خدمة PSC للسماح بإجراء اتصال خاص. في هذا الاختبار، يمكنك ضبط الخيار واختباره.
في هذا الدرس، ستُنشئ بنية بسيطة توضّح استخدام إمكانية الوصول إلى نقطة نهاية PSC مع CloudSQL.
الشكل 1
لإجراء هذا الدرس العملي، ستحتاج إلى مشروعَين أو شبكتَي VPC منفصلتَين في المشروع نفسه.
الأهداف
في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ المهمة التالية:
- أنشئ مثيل CloudSQL باستخدام مرفق خدمة PSC.
- إنشاء عنوان IP ثابت
- إنشاء نقطة نهاية PSC في شبكة VPC للمستهلك للاتصال بقاعدة بيانات CloudSQL
- تأكَّد من إمكانية الوصول إلى قاعدة بيانات SQL من جهاز افتراضي تجريبي في شبكة المستهلكين عبر عنوان IP لنقطة نهاية PSC.
2. الإعداد والمتطلبات
إعداد البيئة حسب السرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها واجهات برمجة تطبيقات Google. ويمكنك تعديلها في أي وقت.
- يكون معرّف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ وحدة تحكّم Cloud Console سلسلة فريدة تلقائيًا، ولا يهمّك عادةً معرفة محتواها. في معظم ورشات عمل رموز البرامج، عليك الإشارة إلى معرّف المشروع (يُعرَف عادةً باسم
PROJECT_ID
). إذا لم يعجبك المعرّف الذي تم إنشاؤه، يمكنك إنشاء معرّف آخر عشوائي. يمكنك بدلاً من ذلك تجربة عنوانك الخاص لمعرفة ما إذا كان متاحًا. ولا يمكن تغييره بعد هذه الخطوة ويبقى ساريًا طوال مدة المشروع. - يُرجى العِلم أنّ هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات عن كلّ من هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تُكلّفك المشاركة في هذا الدليل التعليمي للترميز الكثير، إن لم يكن أيّ تكلفة على الإطلاق. لإيقاف الموارد لتجنُّب تحصيل رسوم بعد انتهاء هذا الدليل التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يكون مستخدمو Google Cloud الجدد مؤهّلين للاستفادة من برنامج الفترة التجريبية المجانية التي تقدّم رصيدًا بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من أنّه يمكن تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدليل التعليمي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:
من المفترض ألا تستغرق عملية توفير البيئة والاتصال بها سوى بضع لحظات. عند الانتهاء، من المفترض أن يظهر لك ما يلي:
يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. ويقدّم هذا الدليل دليلاً منزليًا دائمًا بسعة 5 غيغابايت، ويتم تشغيله على Google Cloud، ما يُحسِّن بشكل كبير أداء الشبكة والمصادقة. يمكنك تنفيذ جميع أعمالك في هذا الدليل التعليمي للترميز داخل متصفّح. لست بحاجة إلى تثبيت أي تطبيق.
3- المهمة رقم 1 إعداد بيئة لمشروع قاعدة البيانات باستخدام (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. اختَر المحرِّر، وتأكَّد من السماح بأي طلبات ضرورية حتى تتمكّن الواجهة من التحميل.
- بعد التحميل، انتقِل إلى ملف > فتح مجلد وانتقِل إلى /home/your-user-name/terraform-db وانقر على حسنًا لفتح المجلد في المحرِّر.
- اختَر ملف 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 لتنفيذ إجراءات مختلفة كما هو موضّح أدناه.
تفعيل واجهات برمجة التطبيقات |
|
إنشاء شبكة 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 إنشاء مثيل 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
}
- ارجع إلى وحدة طرفية Cloud Shell وتأكَّد من أنّك في الدليل terraform-db. الآن لإنشاء الموارد، يمكنك تنفيذ الأمر
terraform apply
ثم كتابةyes
لتشغيله. قد يستغرق إنشاء مثيل CloudSQL مع إرفاق PSC ما يصل إلى 5 دقائق أو أكثر.
التحقّق من قاعدة البيانات
- بعد اكتمال العملية، انتقِل إلى SQL في وحدة التحكّم، واختَر مثيل قاعدة البيانات psc-sql-db الذي تم إنشاؤه حديثًا.
- على يمين الصفحة، وسِّع القائمة المنسدلة لخيارات SQL واختَر Connections (عمليات الربط).
- ضمن علامة التبويب "الملخّص"، يمكنك الاطّلاع على معلومات عن عملية الاتصال.
- انسخ عنوان مرفق الخدمة واحفظه في مكان ما على نظامك.
- ستحتاج إلى هذا لإكمال المهمة 3، الخطوة 8.
- على يمين الصفحة، وسِّع القائمة المنسدلة لخيارات SQL واختَر المستخدمون.
- من المفترض أن يظهر لك مستخدم باسم testsql وكلمة المرور cloudsql24 (ستُستخدَم هذه المعلومات للوصول إلى قاعدة البيانات لاحقًا).
5- المهمة رقم 3 إعداد بيئة لمشروع المستهلك (Terraform)
في مشروع المستهلك، سننشئ شبكة VPC مخصّصة تتضمّن قواعد جدار الحماية والشبكة الفرعية. افتح وحدة تحكّم السحابة الإلكترونية واختَر المشروع الذي ستستخدمه.
- في أعلى وحدة التحكّم على يسار رمز Google Cloud، انقر على القائمة المنسدلة ثم اختَر علامة التبويب الكل.
- من المشاريع المدرَجة، اختَر رقم تعريف مشروع المستهلك للمتابعة.
- افتح 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 لرقم تعريف مشروع المستهلك. اختَر المحرِّر، وتأكَّد من السماح بأي طلبات ضرورية حتى تتمكّن الواجهة من التحميل.
- بعد التحميل، انتقِل إلى ملف > فتح مجلد وانتقِل إلى /home/your-user-name/terraform-consumer وانقر على حسنًا لفتح المجلد في المحرِّر.
- اختَر ملف 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 لتنفيذ إجراءات مختلفة كما هو موضّح أدناه.
تفعيل واجهات برمجة التطبيقات |
|
إنشاء شبكة 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 إنشاء نقطة نهاية PSC لإرفاق قاعدة بيانات SQL في مشروع المستهلك واختبار الجهاز الظاهري (Terraform)
أكمِل عملية الضبط هذه في مشروع المستهلك.
- ارجع إلى محرِّر Cloud Shell، وافتح الدليل terraform-consumer واختَر الملف
psc.tf
. أضِف رمز Terraform التالي إلى الملف. يؤدي ذلك إلى إنشاء عنوان IP داخلي ثابت ونقطة نهاية 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. ضمن علامة التبويب نقطة النهاية المتصلة، ابحث ضمن قسم "نقطة النهاية" واختَر psc-sql-endpoint.
- اختَر الآن تعديل، ثم انقر على مربّع الاختيار بجانب تفعيل الوصول العام وخيار حفظ.
- المتابعة إلى الخطوة التالية للتحقّق من إمكانية الاتصال
7- المهمة رقم 5 التحقّق من إمكانية الاتصال بنقطة النهاية من جهاز افتراضي عبر عنوان IP لوحدة التحكّم في حدود الجلسة
أكمِل ذلك في مشروع المستهلك
- انتقِل إلى مثيل الجهاز الافتراضي. اختَر 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، انقر على القائمة المنسدلة ثم اختَر علامة التبويب الكل.
- من المشاريع المدرَجة، اختَر رقم تعريف مشروع قاعدة البيانات للمتابعة.
- انتقِل إلى SQL، واختَر قاعدة البيانات psc-sql-db، وسِّع خيارات SQL واختَر قواعد البيانات. من المفترض أن تظهر لك قاعدة البيانات التي أنشأتها للتو باسم remotesqldb من جهاز المستهلك الافتراضي للمشروع**
.
**
9. تنظيف
إكمال ذلك في مشروع قاعدة البيانات
- اختَر معرّف مشروع قاعدة البيانات.
- انتقِل إلى Cloud Shell وتأكَّد من ظهور رقم تعريف مشروع قاعدة البيانات.
- انتقِل إلى الدليل terraform-db
cd terraform-db
ونفِّذ الأمر التاليterraform destroy
واكتبyes
، وسيتمّ حذف جميع الموارد التي أنشأتها في مشروع db باستخدام Terraform.
أكمِل ذلك في مشروع "المستهلك"
- اختَر رقم تعريف مشروع المستهلك.
- انتقِل إلى Cloud Shell وتأكَّد من ظهور رقم تعريف مشروع المستهلك.
- انتقِل إلى الدليل terraform-consumer
cd terraform-consumer
ونفِّذ الأمر التاليterraform destroy
واكتبyes
، وسيتمّ حذف جميع الموارد التي أنشأتها في مشروع قاعدة البيانات باستخدام Terraform.
10. تهانينا
نبارك لك على ضبط إعدادات مثيل Cloud SQL بنجاح باستخدام مرفق PSC وإنشاء نقطة نهاية Private Service Connect في شبكة VPC أخرى. لقد تمكّنت من الاتصال بنجاح من جهاز افتراضي عن بُعد عبر نقطة نهاية PSC بقاعدة البيانات.
مزيد من المعلومات
يمكنك الاطّلاع على مزيد من المعلومات عن Private Service Connect وCloud SQL.