فعال کردن Private Service Connect در نمونه موجود Cloud SQL در حال اجرا PSA (Terraform)

1. بررسی اجمالی

چندین گزینه برای اتصال به یک نمونه خصوصی Cloud SQL از پروژه دیگر یا شبکه VPC وجود دارد. می‌توانید از دسترسی به خدمات خصوصی (PSA) برای دسترسی به آدرس‌های 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 را از VMهای آزمایشی، در VPCهای تولیدکننده و مصرف کننده، تأیید کنید

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورت‌حساب فراتر از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.

3. وظیفه 1. راه اندازی محیط برای پروژه پایگاه داده با (Terraform)

در پروژه پایگاه داده، شبکه‌سازی سرویس را فعال می‌کنیم، VPC ایجاد می‌کنیم، محدوده PSA ایجاد می‌کنیم، همتاسازی شبکه خدمات ایجاد می‌کنیم و قوانین فایروال را ایجاد می‌کنیم. کنسول ابری را باز کنید و پروژه ای را که برای پایگاه داده استفاده می کنید انتخاب کنید.

  1. Cloud Shell را که در بالای کنسول خود در سمت راست قرار دارد باز کنید، مطمئن شوید که ID پروژه پایگاه داده برای پروژه پایگاه داده را در 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. پس از بارگیری به مسیر File > Open Folder بروید و به /home/your-user-name/terraform-db-psc بروید و Ok را انتخاب کنید تا پوشه در ویرایشگر باز شود. 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 برای انجام اقدامات مختلف همانطور که در زیر توضیح داده شده است اضافه کنیم.

API ها را فعال کنید

resource "google_project_service" "default"

VPC ایجاد کنید

resource "google_compute_network" "default"

قوانین فایروال را اضافه کنید

resource "google_compute_firewall" "allow_icmp"

محدوده PSA ایجاد کنید

resource "google_compute_global_address" "psa_range"

همتاسازی ایجاد کنید

resource "google_service_networking_connection" "private_connection"

  1. موارد زیر را کپی کرده و در فایل 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. برای تکمیل کار 3 مرحله 5 به این IP نیاز دارید.

5c00f08b0f44c957.png

  1. در سمت چپ گزینه های SQL را باز کنید و Users را انتخاب کنید.
  2. شما باید کاربری به نام testsql با رمز عبور cloudsql24 را ببینید (از این رمز عبور برای دسترسی به db بعدا استفاده خواهد شد)

5. وظیفه 3. ساخت VM آزمایشی و اتصال به نمونه SQL از داخل پروژه db (Terraform)

بیایید از Terraform برای ایجاد یک Gateway VM و 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 و VM با نصب MariaDB ایجاد می کند.

تایید پایگاه داده

این را در پروژه مصرف کننده کامل کنید

  1. به VM Instance بروید. db-vm-test را انتخاب کنید
  2. برای اتصال به VM گزینه SSH را انتخاب کنید.
  3. از طریق IP محلی که قبلاً کپی کرده اید با موارد زیر به DB متصل شوید:
mysql --host=172.18.0.2 --user=testsql --password=cloudsql24

ps آدرس IP را به IP واقعی خود تغییر دهید تا متصل شود.

  1. هنگامی که اتصال برقرار شد اجازه دهید یک پایگاه داده با localvpcsqldb زیر ایجاد کنید.
CREATE DATABASE localvpcsqldb;
  1. پس از تکمیل، خروج را تایپ کنید تا از اتصال خارج شوید. برای بستن VM دوباره exit را تایپ کنید.

6. وظیفه 4. PSC را در نمونه CloudSQL فعال کنید

بیایید از دستورات gcloud برای فعال کردن گزینه PSC برای اجازه اتصال استفاده کنیم. این پیکربندی را در پروژه پایگاه داده تکمیل کنید.

  1. به نمای Cloud Shell بروید.
  2. دستور زیر را در Cloud Shell اجرا کنید.
  • Ensure 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 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. پس از بارگیری به مسیر 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 خود را در نقل قول جایگزین کنید. این شناسه ای است که در بخش 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 برای انجام اقدامات مختلف همانطور که در زیر توضیح داده شده است اضافه کنیم.

API ها را فعال کنید

resource "google_project_service"

VPC ایجاد کنید

resource "google_compute_network"

دروازه NAT ایجاد کنید

resource "google_compute_router"
resource "google_compute_router_nat"

قوانین فایروال را اضافه کنید

resource "google_compute_firewall"

  1. موارد زیر را کپی کرده و در فایل 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 DB در پروژه مصرف کننده و تست VM (Terraform)

این پیکربندی را در پروژه مصرف کننده کامل کنید.

  1. به ویرایشگر Cloud Shell برگردید، دایرکتوری terraform-consumer-psc را باز کنید و فایل psc.tf را انتخاب کنید. کد Terraform زیر را به فایل اضافه کنید. این یک IP داخلی ثابت، یک نقطه پایانی PSC و یک ماشین مجازی آزمایشی با نصب ماریا 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. بررسی اتصال نقطه پایانی از VM از طریق آدرس IP PSC

این را در پروژه مصرف کننده کامل کنید

  1. به VM Instance بروید. Remote-sql-test-vm را انتخاب کنید
  2. برای اتصال به VM گزینه SSH را انتخاب کنید.
  3. از طریق نقطه پایانی با موارد زیر به DB متصل شوید:
mysql --host=192.168.100.100 --user=testsql --password=cloudsql24
  1. هنگامی که اتصال برقرار شد اجازه دهید یک پایگاه داده با psc-sql-db زیر ایجاد کنید.
CREATE DATABASE remotepscpsasqldb;
  1. پس از تکمیل، خروج را تایپ کنید تا از اتصال خارج شوید. برای بستن VM دوباره exit را تایپ کنید.

10. وظیفه 8. بررسی ورود پایگاه داده

این تأیید را در پروژه پایگاه داده تکمیل کنید

  1. در بالای کنسول خود در سمت راست در کنار نماد Google Cloud، روی منوی کشویی کلیک کنید و سپس برگه همه را انتخاب کنید.

نوار پروژهنوار پروژه 2

  1. از بین پروژه های فهرست شده ID پروژه پایگاه داده خود را برای ادامه انتخاب کنید.
  2. به SQL بروید، پایگاه داده psc-psa-sql-db را انتخاب کنید، گزینه های SQL را گسترش دهید و Databases را انتخاب کنید. شما باید پایگاه داده ای را که به تازگی ایجاد کرده اید به نام remotepscpsasqldb از پروژه مصرف کننده VM و همچنین localvpcsqldb از پروژه db VM** را ببینید . **

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 اکثر منابعی که در پروژه db خود با Terraform ایجاد کرده اید حذف خواهند شد. ممکن است شبکه سرویس حذف نشود و خطا بدهد.
  4. سپس فایل های زیر را از پوشه terraform-db-psc حذف کنید.
rm -r terraform.tfstate terraform.tfstate.backup
  1. بعد در کنسول به شبکه های VPC بروید
  2. Data-net VPC را انتخاب کنید ، PRIVATE SERVICES ACCESS را انتخاب کنید، در قسمت Allocated IP Ranges for Services ، psa-range-database-net را انتخاب کنید و گزینه Release را انتخاب کنید.

e4dbfa8953c5b036.png

  1. سپس VPC NETWORK PEERING را انتخاب کنید، servicenetworking-googleapis-com را انتخاب کنید و گزینه Delete را انتخاب کنید.

4deab14044461d2d.png

  1. بعد، Delete VPC network را انتخاب کنید 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