เปิดใช้ 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 ส่วนตัวที่ผู้ใช้ระบุผ่านปลายทาง PSC เหล่านี้

ในแล็บนี้ คุณสามารถกำหนดค่าและทดสอบตัวเลือกได้

ใน Lab นี้ คุณจะได้สร้างสถาปัตยกรรมอย่างง่ายที่แสดงให้เห็นการใช้การเข้าถึงปลายทาง PSA และ PSC กับ CloudSQL

รูปที่ 1

e0e0f83704cc9d62.png

สำหรับแล็บนี้ คุณจะต้องมี 2 โปรเจ็กต์หรือ VPC แยกกันในโปรเจ็กต์เดียวกัน

วัตถุประสงค์

ในแล็บนี้ คุณจะได้เรียนรู้วิธีทำงานต่อไปนี้

  • เปิดใช้ Service Networking
  • ตั้งค่า PSA
  • สร้างอินสแตนซ์ Cloud SQL ด้วย PSA
  • เปิดใช้การแนบบริการ PSC
  • สร้างปลายทาง PSC ใน VPC ของผู้ใช้เพื่อเชื่อมต่อกับฐานข้อมูล CloudSQL
  • ยืนยันการเข้าถึงฐานข้อมูล SQL จาก VM ทดสอบในทั้ง VPC ของผู้ผลิตและผู้บริโภค

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

55efc1aaa7a4d3ad.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้

7ffe5cbb04455448.png

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดใน Codelab นี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร

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/ชื่อผู้ใช้ของคุณ/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 เพื่อดำเนินการต่างๆ ตามที่อธิบายไว้ด้านล่าง

เปิดใช้ 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"

สร้างการ Peering

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 นี้เพื่อทํางานที่ 3 ขั้นตอนที่ 5 ให้เสร็จสมบูรณ์

5c00f08b0f44c957.png

  1. ทางด้านซ้าย ให้ขยายแถบเลื่อนตัวเลือก SQL และเลือกผู้ใช้
  2. คุณควรเห็นผู้ใช้ชื่อ testsql ที่มีรหัสผ่าน cloudsql24 (ระบบจะใช้รหัสผ่านนี้เพื่อเข้าถึง db ในภายหลัง)

5. งานที่ 3 สร้าง VM สำหรับทดสอบและเชื่อมต่อกับอินสแตนซ์ SQL จากภายในโปรเจ็กต์ db (Terraform)

มาใช้ Terraform เพื่อสร้าง 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 เลือก db-vm-test
  2. เลือกตัวเลือก SSH เพื่อเชื่อมต่อกับ VM
  3. เชื่อมต่อกับ DB ผ่าน IP ในเครื่องที่คุณคัดลอกไว้ก่อนหน้านี้ด้วยข้อมูลต่อไปนี้
mysql --host=172.18.0.2 --user=testsql --password=cloudsql24

ป.ล.เปลี่ยนที่อยู่ IP เป็น IP จริงเพื่อให้เชื่อมต่อได้

  1. เมื่อสร้างการเชื่อมต่อแล้ว ให้สร้างฐานข้อมูลด้วย localvpcsqldb ต่อไปนี้
CREATE DATABASE localvpcsqldb;
  1. เมื่อเสร็จแล้ว ให้พิมพ์ exit เพื่อออกจากการเชื่อมต่อ พิมพ์ exit อีกครั้งเพื่อปิด VM

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. คุณจะต้องใช้ข้อมูลนี้เพื่อทํางานถัดไปในขั้นตอนที่ 5 ขั้นตอนที่ 8

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. เมื่อโหลดแล้ว ให้ไปที่ไฟล์ > เปิดโฟลเดอร์ แล้วไปที่ /home/ชื่อผู้ใช้ของคุณ/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 เพื่อดำเนินการต่างๆ ตามที่อธิบายไว้ด้านล่าง

เปิดใช้ 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. คัดลอกและวางข้อความต่อไปนี้ลงในไฟล์ 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 DB ในโปรเจ็กต์ผู้บริโภคและ VM ทดสอบ (Terraform)

กำหนดค่านี้ให้เสร็จสมบูรณ์ในโปรเจ็กต์ของผู้บริโภค

  1. กลับไปที่โปรแกรมแก้ไข Cloud Shell แล้วเปิดไดเรกทอรี terraform-consumer-psc แล้วเลือกไฟล์ psc.tf เพิ่มโค้ด Terraform ต่อไปนี้ลงในไฟล์ ซึ่งจะสร้าง IP ภายในแบบคงที่, ปลายทาง PSC และ VM ทดสอบที่ติดตั้ง 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 ยืนยันการเชื่อมต่ออุปกรณ์ปลายทางจาก VM ผ่านที่อยู่ IP ของ PSC

ดำเนินการนี้ในโปรเจ็กต์ของผู้บริโภค

  1. ไปที่อินสแตนซ์ VM เลือก remote-sql-test-vm
  2. เลือกตัวเลือก SSH เพื่อเชื่อมต่อกับ VM
  3. เชื่อมต่อกับ DB ผ่านปลายทางด้วยข้อมูลต่อไปนี้
mysql --host=192.168.100.100 --user=testsql --password=cloudsql24
  1. เมื่อสร้างการเชื่อมต่อแล้ว ให้สร้างฐานข้อมูลด้วย psc-sql-db ต่อไปนี้
CREATE DATABASE remotepscpsasqldb;
  1. เมื่อเสร็จแล้ว ให้พิมพ์ exit เพื่อออกจากการเชื่อมต่อ พิมพ์ exit อีกครั้งเพื่อปิด VM

10. งานที่ 8 ยืนยันรายการฐานข้อมูล

ทำการยืนยันนี้ให้เสร็จสมบูรณ์ในโปรเจ็กต์ฐานข้อมูล

  1. ที่ด้านบนของคอนโซลทางด้านขวาข้างไอคอน Google Cloud ให้คลิกเมนูแบบเลื่อนลง แล้วเลือกแท็บทั้งหมด

แถบโปรเจ็กต์แถบโปรเจ็กต์ 2

  1. จากโปรเจ็กต์ที่แสดง ให้เลือกรหัสโปรเจ็กต์ฐานข้อมูลเพื่อดำเนินการต่อ
  2. ไปที่ SQL เลือกฐานข้อมูล psc-psa-sql-db ขยายตัวเลือก SQL แล้วเลือกฐานข้อมูล คุณควรเห็นฐานข้อมูลที่เพิ่งสร้างชื่อ remotepscpsasqldb จาก VM ของโปรเจ็กต์ผู้ใช้ และเห็น localvpcsqldb จาก VM ของโปรเจ็กต์ 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 ระบบจะนำทรัพยากรส่วนใหญ่ที่คุณสร้างในโปรเจ็กต์ DB ด้วย 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 NETWORK PEERING เลือก 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