1. ภาพรวม
คุณมีตัวเลือกหลายอย่างในการเชื่อมต่อกับอินสแตนซ์ Cloud SQL แบบส่วนตัวจากโปรเจ็กต์หรือเครือข่าย VPC อื่น คุณสามารถใช้การเข้าถึงบริการแบบส่วนตัว (PSA) เพื่อเข้าถึงที่อยู่ IP ภายในของบริการของ Google และบริการของบุคคลที่สามผ่านการเชื่อมต่อส่วนตัว หากต้องการขยายสิทธิ์เข้าถึงฐานข้อมูล ตอนนี้คุณสามารถเปิดใช้ Private Service Connect (PSC) ได้ด้วย
Private Service Connect (PSC) ช่วยให้ผู้ผลิตบริการแสดงบริการของตนผ่านการเชื่อมต่อบริการ ซึ่งผู้บริโภคสามารถใช้เพื่อสร้างปลายทาง PSC และ/หรือแบ็กเอนด์ PSC ในสภาพแวดล้อมของตนได้ ผู้ใช้สามารถเชื่อมต่อกับบริการของผู้ผลิตผ่านที่อยู่ IP ส่วนตัวที่ผู้ใช้ระบุผ่านปลายทาง PSC เหล่านี้
ในแล็บนี้ คุณสามารถกำหนดค่าและทดสอบตัวเลือกได้
ใน Lab นี้ คุณจะได้สร้างสถาปัตยกรรมอย่างง่ายที่แสดงให้เห็นการใช้การเข้าถึงปลายทาง PSA และ PSC กับ CloudSQL
รูปที่ 1

สำหรับแล็บนี้ คุณจะต้องมี 2 โปรเจ็กต์หรือ VPC แยกกันในโปรเจ็กต์เดียวกัน
วัตถุประสงค์
ในแล็บนี้ คุณจะได้เรียนรู้วิธีทำงานต่อไปนี้
- เปิดใช้ Service Networking
- ตั้งค่า PSA
- สร้างอินสแตนซ์ Cloud SQL ด้วย PSA
- เปิดใช้การแนบบริการ PSC
- สร้างปลายทาง PSC ใน VPC ของผู้ใช้เพื่อเชื่อมต่อกับฐานข้อมูล CloudSQL
- ยืนยันการเข้าถึงฐานข้อมูล SQL จาก VM ทดสอบในทั้ง VPC ของผู้ผลิตและผู้บริโภค
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



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

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

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดใน Codelab นี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร
3. งานที่ 1 ตั้งค่าสภาพแวดล้อมสำหรับโปรเจ็กต์ฐานข้อมูลด้วย (Terraform)
ในโปรเจ็กต์ฐานข้อมูล เราจะเปิดใช้ระบบเครือข่ายบริการ สร้าง VPC สร้างช่วง PSA สร้างการเชื่อมต่อแบบเพียร์ระบบเครือข่ายบริการ และสร้างกฎไฟร์วอลล์ เปิด Cloud Console แล้วเลือกโปรเจ็กต์ที่จะใช้สำหรับฐานข้อมูล
- เปิด Cloud Shell ที่ด้านบนของคอนโซลทางด้านขวา ตรวจสอบว่าคุณเห็นรหัสโปรเจ็กต์ของฐานข้อมูลสำหรับโปรเจ็กต์ฐานข้อมูลใน Cloud Shell ยืนยันข้อความแจ้งเพื่ออนุญาตการเข้าถึง

- สร้างโฟลเดอร์ชื่อ terraform-db-psc แล้วย้ายไปที่โฟลเดอร์
mkdir terraform-db-psc && cd terraform-db-psc
- สร้างไฟล์ main.tf, variable.tf, nat-vm.tf และ database.tf
touch main.tf variable.tf nat-vm.tf database.tf
- เปลี่ยนไปใช้มุมมองเครื่องมือแก้ไข Cloud Shell เลือกเอดิเตอร์ และตรวจสอบว่าคุณอนุญาตพรอมต์ที่จำเป็นเพื่อให้โหลดอินเทอร์เฟซได้
- เมื่อโหลดแล้ว ให้ไปที่ไฟล์ > เปิดโฟลเดอร์ แล้วไปที่ /home/ชื่อผู้ใช้ของคุณ/terraform-db-psc แล้วเลือกตกลงเพื่อเปิดโฟลเดอร์ในโปรแกรมแก้ไข

- เลือกไฟล์ 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"
}
- จากนั้นเปิดไฟล์ main.tf เราจะเพิ่มโค้ด Terraform เพื่อดำเนินการต่างๆ ตามที่อธิบายไว้ด้านล่าง
เปิดใช้ API |
|
สร้าง VPC |
|
เพิ่มกฎไฟร์วอลล์ |
|
สร้างช่วง PSA |
|
สร้างการ Peering |
|
- คัดลอกและวางข้อความต่อไปนี้ลงในไฟล์ 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
}
- กลับไปที่เทอร์มินัล Cloud Shell ตรวจสอบว่าคุณอยู่ในไดเรกทอรี terraform-db-psc
cd terraform-db-pscแล้วเรียกใช้คำสั่งต่อไปนี้
terraform init
เริ่มต้นไดเรกทอรีการทำงาน ขั้นตอนนี้จะดาวน์โหลดผู้ให้บริการที่จำเป็นสำหรับการกำหนดค่าที่ระบุ
terraform plan
สร้างแผนการดำเนินการ ซึ่งแสดงการดำเนินการที่ Terraform จะใช้เพื่อติดตั้งใช้งานโครงสร้างพื้นฐาน
- ตอนนี้หากต้องการสร้างทรัพยากร ให้เรียกใช้
terraform applyคำสั่งแล้วพิมพ์yesเพื่อเรียกใช้
4. งานที่ 2 สร้างอินสแตนซ์ CloudSQL ด้วย PSA (Terraform)
มาใช้ Terraform เพื่อสร้างอินสแตนซ์ CloudSQL โดยใช้ตัวเลือก PSA เพื่ออนุญาตการเชื่อมต่อกัน ทำการกำหนดค่านี้ในโปรเจ็กต์ฐานข้อมูลให้เสร็จสมบูรณ์
- เปลี่ยนไปใช้มุมมองเครื่องมือแก้ไข 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
}
- กลับไปที่เทอร์มินัล Cloud Shell และตรวจสอบว่าคุณอยู่ในไดเรกทอรี terraform-db-psc ตอนนี้หากต้องการสร้างทรัพยากร ให้เรียกใช้
terraform applyคำสั่งแล้วพิมพ์yesเพื่อเรียกใช้ การสร้างอินสแตนซ์ CloudSQL ด้วย PSA อาจใช้เวลาอย่างน้อย 15 นาที
ยืนยันฐานข้อมูล
- หลังจากเสร็จสิ้น ให้ไปที่ SQL ในคอนโซล แล้วเลือกอินสแตนซ์ฐานข้อมูล psc-psa-sql-db ที่สร้างขึ้นใหม่
- ทางด้านซ้าย ให้ขยายแถบเลื่อนตัวเลือก SQL และเลือกการเชื่อมต่อ
- คุณดูข้อมูลเกี่ยวกับการเชื่อมต่อได้ในแท็บสรุป
- คัดลอกที่อยู่ IP ภายในและบันทึกไว้ที่ใดที่หนึ่งในระบบ อย่างที่คุณเห็น ระบบได้กำหนดหมายเลขจากช่วงที่เราจองไว้
- คุณจะต้องใช้ IP นี้เพื่อทํางานที่ 3 ขั้นตอนที่ 5 ให้เสร็จสมบูรณ์

- ทางด้านซ้าย ให้ขยายแถบเลื่อนตัวเลือก SQL และเลือกผู้ใช้
- คุณควรเห็นผู้ใช้ชื่อ testsql ที่มีรหัสผ่าน cloudsql24 (ระบบจะใช้รหัสผ่านนี้เพื่อเข้าถึง db ในภายหลัง)
5. งานที่ 3 สร้าง VM สำหรับทดสอบและเชื่อมต่อกับอินสแตนซ์ SQL จากภายในโปรเจ็กต์ db (Terraform)
มาใช้ Terraform เพื่อสร้าง VM ทดสอบและเกตเวย์ NAT กัน ทำการกำหนดค่านี้ในโปรเจ็กต์ฐานข้อมูลให้เสร็จสมบูรณ์
- เปลี่ยนไปใช้มุมมองเครื่องมือแก้ไข 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
}
- กลับไปที่เทอร์มินัล Cloud Shell และตรวจสอบว่าคุณอยู่ในไดเรกทอรี terraform-db-psc ตอนนี้หากต้องการสร้างทรัพยากร ให้เรียกใช้
terraform plan, then terraform applyคำสั่งแล้วพิมพ์yesเพื่อเรียกใช้ ซึ่งจะสร้างเกตเวย์ NAT และ VM ที่ติดตั้ง MariaDB
ยืนยันฐานข้อมูล
ดำเนินการนี้ในโปรเจ็กต์ของผู้บริโภค
- ไปที่อินสแตนซ์ VM เลือก db-vm-test
- เลือกตัวเลือก SSH เพื่อเชื่อมต่อกับ VM
- เชื่อมต่อกับ DB ผ่าน IP ในเครื่องที่คุณคัดลอกไว้ก่อนหน้านี้ด้วยข้อมูลต่อไปนี้
mysql --host=172.18.0.2 --user=testsql --password=cloudsql24
ป.ล.เปลี่ยนที่อยู่ IP เป็น IP จริงเพื่อให้เชื่อมต่อได้
- เมื่อสร้างการเชื่อมต่อแล้ว ให้สร้างฐานข้อมูลด้วย localvpcsqldb ต่อไปนี้
CREATE DATABASE localvpcsqldb;
- เมื่อเสร็จแล้ว ให้พิมพ์ exit เพื่อออกจากการเชื่อมต่อ พิมพ์ exit อีกครั้งเพื่อปิด VM
6. งานที่ 4 เปิดใช้ PSC ในอินสแตนซ์ CloudSQL
มาใช้คำสั่ง gcloud เพื่อเปิดใช้ตัวเลือก PSC เพื่ออนุญาตการเชื่อมต่อกัน ทำการกำหนดค่านี้ในโปรเจ็กต์ฐานข้อมูลให้เสร็จสมบูรณ์
- เปลี่ยนไปที่มุมมอง Cloud Shell
- เรียกใช้คำสั่งต่อไปนี้ใน 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
- ซึ่งจะเป็นการอัปเดตฐานข้อมูลที่มีอยู่ด้วยไฟล์แนบ PSC การดำเนินการนี้จะใช้เวลาสักครู่ (มากกว่า 10 นาที)
หากได้รับข้อผิดพลาดหมดเวลาในการรอ ระบบควรแสดงคำสั่งให้คุณดำเนินการต่อเพื่อดูความคืบหน้าด้วย เช่น "คุณรอการดำเนินการต่อได้โดยเรียกใช้ `gcloud beta sql operations wait –project "
โปรดทราบว่าคุณสามารถทำให้ใช้งานได้ฐานข้อมูลใหม่ที่เปิดใช้ PSA และ PSC ได้ตั้งแต่เริ่มต้น
ยืนยันฐานข้อมูล
- หลังจากดำเนินการเสร็จแล้ว ให้ไปที่ SQL ในคอนโซล แล้วเลือกอินสแตนซ์ฐานข้อมูล psc-psa-sql-db
- ทางด้านซ้าย ให้ขยายแถบเลื่อนตัวเลือก SQL และเลือกการเชื่อมต่อ
- คุณดูข้อมูลเกี่ยวกับการเชื่อมต่อได้ในแท็บสรุป
- คัดลอกที่อยู่การเชื่อมต่อบริการและบันทึกไว้ที่ใดที่หนึ่งในระบบ
- คุณจะต้องใช้ข้อมูลนี้เพื่อทํางานถัดไปในขั้นตอนที่ 5 ขั้นตอนที่ 8

7. งานที่ 5 ตั้งค่าสภาพแวดล้อมสำหรับโปรเจ็กต์ของผู้บริโภค (Terraform)
ในโปรเจ็กต์ผู้ใช้ เราจะสร้าง VPC ที่กำหนดเองพร้อมกฎไฟร์วอลล์และซับเน็ต เปิด Cloud Console แล้วเลือกโปรเจ็กต์ที่จะใช้
- ที่ด้านบนของคอนโซลทางด้านขวาข้างไอคอน Google Cloud ให้คลิกเมนูแบบเลื่อนลง แล้วเลือกแท็บทั้งหมด


- เลือกรหัสโปรเจ็กต์ผู้ใช้จากโปรเจ็กต์ที่แสดงเพื่อดำเนินการต่อ
- เปิด Cloud Shell ที่ด้านบนของคอนโซลทางด้านขวา ตรวจสอบว่าคุณเห็นรหัสโปรเจ็กต์ผู้ใช้ใน Cloud Shell และยืนยันข้อความแจ้งเพื่ออนุญาตการเข้าถึง
- สร้างโฟลเดอร์ชื่อ terraform-consumer-psc แล้วย้ายไปที่โฟลเดอร์
mkdir terraform-consumer-psc && cd terraform-consumer-psc
- สร้างไฟล์ main.tf, variable.tf และ psc.tf
touch main.tf variable.tf psc.tf
- เปลี่ยนไปใช้มุมมองโปรแกรมแก้ไข Cloud Shell สำหรับรหัสโปรเจ็กต์ของผู้ใช้ทั่วไป เลือกเอดิเตอร์ และตรวจสอบว่าคุณอนุญาตพรอมต์ที่จำเป็นเพื่อให้โหลดอินเทอร์เฟซได้
- เมื่อโหลดแล้ว ให้ไปที่ไฟล์ > เปิดโฟลเดอร์ แล้วไปที่ /home/ชื่อผู้ใช้ของคุณ/terraform-consumer-psc แล้วเลือกตกลงเพื่อเปิดโฟลเดอร์ในโปรแกรมแก้ไข

- เลือกไฟล์ variable.tf แล้วเพิ่มข้อมูลต่อไปนี้ แทนที่ข้อความ
your-consumer-project-id-hereด้วยรหัสโปรเจ็กต์ของผู้ใช้จริงในเครื่องหมายคำพูด แทนที่ข้อความyour-psc-attachment-id-hereด้วยที่อยู่การเชื่อมต่อ PSC ในเครื่องหมายคำพูด นี่คือรหัสที่คุณคัดลอกไว้ในส่วนงานที่ 4 ข้อ 5-7
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"
}
- จากนั้นเปิดไฟล์ main.tf เราจะเพิ่มโค้ด Terraform เพื่อดำเนินการต่างๆ ตามที่อธิบายไว้ด้านล่าง
เปิดใช้ API |
|
สร้าง VPC |
|
สร้างเกตเวย์ NAT |
|
เพิ่มกฎไฟร์วอลล์ |
|
- คัดลอกและวางข้อความต่อไปนี้ลงในไฟล์ 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"]
}
- กลับไปที่เทอร์มินัล Cloud Shell ตรวจสอบว่าคุณอยู่ในไดเรกทอรี terraform-consumer-psc
cd terraform-consumer-pscในโปรเจ็กต์ผู้ใช้ แล้วเรียกใช้คำสั่งต่อไปนี้
terraform init
เริ่มต้นไดเรกทอรีการทำงาน ขั้นตอนนี้จะดาวน์โหลดผู้ให้บริการที่จำเป็นสำหรับการกำหนดค่าที่ระบุ
terraform plan
สร้างแผนการดำเนินการ ซึ่งแสดงการดำเนินการที่ Terraform จะใช้เพื่อติดตั้งใช้งานโครงสร้างพื้นฐาน
- ตอนนี้หากต้องการสร้างทรัพยากร ให้เรียกใช้
terraform applyคำสั่งแล้วพิมพ์yesเพื่อเรียกใช้
8. งานที่ 6 สร้างปลายทาง PSC เพื่อแนบ SQL DB ในโปรเจ็กต์ผู้บริโภคและ VM ทดสอบ (Terraform)
กำหนดค่านี้ให้เสร็จสมบูรณ์ในโปรเจ็กต์ของผู้บริโภค
- กลับไปที่โปรแกรมแก้ไข 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
}
- กลับไปที่เทอร์มินัล Cloud Shell ตรวจสอบว่าคุณอยู่ในไดเรกทอรี terraform-consumer-psc
cd terraform-consumer-pscในโปรเจ็กต์ผู้ใช้ แล้วเรียกใช้คำสั่งต่อไปนี้
terraform plan
สร้างแผนการดำเนินการ ซึ่งแสดงการดำเนินการที่ Terraform จะใช้เพื่อติดตั้งใช้งานโครงสร้างพื้นฐาน
- ตอนนี้หากต้องการสร้างทรัพยากร ให้เรียกใช้คำสั่ง
terraform applyแล้วพิมพ์yesเพื่อเรียกใช้
9. งานที่ 7 ยืนยันการเชื่อมต่ออุปกรณ์ปลายทางจาก VM ผ่านที่อยู่ IP ของ PSC
ดำเนินการนี้ในโปรเจ็กต์ของผู้บริโภค
- ไปที่อินสแตนซ์ VM เลือก remote-sql-test-vm
- เลือกตัวเลือก SSH เพื่อเชื่อมต่อกับ VM
- เชื่อมต่อกับ DB ผ่านปลายทางด้วยข้อมูลต่อไปนี้
mysql --host=192.168.100.100 --user=testsql --password=cloudsql24
- เมื่อสร้างการเชื่อมต่อแล้ว ให้สร้างฐานข้อมูลด้วย psc-sql-db ต่อไปนี้
CREATE DATABASE remotepscpsasqldb;
- เมื่อเสร็จแล้ว ให้พิมพ์ exit เพื่อออกจากการเชื่อมต่อ พิมพ์ exit อีกครั้งเพื่อปิด VM
10. งานที่ 8 ยืนยันรายการฐานข้อมูล
ทำการยืนยันนี้ให้เสร็จสมบูรณ์ในโปรเจ็กต์ฐานข้อมูล
- ที่ด้านบนของคอนโซลทางด้านขวาข้างไอคอน Google Cloud ให้คลิกเมนูแบบเลื่อนลง แล้วเลือกแท็บทั้งหมด


- จากโปรเจ็กต์ที่แสดง ให้เลือกรหัสโปรเจ็กต์ฐานข้อมูลเพื่อดำเนินการต่อ
- ไปที่ SQL เลือกฐานข้อมูล psc-psa-sql-db ขยายตัวเลือก SQL แล้วเลือกฐานข้อมูล คุณควรเห็นฐานข้อมูลที่เพิ่งสร้างชื่อ remotepscpsasqldb จาก VM ของโปรเจ็กต์ผู้ใช้ และเห็น localvpcsqldb จาก VM ของโปรเจ็กต์ db ด้วย**
.**

11. ล้าง
ดำเนินการนี้ในโปรเจ็กต์ของผู้บริโภค
- เลือกรหัสโปรเจ็กต์ผู้บริโภค
- ไปที่ Cloud Shell และตรวจสอบว่าคุณเห็นรหัสโปรเจ็กต์ผู้ใช้
- ไปที่ไดเรกทอรี terraform-consumer-psc
cd terraform-consumer-pscแล้วเรียกใช้คำสั่งต่อไปนี้terraform destroyและพิมพ์yesระบบจะนำทรัพยากรทั้งหมดที่คุณสร้างในโปรเจ็กต์ผู้ใช้ด้วย Terraform ออก
ทําขั้นตอนนี้ในโปรเจ็กต์ฐานข้อมูล
- เลือกรหัสโปรเจ็กต์ฐานข้อมูล
- ไปที่ Cloud Shell และตรวจสอบว่าคุณเห็นรหัสโปรเจ็กต์ฐานข้อมูล
- ไปที่ไดเรกทอรี terraform-db-psc
cd terraform-db-pscแล้วเรียกใช้คำสั่งต่อไปนี้terraform destroyและพิมพ์yesระบบจะนำทรัพยากรส่วนใหญ่ที่คุณสร้างในโปรเจ็กต์ DB ด้วย Terraform ออก ระบบอาจลบเครือข่ายบริการไม่ได้และแสดงข้อผิดพลาด - จากนั้นลบไฟล์ต่อไปนี้ออกจากโฟลเดอร์ terraform-db-psc
rm -r terraform.tfstate terraform.tfstate.backup
- จากนั้นไปที่เครือข่าย VPC ในคอนโซล
- เลือก VPC ของ database-net เลือกการเข้าถึงบริการส่วนตัว ในส่วนช่วง IP ที่จัดสรรสำหรับบริการ ให้เลือก psa-range-database-net แล้วเลือกตัวเลือกเผยแพร่

- จากนั้นเลือก VPC NETWORK PEERING เลือก servicenetworking-googleapis-com แล้วเลือกตัวเลือกลบ

- จากนั้นเลือกลบเครือข่าย VPC

12. ขอแสดงความยินดี
ขอแสดงความยินดี คุณกำหนดค่าอินสแตนซ์ Cloud SQL ด้วย PSA และการแนบ PSC รวมถึงสร้างปลายทาง Private Service Connect ใน VPC อื่นเรียบร้อยแล้ว
ดูข้อมูลเพิ่มเติม
อ่านเพิ่มเติมเกี่ยวกับ Private Service Connect และ Cloud SQL
Codelab อื่นๆ ที่เกี่ยวข้อง: https://codelabs.developers.google.com/codelabs/cloudsql-psc-terraform