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

1. نظرة عامة

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

تتيح خدمة Private Service Connect (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 APIs. ويمكنك تعديلها في أي وقت.
  • رقم تعريف المشروع هو معرّف فريد في جميع مشاريع 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 وإنشاء ربط شبكة الخدمة وإنشاء قواعد جدار الحماية. افتح Cloud Console واختَر المشروع الذي ستستخدمه لقاعدة البيانات.

  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 واختَر عمليات الربط.
  3. ضمن علامة التبويب "الملخّص"، يمكنك الاطّلاع على معلومات حول الاتصال.
  4. انسخ عنوان IP الداخلي واحفظه في مكان ما على نظامك. وكما ترى، تم تعيينه من النطاق الذي حجزناه.
  5. ستحتاج إلى عنوان IP هذا لإكمال الخطوة 5 من المهمة 3.

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.
  • استبدِل Ensure YOUR_DB_PROJECT_HERE بمعرّف مشروع قاعدة البيانات.
  • استبدِل Ensure 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 واختَر عمليات الربط.
  3. ضمن علامة التبويب "الملخّص"، يمكنك الاطّلاع على معلومات حول الاتصال.
  4. انسخ عنوان ملحق الخدمة واحفظه في مكان ما على نظامك.
  5. ستحتاج إلى ذلك لإكمال الخطوة 8 من المهمة 5 التالية.

2cf5ce71eceea326.png

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

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

  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. بعد التحميل، انتقِل إلى ملف > فتح مجلد (File > Open Folder) وانتقِل إلى /home/your-user-name/terraform-consumer-psc وانقر على حسنًا (Ok) لفتح المجلد في المحرّر. 78f5eb9f2f82f1b0.png
  3. اختَر الملف variable.tf وأضِف ما يلي. استبدِل النص your-consumer-project-id-here بمعرّف مشروع المستهلك الفعلي بين علامتَي اقتباس، واستبدِل النص your-psc-attachment-id-here بعنوان مرفق psc بين علامتَي اقتباس. هذا هو رقم التعريف الذي نسخته في القسم 5-7 من المهمة 4 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 الخاص بخدمة Private Service Connect

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

  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 من الجهاز الافتراضي لمشروع قاعدة البيانات**.**

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 باسم database-net، ثمّ الوصول الخاص إلى الخدمات، ثمّ ضمن نطاقات عناوين IP المخصّصة للخدمات، اختَر psa-range-database-net، ثمّ انقر على إصدار.

e4dbfa8953c5b036.png

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

4deab14044461d2d.png

  1. بعد ذلك، انقر على حذف شبكة السحابة VPC 2f4e96399b73d405.png.

12. تهانينا

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

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

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

Codelab ذو صلة: https://codelabs.developers.google.com/codelabs/cloudsql-psc-terraform