تفعيل Private Service Connect على مثيل Cloud SQL الحالي الذي يشغّل PSA (Terraform)

1. نظرة عامة

هناك عدة خيارات للاتصال بمثيل Cloud SQL خاص من مشروع آخر أو شبكة VPC. يمكنك استخدام ميزة "الوصول إلى الخدمات الخاصة" للوصول إلى عناوين IP الداخلية لشركة Google والخدمات التابعة لجهات خارجية من خلال عمليات الربط الخاصة. لتوسيع نطاق الوصول إلى قاعدة البيانات، يمكنك الآن أيضًا تفعيل Private Service Connect (PSC).

تسمح Private Service Connect (PSC) لمطوّري الخدمات بعرض خدماتهم من خلال مرفقات الخدمات التي يمكن للمستهلكين استخدامها لإنشاء نقاط نهاية PSC و/أو الخلفيات في PSC في بيئتهم. ومن خلال نقاط نهاية PSC هذه، يمكنهم الاتصال بخدمات المنتج عبر عنوان IP خاص يحدّده المستخدم.

في هذا الاختبار، يمكنك ضبط الخيار واختباره.

في هذا الدرس، ستُنشئ بنية بسيطة توضّح استخدام الوصول إلى نقاط نهاية PSA وPSC مع CloudSQL.

الشكل 1

e0e0f83704cc9d62.png

لإجراء هذا الدرس العملي، ستحتاج إلى مشروعَين أو شبكتَي VPC منفصلتَين في المشروع نفسه.

الأهداف

في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ المهمة التالية:

  • تفعيل ربط الخدمات ببعضها
  • إعداد PSA
  • إنشاء مثيل CloudSQL باستخدام PSA
  • فعِّل إرفاق خدمة PSC.
  • إنشاء نقطة نهاية PSC في شبكة VPC للمستهلك للاتصال بقاعدة بيانات CloudSQL
  • التحقّق من إمكانية الوصول إلى قاعدة بيانات SQL من الأجهزة الافتراضية الاختبارية، في كلٍّ من شبكات VPC الخاصة بالمنتج والمستهلك

2. الإعداد والمتطلبات

إعداد البيئة حسب السرعة التي تناسبك

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها واجهات برمجة تطبيقات Google. ويمكنك تعديلها في أي وقت.
  • يكون معرّف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ وحدة تحكّم Cloud Console سلسلة فريدة تلقائيًا، ولا يهمّك عادةً معرفة محتواها. في معظم ورشات عمل رموز البرامج، عليك الإشارة إلى معرّف المشروع (يُعرَف عادةً باسم PROJECT_ID). إذا لم يعجبك المعرّف الذي تم إنشاؤه، يمكنك إنشاء معرّف آخر عشوائي. يمكنك بدلاً من ذلك تجربة عنوانك الخاص لمعرفة ما إذا كان متاحًا. ولا يمكن تغييره بعد هذه الخطوة ويبقى ساريًا طوال مدة المشروع.
  • يُرجى العِلم أنّ هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات عن كلّ من هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تُكلّفك المشاركة في هذا الدليل التعليمي للترميز الكثير، إن لم يكن أيّ تكلفة على الإطلاق. لإيقاف الموارد لتجنُّب تحصيل رسوم بعد انتهاء هذا الدليل التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يكون مستخدمو Google Cloud الجدد مؤهّلين للاستفادة من برنامج الفترة التجريبية المجانية التي تبلغ قيمتها 300 دولار أمريكي.

بدء Cloud Shell

على الرغم من أنّه يمكن تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدليل التعليمي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:

55efc1aaa7a4d3ad.png

من المفترض ألا تستغرق عملية توفير البيئة والاتصال بها سوى بضع لحظات. عند الانتهاء، من المفترض أن يظهر لك ما يلي:

7ffe5cbb04455448.png

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. ويقدّم هذا الدليل دليلاً منزليًا دائمًا بسعة 5 غيغابايت، ويتم تشغيله على Google Cloud، ما يُحسِّن بشكل كبير أداء الشبكة والمصادقة. يمكنك تنفيذ جميع أعمالك في هذا الدليل التعليمي للترميز داخل متصفّح. لست بحاجة إلى تثبيت أي تطبيق.

3- المهمة رقم 1 إعداد بيئة لمشروع قاعدة البيانات باستخدام (Terraform)

في مشروع قاعدة البيانات، سنعمل على تفعيل "الشبكات في الخدمة" وإنشاء شبكة VPC وإنشاء نطاق PSA وإنشاء ربط "الشبكات في الخدمة" وإنشاء قواعد جدار الحماية. افتح وحدة تحكّم السحابة الإلكترونية واختَر المشروع الذي ستستخدمه لقاعدة البيانات.

  1. افتح Cloud Shell في أعلى وحدة التحكّم على يسار الصفحة، وتأكَّد من ظهور معرّف المشروع لقاعدة البيانات في مشروع قاعدة البيانات في Cloud Shell، وأكِّد أي طلبات للسماح بالوصول. 4261e776f64ea978.png
  2. أنشئ مجلدًا باسم terraform-db-psc وانتقِل إليه.
mkdir terraform-db-psc  && cd terraform-db-psc
  1. أنشئ الملفات main.tf وvariable.tf وnat-vm.tf وdatabase.tf.
touch main.tf variable.tf nat-vm.tf database.tf 
  1. انتقِل إلى عرض محرِّر Cloud Shell. اختَر المحرِّر، وتأكَّد من السماح بأي طلبات ضرورية حتى تتمكّن الواجهة من التحميل.
  2. بعد التحميل، انتقِل إلى ملف > فتح مجلد وانتقِل إلى ‎/home/your-user-name/terraform-db-psc وانقر على حسنًا لفتح المجلد في المحرِّر. 78f5eb9f2f82f1b0.png
  3. اختَر ملف 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"
}
  1. بعد ذلك، افتح الملف main.tf. سنضيف بعض رموز terraform لتنفيذ إجراءات مختلفة كما هو موضّح أدناه.

تفعيل واجهات برمجة التطبيقات

resource "google_project_service" "default"

إنشاء شبكة VPC

resource "google_compute_network" "default"

إضافة قواعد جدار الحماية

resource "google_compute_firewall" "allow_icmp"

إنشاء نطاق إعلانات المنتجات داخل التطبيق

resource "google_compute_global_address" "psa_range"

إنشاء شراكة

resource "google_service_networking_connection" "private_connection"

  1. انسخ ما يلي والصقه في ملف main .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
}
  1. ارجع إلى وحدة طرفية Cloud Shell وتأكَّد من أنّك في الدليل terraform-db-psc cd terraform-db-psc ونفِّذ الأوامر التالية:

terraform init

تبدأ عملية إعداد دليل العمل. تعمل هذه الخطوة على تنزيل موفّري الخدمات المطلوبين للإعداد المحدّد.

terraform plan

تُنشئ خطة تنفيذ توضّح الإجراءات التي ستتّخذها Terraform لنشر البنية الأساسية.

  1. الآن لإنشاء الموارد، يمكنك تنفيذ الأمر terraform apply ثم كتابة yes لتشغيله.

4. المهمة رقم 2 إنشاء مثيل CloudSQL باستخدام أداة PSA (Terraform)

لنستخدم Terraform لإنشاء مثيل CloudSQL، مع خيار PSA للسماح بالاتصال. أكمِل عملية الضبط هذه في مشروع قاعدة البيانات.

  1. انتقِل إلى عرض محرِّر 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 
}

  1. ارجع إلى وحدة طرفية Cloud Shell وتأكَّد من أنّك في الدليل terraform-db-psc. الآن لإنشاء الموارد، يمكنك تنفيذ الأمر terraform apply ثم كتابة yes لتشغيله. قد يستغرق إنشاء مثيل CloudSQL باستخدام PSA ما يصل إلى 15 دقيقة أو أكثر.

التحقّق من قاعدة البيانات

  1. بعد الانتهاء، انتقِل إلى SQL في وحدة التحكّم، واختَر مثيل قاعدة البيانات psc-psa-sql-db الذي تم إنشاؤه حديثًا.
  2. على يمين الصفحة، وسِّع القائمة المنسدلة لخيارات SQL واختَر Connections (عمليات الربط).
  3. ضمن علامة التبويب "الملخّص"، يمكنك الاطّلاع على معلومات عن عملية الاتصال.
  4. انسخ عنوان IP الداخلي واحفظه في مكان ما على نظامك. كما ترى، تمّ تعيينه من النطاق الذي حجزناه.
  5. ستحتاج إلى عنوان IP هذا لإكمال المهمة 3، الخطوة 5.

5c00f08b0f44c957.png

  1. على يمين الصفحة، وسِّع القائمة المنسدلة لخيارات SQL واختَر المستخدمون.
  2. من المفترض أن يظهر لك مستخدم باسم testsql وكلمة المرور cloudsql24 (ستُستخدَم هذه المعلومات للوصول إلى قاعدة البيانات لاحقًا).

5- المهمة رقم 3 إنشاء جهاز افتراضي تجريبي والاتصال بمثيل SQL من داخل مشروع قاعدة البيانات (Terraform)

لنستخدم Terraform لإنشاء جهاز افتراضي تجريبي وبوابة NAT. أكمِل عملية الضبط هذه في مشروع قاعدة البيانات.

  1. انتقِل إلى عرض محرِّر 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
}
  1. ارجع إلى وحدة طرفية Cloud Shell وتأكَّد من أنّك في الدليل terraform-db-psc. الآن لإنشاء الموارد، يمكنك تنفيذ الأمر terraform plan, then terraform apply ثم كتابة yes لتشغيله. سيؤدي ذلك إلى إنشاء بوابة NAT وجهاز افتراضي تم تثبيت MariaDB عليه.

التحقّق من قاعدة البيانات

أكمِل ذلك في مشروع المستهلك

  1. انتقِل إلى مثيل الجهاز الافتراضي. اختَر db-vm-test.
  2. اختَر SSH للاتصال بالجهاز الافتراضي.
  3. يمكنك الاتصال بقاعدة البيانات من خلال عنوان IP المحلي الذي نسخته سابقًا باستخدام ما يلي:
mysql --host=172.18.0.2 --user=testsql --password=cloudsql24

ملاحظة: عليك تغيير عنوان IP إلى عنوان IP الفعلي لكي يتم الاتصال.

  1. عند إنشاء الاتصال، سننشئ قاعدة بيانات باستخدام localvpcsqldb التالية.
CREATE DATABASE localvpcsqldb;
  1. بعد اكتمال العملية، اكتب exit للخروج من عملية الاتصال. اكتب exit مرة أخرى لإغلاق الجهاز الظاهري.

6- المهمة رقم 4 تفعيل PSC على مثيل CloudSQL

لنستخدم أوامر gcloud لتفعيل خيار PSC للسماح بالاتصال. أكمِل عملية الضبط هذه في مشروع قاعدة البيانات.

  1. انتقِل إلى عرض Cloud Shell.
  2. نفِّذ الأمر التالي في Cloud Shell.
  • استبدِل YOUR_DB_PROJECT_HERE بمعرّف مشروع قاعدة البيانات.
  • استبدِل 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
  1. سيؤدي ذلك إلى تعديل قاعدة البيانات الحالية من خلال إرفاق ملف PSC. سيستغرق ذلك بعض الوقت، أي أكثر من 10 دقائق.

إذا ظهرت لك رسالة خطأ متعلّقة بوقت الانتظار، من المفترض أن يعرض لك أيضًا الأمر لمواصلة الاطّلاع على مستوى التقدّم. مثل "يمكنك مواصلة انتظار اكتمال العملية من خلال تشغيل gcloud beta sql operations wait –project "

يُرجى العلم أنّه يمكنك نشر قاعدة بيانات جديدة مع تفعيل PSA وPSC من البداية.

التحقّق من قاعدة البيانات

  1. بعد اكتمال العملية، انتقِل إلى SQL في وحدة التحكّم، واختَر مثيل قاعدة البيانات psc-psa-sql-db.
  2. على يمين الصفحة، وسِّع القائمة المنسدلة لخيارات SQL واختَر Connections (عمليات الربط).
  3. ضمن علامة التبويب "الملخّص"، يمكنك الاطّلاع على معلومات عن عملية الاتصال.
  4. انسخ عنوان مرفق الخدمة واحفظه في مكان ما على نظامك.
  5. ستحتاج إلى هذا الإجراء لإكمال المهمة التالية 5، الخطوة 8.

2cf5ce71eceea326.png

7- المهمة رقم 5 إعداد بيئة مشروع المستهلك (Terraform)

في مشروع المستهلك، سننشئ شبكة VPC مخصّصة تتضمّن قواعد جدار الحماية والشبكة الفرعية. افتح وحدة تحكّم السحابة الإلكترونية واختَر المشروع الذي ستستخدمه.

  1. في أعلى وحدة التحكّم على يسار رمز Google Cloud، انقر على القائمة المنسدلة ثم اختَر علامة التبويب الكل.

شريط المشروعشريط المشروع 2

  1. من المشاريع المدرَجة، اختَر رقم تعريف مشروع المستهلك للمتابعة.
  2. افتح Cloud Shell في أعلى وحدة التحكّم على يسار الصفحة، وتأكَّد من ظهور رقم تعريف مشروع المستهلك في Cloud Shell، وأكِّد أي طلبات للسماح بالوصول.
  3. أنشئ مجلدًا باسم terraform-consumer-psc وانتقِل إليه.
mkdir terraform-consumer-psc  && cd terraform-consumer-psc
  1. أنشئ ملفّات main.tf وvariable.tf وpsc.tf.
touch main.tf variable.tf psc.tf 
  1. انتقِل إلى عرض محرِّر Cloud Shell لرقم تعريف مشروع المستهلك. اختَر المحرِّر، وتأكَّد من السماح بأي طلبات ضرورية حتى تتمكّن الواجهة من التحميل.
  2. بعد التحميل، انتقِل إلى ملف > فتح مجلد وانتقِل إلى ‎/home/your-user-name/terraform-consumer-psc وانقر على حسنًا لفتح المجلد في المحرِّر. 78f5eb9f2f82f1b0.png
  3. اختَر ملف variable.tf وأضِف ما يلي. استبدِل النص your-consumer-project-id-here بـ معرّف مشروع المستهلك الفعلي بين علامتَي اقتباس. استبدِل النص your-psc-attachment-id-here بعنوان مرفق psc بين علامتَي اقتباس. هذا هو رقم التعريف الذي نسخته في المهمة 4، القسم 5-7. d7ac9629a59abfc6.png
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"
}

  1. بعد ذلك، افتح الملف main.tf. سنضيف بعض رموز terraform لتنفيذ إجراءات مختلفة كما هو موضّح أدناه.

تفعيل واجهات برمجة التطبيقات

resource "google_project_service"

إنشاء شبكة VPC

resource "google_compute_network"

إنشاء بوابة NAT

resource "google_compute_router"
resource "google_compute_router_nat"

إضافة قواعد جدار الحماية

resource "google_compute_firewall"

  1. انسخ ما يلي والصقه في ملف 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_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"]
 }
  1. ارجع إلى وحدة تحكّم Cloud Shell وتأكَّد من أنّك في الدليل terraform-consumer-psc cd terraform-consumer-psc في مشروع المستهلِك ونفِّذ الأوامر التالية.

terraform init

تبدأ عملية إعداد دليل العمل. تعمل هذه الخطوة على تنزيل موفّري الخدمات المطلوبين للإعداد المحدّد.

terraform plan

تُنشئ خطة تنفيذ توضّح الإجراءات التي ستتّخذها Terraform لنشر البنية الأساسية.

  1. الآن لإنشاء الموارد، يمكنك تنفيذ الأمر terraform apply ثم كتابة yes لتشغيله.

8. المهمة 6 إنشاء نقطة نهاية PSC لإرفاق قاعدة بيانات SQL في مشروع المستهلك واختبار الجهاز الظاهري (Terraform)

أكمِل عملية الضبط هذه في مشروع المستهلك.

  1. ارجع إلى محرِّر 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
}
  1. ارجع إلى وحدة تحكّم Cloud Shell وتأكَّد من أنّك في الدليل terraform-consumer-psc cd terraform-consumer-psc في مشروع المستهلِك ونفِّذ الأوامر التالية.

terraform plan

تُنشئ خطة تنفيذ توضّح الإجراءات التي ستتّخذها Terraform لنشر البنية الأساسية.

  1. الآن لإنشاء الموارد، نفِّذ الأمر terraform apply واكتب yes لتشغيله.

9. المهمة 7 التحقّق من إمكانية الاتصال بنقطة النهاية من جهاز افتراضي عبر عنوان IP لوحدة التحكّم في حدود الجلسة

أكمِل ذلك في مشروع المستهلك

  1. انتقِل إلى مثيل الجهاز الافتراضي. اختَر remote-sql-test-vm.
  2. اختَر SSH للاتصال بالجهاز الافتراضي.
  3. يمكنك الاتصال بقاعدة البيانات من خلال نقطة النهاية باستخدام ما يلي:
mysql --host=192.168.100.100 --user=testsql --password=cloudsql24
  1. عند إنشاء اتصال، يجب إنشاء قاعدة بيانات باستخدام psc-sql-db التالية.
CREATE DATABASE remotepscpsasqldb;
  1. بعد اكتمال العملية، اكتب exit للخروج من عملية الاتصال. اكتب exit مرة أخرى لإغلاق الجهاز الظاهري.

10. المهمة 8 التحقّق من إدخال قاعدة البيانات

أكمِل عملية إثبات الملكية هذه في مشروع قاعدة البيانات.

  1. في أعلى وحدة التحكّم على يسار رمز Google Cloud، انقر على القائمة المنسدلة ثم اختَر علامة التبويب الكل.

شريط المشروعشريط المشروع 2

  1. من المشاريع المدرَجة، اختَر رقم تعريف مشروع قاعدة البيانات للمتابعة.
  2. انتقِل إلى SQL، واختَر قاعدة البيانات psc-psa-sql-db، وسِّع خيارات SQL واختَر قواعد البيانات. من المفترض أن تظهر لك قاعدة البيانات التي أنشأتها للتو باسم remotepscpsasqldb من جهاز المستهلك الافتراضي للمشروع وكذلك localvpcsqldb من جهاز db الافتراضي للمشروع**.**

36f5c03124ca20f6.png

11. تنظيف

أكمِل ذلك في مشروع "المستهلك"

  1. اختَر رقم تعريف مشروع المستهلك.
  2. انتقِل إلى Cloud Shell وتأكَّد من ظهور رقم تعريف مشروع المستهلك.
  3. انتقِل إلى الدليل terraform-consumer-psc cd terraform-consumer-psc ونفِّذ الأمر التالي terraform destroy واكتب yes، وسيتمّت إزالة جميع الموارد التي أنشأتها في مشروع المستهلك باستخدام Terraform.

إكمال ذلك في مشروع قاعدة البيانات

  1. اختَر معرّف مشروع قاعدة البيانات.
  2. انتقِل إلى Cloud Shell وتأكَّد من ظهور رقم تعريف مشروع قاعدة البيانات.
  3. انتقِل إلى الدليل terraform-db-psc cd terraform-db-psc ونفِّذ الأمر التالي terraform destroy واكتب yes ستتم إزالة معظم الموارد التي أنشأتها في مشروعك على قاعدة البيانات باستخدام Terraform. قد لا يتم حذف شبكة الخدمة ويظهر خطأ.
  4. بعد ذلك، احذف الملفات التالية من مجلد terraform-db-psc.
rm -r terraform.tfstate terraform.tfstate.backup
  1. بعد ذلك، انتقِل إلى شبكات VPC في وحدة التحكّم.
  2. اختَر قاعدة بيانات-شبكة VPC، ثمّ اختَر الوصول إلى الخدمات الخاصة، ضمن نطاقات IP المخصّصة للخدمات، ثمّ اختَر psa-range-database-net، ثمّ اختَر الإصدار.

e4dbfa8953c5b036.png

  1. بعد ذلك، اختَر VPC NETWORK PEERING (ربط شبكة VPC)، ثم اختَر servicenetworking-googleapis-com، ثم اختَر حذف.

4deab14044461d2d.png

  1. بعد ذلك، اختَر حذف شبكة VPC 2f4e96399b73d405.png.

12. تهانينا

مبروك، لقد نجحت في ضبط إعدادات مثيل Cloud SQL مع إرفاق PSA وPSC وإنشاء نقطة نهاية Private Service Connect في VPC أخرى.

مزيد من المعلومات

يمكنك الاطّلاع على مزيد من المعلومات عن Private Service Connect وCloud SQL.

دورة تعليمية أخرى ذات صلة: https://codelabs.developers.google.com/codelabs/cloudsql-psc-terraform