1. ภาพรวม
การเชื่อมต่อกับอินสแตนซ์ Cloud SQL ส่วนตัวจากโปรเจ็กต์หรือเครือข่าย VPC อื่นทำได้หลายวิธี คุณสามารถใช้การเข้าถึงบริการส่วนตัว (PSA) เพื่อเข้าถึงที่อยู่ IP ภายในของ Google และบริการของบุคคลที่สามผ่านการเชื่อมต่อส่วนตัว ตอนนี้คุณยังเปิดใช้ Private Service Connect (PSC) เพื่อขยายสิทธิ์เข้าถึงฐานข้อมูลได้ด้วย
Private Service Connect (PSC) ช่วยให้ผู้ผลิตบริการแสดงบริการของตนผ่านไฟล์แนบบริการ ซึ่งผู้บริโภคสามารถใช้เพื่อสร้างปลายทาง PSC และ/หรือแบ็กเอนด์ PSC ในสภาพแวดล้อมของตนเอง ปลายทาง PSC เหล่านี้ช่วยให้ผู้ใช้เชื่อมต่อกับบริการของผู้ผลิตผ่าน IP ส่วนตัวที่ระบุได้
คุณสามารถกําหนดค่าและทดสอบตัวเลือกนี้ได้ในแท็บนี้
ในชั้นเรียนนี้ คุณจะได้สร้างสถาปัตยกรรมแบบง่ายที่แสดงการใช้การเข้าถึงปลายทาง PSA และ PSC ด้วย CloudSQL
รูปที่ 1
สำหรับห้องทดลองนี้ คุณจะต้องมีโปรเจ็กต์ 2 โปรเจ็กต์หรือ VPC แยกต่างหากในโปรเจ็กต์เดียวกัน
วัตถุประสงค์
ในบทนี้ คุณจะได้เรียนรู้วิธีทํางานต่อไปนี้
- เปิดใช้เครือข่ายบริการ
- ตั้งค่า PSA
- สร้างอินสแตนซ์ CloudSQL ด้วย PSA
- เปิดใช้ไฟล์แนบบริการ PSC
- สร้างปลายทาง PSC ใน VPC ของผู้บริโภคเพื่อเชื่อมต่อกับฐานข้อมูล CloudSQL
- ยืนยันการเข้าถึงฐานข้อมูล SQL จาก VM ทดสอบทั้งใน VPC ของผู้ผลิตและผู้บริโภค
2. การตั้งค่าและข้อกําหนด
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะซ้ำกันไม่ได้ในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ปกติจะระบุเป็น
PROJECT_ID
) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าอุปกรณ์พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงหลังจากขั้นตอนนี้ไม่ได้ และชื่อนี้จะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้จะไม่เสียค่าใช้จ่ายมากนัก หากต้องการปิดใช้ทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างไว้หรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่ม Cloud Shell
แม้ว่า Google Cloud จะทำงานจากระยะไกลจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อดำเนินการเสร็จแล้ว คุณควรเห็นข้อมูลดังต่อไปนี้
เครื่องเสมือนนี้โหลดเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ ซึ่งจะมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานบน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพเครือข่ายและการรับรองได้อย่างมีประสิทธิภาพ คุณทํางานทั้งหมดในโค้ดแล็บนี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไรเลย
3. งานที่ 1 ตั้งค่าสภาพแวดล้อมสําหรับโปรเจ็กต์ฐานข้อมูลด้วย (Terraform)
ในโปรเจ็กต์ฐานข้อมูล เราจะเปิดใช้เครือข่ายบริการ สร้าง VPC สร้างช่วง PSA สร้างการเพียร์เครือข่ายบริการ และสร้างกฎไฟร์วอลล์ เปิดคอนโซลระบบคลาวด์และเลือกโปรเจ็กต์ที่จะใช้สำหรับฐานข้อมูล
- เปิด 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 เลือก editor ตรวจสอบว่าคุณอนุญาตข้อความแจ้งที่จำเป็นเพื่อให้อินเทอร์เฟซโหลดได้
- เมื่อโหลดแล้ว ให้ไปที่ไฟล์ > เปิดโฟลเดอร์ แล้วไปที่ /home/your-user-name/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 |
|
สร้างการเพียร์ |
|
- คัดลอกและวางข้อมูลต่อไปนี้ลงในไฟล์ 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 นี้เพื่อทํางานในขั้นตอนที่ 5 ของงาน 3
- ทางด้านซ้าย ให้ขยายเมนูแบบเลื่อนออกของตัวเลือก SQL แล้วเลือกผู้ใช้
- คุณควรเห็นผู้ใช้ชื่อ testsql ที่มีรหัสผ่าน cloudsql24 (รหัสผ่านนี้จะใช้ในการเข้าถึงฐานข้อมูลในภายหลัง)
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
- เชื่อมต่อกับฐานข้อมูลผ่าน 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 ที่กําหนดเองซึ่งมีกฎไฟร์วอลล์และซับเน็ต เปิดคอนโซลระบบคลาวด์และเลือกโปรเจ็กต์ที่จะใช้
- ที่ด้านบนของคอนโซลทางด้านขวาถัดจากไอคอน 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 สำหรับรหัสโปรเจ็กต์ของผู้บริโภค เลือก editor ตรวจสอบว่าคุณอนุญาตข้อความแจ้งที่จำเป็นเพื่อให้อินเทอร์เฟซโหลดได้
- เมื่อโหลดแล้ว ให้ไปที่ไฟล์ > เปิดโฟลเดอร์ แล้วไปที่ /home/your-user-name/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 Terminal ตรวจสอบว่าคุณอยู่ในไดเรกทอรี terraform-consumer-psc
cd terraform-consumer-psc
ในโปรเจ็กต์สำหรับผู้ใช้ทั่วไป แล้วเรียกใช้คำสั่งต่อไปนี้
terraform init
เริ่มต้นไดเรกทอรีที่ใช้งานอยู่ ขั้นตอนนี้จะดาวน์โหลดผู้ให้บริการที่จําเป็นสําหรับการกําหนดค่าที่ระบุ
terraform plan
สร้างแผนการดำเนินการ ซึ่งแสดงการดำเนินการที่ Terraform จะทำเพื่อทำให้โครงสร้างพื้นฐานใช้งานได้
- ตอนนี้ให้สร้างทรัพยากรโดยเรียกใช้คําสั่ง
terraform apply
แล้วพิมพ์yes
เพื่อเรียกใช้
8. งานที่ 6 สร้างปลายทาง PSC ไปยังไฟล์แนบ DB ของ SQL ในโปรเจ็กต์ผู้บริโภคและ 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 Terminal ตรวจสอบว่าคุณอยู่ในไดเรกทอรี 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 เลือก 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