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

۱. مرور کلی

چندین گزینه برای اتصال به یک نمونه خصوصی Cloud SQL از یک پروژه دیگر یا شبکه VPC وجود دارد. می‌توانید از دسترسی به سرویس‌های خصوصی (PSA) برای دسترسی به آدرس‌های IP داخلی گوگل و سرویس‌های شخص ثالث از طریق اتصالات خصوصی استفاده کنید. برای گسترش دسترسی به پایگاه داده، اکنون می‌توانید اتصال سرویس خصوصی (PSC) را نیز فعال کنید.

اتصال سرویس خصوصی (PSC) به تولیدکنندگان سرویس اجازه می‌دهد تا سرویس‌های خود را از طریق پیوست‌های سرویس ارائه دهند، که مصرف‌کنندگان می‌توانند از آنها برای ایجاد نقاط پایانی PSC و/یا پایانه‌های PSC در محیط خود استفاده کنند. از طریق این نقاط پایانی PSC، آنها می‌توانند از طریق یک IP خصوصی مشخص شده توسط کاربر به سرویس‌های تولیدکننده متصل شوند.

در این آزمایشگاه می‌توانید گزینه را پیکربندی و آزمایش کنید.

در این آزمایش، شما یک معماری ساده خواهید ساخت که استفاده از دسترسی نقطه پایانی PSA و PSC را با CloudSQL نشان می‌دهد.

شکل ۱.

e0e0f83704cc9d62.png

برای این آزمایش، به دو پروژه یا VPC های جداگانه در یک پروژه نیاز دارید .

اهداف

در این آزمایشگاه یاد خواهید گرفت که چگونه وظایف زیر را انجام دهید:

  • فعال کردن شبکه سرویس
  • تنظیم PSA
  • ایجاد یک نمونه CloudSQL با PSA
  • پیوست سرویس PSC را فعال کنید.
  • یک نقطه پایانی PSC در VPC مصرف‌کننده ایجاد کنید تا به پایگاه داده CloudSQL متصل شود.
  • دسترسی به پایگاه داده SQL را از ماشین‌های مجازی آزمایشی، در هر دو VPC تولیدکننده و مصرف‌کننده، تأیید کنید.

۲. تنظیمات و الزامات

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه کد را می‌توان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.

۳. وظیفه ۱. راه‌اندازی محیط برای پروژه پایگاه داده با (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. پس از بارگذاری، به مسیر 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 را تایپ کنید.

۴. وظیفه ۲. ایجاد نمونه 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 ممکن است تا ۱۵+ دقیقه طول بکشد.

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

  1. پس از اتمام، به SQL در کنسول بروید، نمونه پایگاه داده psc-psa-sql-db که به تازگی ایجاد شده است را انتخاب کنید.
  2. در سمت چپ، اسلایدر گزینه‌های SQL را باز کنید و Connections را انتخاب کنید.
  3. در زیر برگه خلاصه می‌توانید اطلاعات مربوط به اتصال را مشاهده کنید.
  4. آدرس IP داخلی را کپی کرده و آن را در جایی از سیستم خود ذخیره کنید. همانطور که می‌بینید، این آدرس از محدوده‌ای که رزرو کرده‌ایم، اختصاص داده شده است.
  5. برای انجام مرحله ۵ از وظیفه ۳ به این IP نیاز خواهید داشت.

5c00f08b0f44c957.png

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

۵. وظیفه ۳. ایجاد ماشین مجازی آزمایشی و اتصال به نمونه 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. به VM Instance بروید. db-vm-test را انتخاب کنید.
  2. برای اتصال به ماشین مجازی، گزینه SSH را انتخاب کنید.
  3. از طریق IP محلی که قبلاً کپی کرده‌اید با استفاده از دستور زیر به پایگاه داده متصل شوید:
mysql --host=172.18.0.2 --user=testsql --password=cloudsql24

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

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

۶. وظیفه ۴. فعال کردن 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 به‌روزرسانی می‌کند. این کار حدود ۱۰+ دقیقه طول خواهد کشید.

اگر خطای انتظار برای اتمام زمان دریافت کردید، باید دستوری برای ادامه و مشاهده پیشرفت کار نیز به شما داده شود. چیزی شبیه به «می‌توانید با اجرای دستور `gcloud beta sql operations wait –project ` به انتظار برای عملیات ادامه دهید

لطفاً توجه داشته باشید که می‌توانید از ابتدا یک پایگاه داده جدید را با فعال بودن PSA و PSC مستقر کنید.

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

  1. پس از اتمام، به SQL در کنسول بروید، نمونه پایگاه داده psc-psa-sql-db را انتخاب کنید.
  2. در سمت چپ، اسلایدر گزینه‌های SQL را باز کنید و Connections را انتخاب کنید.
  3. در زیر برگه خلاصه می‌توانید اطلاعات مربوط به اتصال را مشاهده کنید.
  4. آدرس پیوست سرویس را کپی کرده و در جایی از سیستم خود ذخیره کنید.
  5. برای تکمیل مرحله ۸ از مرحله ۵ به این نیاز خواهید داشت.

2cf5ce71eceea326.png

۷. وظیفه ۵. راه‌اندازی محیط برای پروژه مصرف‌کننده (Terraform)

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

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

نوار پروژهپروژه بار ۲

  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 خود که در گیومه قرار دارد جایگزین کنید. این شناسه‌ای است که در وظیفه ۴ بخش ۵-۷ کپی کردید. 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 هستید. در پروژه consumer، cd terraform-consumer-psc اجرا کنید و دستورات زیر را اجرا کنید.

terraform init

دایرکتوری کاری را مقداردهی اولیه می‌کند. این مرحله ارائه‌دهندگان مورد نیاز برای پیکربندی داده شده را دانلود می‌کند.

terraform plan

یک طرح اجرایی ایجاد می‌کند که نشان می‌دهد Terraform چه اقداماتی را برای استقرار زیرساخت شما انجام خواهد داد.

  1. حالا برای ایجاد منابع، دستور terraform apply اجرا کنید و برای اجرا، yes را تایپ کنید.

۸. وظیفه ۶. ایجاد نقطه پایانی PSC به ضمیمه SQL DB در پروژه مصرف‌کننده و آزمایش ماشین مجازی (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 هستید. در پروژه consumer، cd terraform-consumer-psc اجرا کنید و دستورات زیر را اجرا کنید.

terraform plan

یک طرح اجرایی ایجاد می‌کند که نشان می‌دهد Terraform چه اقداماتی را برای استقرار زیرساخت شما انجام خواهد داد.

  1. حالا برای ایجاد منابع، دستور terraform apply اجرا کنید و برای اجرا، yes را تایپ کنید.

۹. وظیفه ۷. تأیید اتصال نقطه پایانی از ماشین مجازی از طریق آدرس IP PSC

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

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

۱۰. وظیفه ۸. تأیید ورودی پایگاه داده

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

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

نوار پروژهپروژه بار ۲

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

36f5c03124ca20f6.png

۱۱. تمیز کردن

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

  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. گزینه database-net VPC را انتخاب کنید ، سپس گزینه PRIVATE SERVICES ACCESS را انتخاب کنید، در قسمت Allocated IP Ranges for Services ، گزینه psa-range-database-net را انتخاب کنید و در نهایت گزینه Release را انتخاب کنید.

e4dbfa8953c5b036.png

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

4deab14044461d2d.png

  1. بعد، حذف شبکه VPC را انتخاب کنید 2f4e96399b73d405.png

۱۲. تبریک

تبریک می‌گوییم، شما با موفقیت یک نمونه Cloud SQL را با پیوست‌های PSA و PSC پیکربندی کردید و یک نقطه پایانی Private Service Connect در یک VPC دیگر ایجاد کردید.

بیشتر بدانید

می‌توانید درباره Private Service Connect و Cloud SQL بیشتر بخوانید

سایر آزمایشگاه‌های کد مرتبط: https://codelabs.developers.google.com/codelabs/cloudsql-psc-terraform