เข้าถึงแชท Gemini 3 Pro โดยใช้ Python SDK ผ่านปลายทาง Private Service Connect

1. ภาพรวม

คุณเข้าถึง Vertex AI API ได้ผ่านอินเทอร์เน็ต แต่ในองค์กร คุณอาจต้องการเข้าถึง Vertex AI API แบบส่วนตัวโดยไม่ต้องผ่านอินเทอร์เน็ต ในแล็บนี้ คุณจะได้ทำสิ่งต่อไปนี้ก่อน

  • เข้าถึง Gemini 3 Pro API ผ่าน Vertex โดยใช้ Python SDK
  • ซึ่งจะทำงานบนอินสแตนซ์ VM
  • การเชื่อมต่อจะผ่าน Cloud NAT ไปยังอินเทอร์เน็ตสาธารณะ

จากนั้นคุณจะสร้างปลายทาง Private Service Connect ไปยัง Google APIs และเปลี่ยนการไหลของการรับส่งข้อมูลให้ใช้ปลายทางส่วนตัวเพื่อเชื่อมต่อกับ Gemini Chat API การกำหนดค่าจะเป็นการผสมผสานระหว่าง Terraform, gcloud และคอนโซล

ในแล็บนี้ คุณจะได้สร้างรูปแบบต่อไปนี้

รูปที่ 1

304c579d349aec90.png

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

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

  • ตั้งค่าอินสแตนซ์ VM เพื่อใช้ Python SDK
  • เชื่อมต่อกับ Gemini Chat ผ่านสคริปต์ Python
  • กำหนดค่าปลายทาง PSC เพื่อเชื่อมต่อกับ Googleapis
  • ยืนยันเส้นทางการเชื่อมต่อกับ Googleais
  • กำหนดค่ารายการ DNS ด้วยตนเอง

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

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.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 ในแถบเครื่องมือด้านขวาบน

เปิดใช้งาน Cloud Shell

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

ภาพหน้าจอของเทอร์มินัล Google Cloud Shell ที่แสดงว่าสภาพแวดล้อมเชื่อมต่อแล้ว

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

3. งานที่ 1 ตั้งค่าสภาพแวดล้อมด้วย Terraform

เราจะสร้าง VPC ที่กำหนดเองพร้อมกฎไฟร์วอลล์และซับเน็ต เปิด Cloud Console แล้วเลือกโปรเจ็กต์ที่จะใช้

  1. เปิด Cloud Shell ที่ด้านบนของคอนโซลทางด้านขวา ตรวจสอบว่าคุณเห็นรหัสโปรเจ็กต์ที่ถูกต้องใน Cloud Shell และยืนยันข้อความแจ้งเพื่ออนุญาตการเข้าถึง b51b80043d3bac90.png
  2. สร้างโฟลเดอร์ชื่อ terraform-build แล้วย้ายไปที่โฟลเดอร์
mkdir terraform-build  && cd terraform-build
  1. สร้างไฟล์ main.tf และ variable.tf
touch main.tf variable.tf 
  1. เปลี่ยนไปใช้มุมมองเครื่องมือแก้ไข Cloud Shell เลือกเอดิเตอร์ และตรวจสอบว่าคุณอนุญาตพรอมต์ที่จำเป็นเพื่อให้โหลดอินเทอร์เฟซได้
  2. เมื่อโหลดแล้ว ให้ไปที่ไฟล์ > เปิดโฟลเดอร์ แล้วไปที่ /home/your-user-name/terraform-build แล้วเลือกตกลงเพื่อเปิดโฟลเดอร์ในโปรแกรมแก้ไข 39b3eb9a3e077bfd.png
  3. เลือกไฟล์ variable.tf แล้วเพิ่มข้อมูลต่อไปนี้ แทนที่ข้อความ your-project-id-here ด้วยรหัสโปรเจ็กต์จริงของคุณในเครื่องหมายคำพูด
variable "project_id" {
  type = string
  default = "your-project-id-here"
}

variable "network_id" {
  type = string
  default = "python-net"
}
  1. จากนั้นเปิดไฟล์ main.tf เราจะเพิ่มโค้ด Terraform เพื่อดำเนินการต่างๆ ตามที่อธิบายไว้ด้านล่าง

เปิดใช้ API

resource "google_project_service" "default"

สร้าง VPC ชื่อ python-net

resource "google_compute_network" "default"

เพิ่มซับเน็ต

resource "google_compute_subnetwork" "default"

เพิ่มกฎไฟร์วอลล์ 2 ข้อ

resource "google_compute_firewall" "allow_icmp"resource "google_compute_firewall" "allow_ssh"

  1. คัดลอกและวางข้อมูลต่อไปนี้ลงในไฟล์ main .tf
resource "google_project_service" "default" {
  project = var.project_id 
  for_each = toset([
    "dns.googleapis.com",
    "aiplatform.googleapis.com",
    "servicedirectory.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" "default" {
  name          = "vm1-subnet"
  ip_cidr_range = "10.0.11.0/24"
  project       = var.project_id
  region        = "us-east1"
  stack_type    = "IPV4_ONLY"
  network       = google_compute_network.default.id
}

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"]
}
  1. กลับไปที่เทอร์มินัล Cloud Shell ตรวจสอบว่าคุณอยู่ในไดเรกทอรี terraform-build cd terraform-build แล้วเรียกใช้คำสั่งต่อไปนี้

terraform init

เริ่มต้นไดเรกทอรีการทำงาน ขั้นตอนนี้จะดาวน์โหลดผู้ให้บริการที่จำเป็นสำหรับการกำหนดค่าที่ระบุ

terraform plan

สร้างแผนการดำเนินการ ซึ่งแสดงการดำเนินการที่ Terraform จะใช้เพื่อทำให้โครงสร้างพื้นฐานใช้งานได้

  1. ตอนนี้หากต้องการสร้างทรัพยากร ให้เรียกใช้terraform applyคำสั่งและพิมพ์ yes เพื่อเรียกใช้

4. งานที่ 2 สร้างเกตเวย์ NAT และ VM ด้วย Terraform

เราต้องให้สิทธิ์การเข้าถึงอินเทอร์เน็ตภายนอกขาออก ดังนั้นมาสร้างเกตเวย์ Cloud NAT แล้วแนบกัน

  1. เปิด Cloud Shell ไปที่โฟลเดอร์ terraform-build แล้วสร้างไฟล์ต่อไปนี้ (รวม 3 ไฟล์) เราจะแก้ไขข้อมูลเหล่านี้ในภายหลัง
touch nat-vm.tf psc.tf dns.tf
  1. เปลี่ยนไปที่มุมมองโปรแกรมแก้ไข Cloud Shell แล้วเลือกไฟล์ nat-vm.tf และเพิ่มโค้ด Terraform ต่อไปนี้ การดำเนินการนี้จะสร้างเกตเวย์ NAT และ VM 2 รายการ

Terraform nat-vm.tf

resource "google_compute_router" "default" {
  name    = "py-outbound-nat"
  region  = "us-east1"
  network = google_compute_network.default.id
  project = var.project_id
  

 bgp {
  asn = 64514
  }
}

resource "google_compute_router_nat" "default" {
  name                               = "py-outbound-nat-gw"
  router                             = google_compute_router.default.name
  region                             = google_compute_router.default.region
  nat_ip_allocate_option             = "AUTO_ONLY"
  project                            = var.project_id
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"

  log_config {
    enable = true
    filter = "ERRORS_ONLY"
  }
}

resource "google_compute_instance" "vm1" {
  name         = "py-vm1"
  zone         = "us-east1-b"
  machine_type = "n2-standard-2"
  project      = var.project_id

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-12"
    }
  }

  network_interface {
    subnetwork = google_compute_subnetwork.default.id  
    stack_type = "IPV4_ONLY"
  }

  tags = ["allow-ssh", "allow-icmp"]

  metadata_startup_script = <<-EOF
    #! /bin/bash
    sudo apt-get update
    sudo apt-get install python3 python3-dev python3-venv git -y
    sudo apt-get install tcpdump dnsutils -y    
    
      mkdir -p ~/py-gem-env
      cd ~/py-gem-env
      python3 -m venv env
      source env/bin/activate
      pip install --upgrade pip
      pip install ipython google-genai
    '
  EOF
}
  1. เปลี่ยนไปใช้เทอร์มินัล Cloud Shell ตรวจสอบว่าคุณอยู่ในโฟลเดอร์ terraform-build แล้วเรียกใช้ terraform plan ซึ่งจะแสดงให้เห็นว่าระบบจะเพิ่มรายการ 4 รายการ จากนั้นเรียกใช้ terraform apply แล้วพิมพ์ yes เพื่อสร้าง NAT Gateway และ VM

5. งานที่ 3 กำหนดค่า VM และทดสอบ

  1. ไปที่อินสแตนซ์ VM เลือก VM ที่ขึ้นต้นด้วย py-vm1 เลือก SSH
  2. เมื่อ SSH เข้าสู่ py-vm1 แล้ว ให้เปิดใช้รูทโดยพิมพ์ sudo -i
  3. เปิดใช้งานสภาพแวดล้อม venv โดยใช้คำสั่งต่อไปนี้
cd py-gem-env
source env/bin/activate
  1. ตอนนี้มาตรวจสอบสิทธิ์เพื่อทำการทดสอบในภายหลังกัน เรียกใช้คำสั่งต่อไปนี้ใน VM แล้วกด y เมื่อได้รับแจ้ง
gcloud auth application-default login
  1. จากนั้นคัดลอก URL ที่ปรากฏโดยขึ้นต้นด้วย https:// เปิดแท็บใหม่ในหน้าต่างเบราว์เซอร์ของห้องทดลอง แล้ววาง URL ยอมรับข้อความแจ้ง
  2. เมื่อเห็นข้อความต่อไปนี้ ให้เลือกคัดลอก กลับไปที่เซสชัน py-vm1 ของ VM แล้ววางโค้ดที่คัดลอกไว้สำหรับ Enter authorization code: แล้วกด Enter เพื่อตรวจสอบสิทธิ์

b703db7aa2aa286a.png

  1. ตอนนี้เรามาทดสอบอย่างรวดเร็วเพื่อดูว่าเชื่อมต่อกับ Vertex API ได้หรือไม่ ซึ่งใช้ *-aiplatform.googleapis.com ดังนั้นเราจะทำ dig ไปยังที่อยู่นั้นเพื่อดูว่าการรับส่งข้อมูลจะกำหนดเส้นทางอย่างไร
dig *-aiplatform.googleapis.com
  1. คุณควรเห็นข้อความที่คล้ายกัน (ที่อยู่จะแตกต่างกัน) โปรดทราบว่าเส้นทางจะผ่านที่อยู่ IP สาธารณะเนื่องจาก API เป็น API สาธารณะ ห้ามคัดลอก
; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> *-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60947
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;*-aiplatform.googleapis.com.   IN      A

;; ANSWER SECTION:
*-aiplatform.googleapis.com. 300 IN     A       173.194.216.95
*-aiplatform.googleapis.com. 300 IN     A       108.177.11.95
*-aiplatform.googleapis.com. 300 IN     A       192.178.219.95
*-aiplatform.googleapis.com. 300 IN     A       74.125.134.95
*-aiplatform.googleapis.com. 300 IN     A       74.125.139.95
*-aiplatform.googleapis.com. 300 IN     A       108.177.12.95
*-aiplatform.googleapis.com. 300 IN     A       173.194.210.95
*-aiplatform.googleapis.com. 300 IN     A       74.125.26.95
*-aiplatform.googleapis.com. 300 IN     A       173.194.212.95
*-aiplatform.googleapis.com. 300 IN     A       172.217.204.95
  1. ตอนนี้มาใช้ Python กัน พิมพ์ ipython เพื่อเปิดใช้งานอินเทอร์เฟซ ipython
ipython

845ef4291429888a.png

  1. ตอนนี้ให้คัดลอกและวางข้อความต่อไปนี้ ซึ่งจะถาม Gemini ว่า "โลโก้ Google มีสีอะไรบ้าง" และ "ท้องฟ้ามีสีอะไร"
from google import genai
from google.genai import types
import os
import sys

LOCATION = "global"
MODEL_ID = "gemini-3-pro-preview" 

try:
    client = genai.Client(vertexai=True, location=LOCATION)
    print(f"Successfully initialized Google Gen AI Client (Vertex AI mode) in {LOCATION}")
except Exception as e:
    print(f"Error initializing client: {e}")
    print("Ensure you have installed the library: `pip install google-genai`")
    print("And authenticated: `gcloud auth application-default login`")
    sys.exit(1)

class SimpleChatSession:
    def __init__(self, model_id):
        self.model_id = model_id
        self.history = [] 

    def send_message(self, prompt, stream=True):
        user_content = types.Content(
            role="user",
            parts=[types.Part(text=prompt)]
        )
        self.history.append(user_content)

        try:
            response_stream = client.models.generate_content_stream(
                model=self.model_id,
                contents=self.history,
                config=types.GenerateContentConfig(
                    temperature=0.7 
                )
            )

            accumulated_text = ""
            
            for chunk in response_stream:
                if chunk.text:
                    yield chunk.text
                    accumulated_text += chunk.text
            
            model_content = types.Content(
                role="model",
                parts=[types.Part(text=accumulated_text)]
            )
            self.history.append(model_content)

        except Exception as e:
            print(f"\n[Error during generation: {e}]")

def get_chat_response(session: SimpleChatSession, prompt: str):
    print(f"\n--- User: {prompt} ---")
    print("--- Model: ", end="")
    
    stream_generator = session.send_message(prompt)
    
    full_text = ""
    for chunk_text in stream_generator:
        full_text += chunk_text
        print(chunk_text, end="", flush=True)

    print() 
    return full_text

if __name__ == "__main__":
    chat_session = SimpleChatSession(MODEL_ID)

    get_chat_response(chat_session, "Hello.")
    get_chat_response(chat_session, "What are all the colors of the Google logo?")
    get_chat_response(chat_session, "What color is the sky?")
  1. กด Enter 2 ครั้งเพื่อเรียกใช้และดูผลลัพธ์
  2. คำขอนี้เข้าถึง Vertex ผ่าน API สาธารณะ
  3. ปิดเซสชัน SSH แล้วมาดำเนินการต่อกัน

6. งานที่ 4 สร้างปลายทาง PSC ไปยัง googleapis ด้วย Terraform

หากต้องการเปิดใช้การเชื่อมต่อส่วนตัวกับปลายทาง Vertex API เราจะสร้างปลายทาง Private Service Connect สำหรับ Google API ซึ่งจะช่วยให้เราใช้ที่อยู่ IP ส่วนตัวที่เรากำหนดเพื่อกำหนดเส้นทางการรับส่งข้อมูลไปยัง Google API ที่เราต้องการได้ ซึ่งในกรณีนี้คือ Vertex

  1. เปิด Cloud Shell ในมุมมองเอดิเตอร์หากยังไม่ได้เปิด เราจะสร้างสิ่งต่อไปนี้
  • สร้าง IP สำหรับปลายทาง PSC 192.168.255.250 (resource "google_compute_global_address" "default")
  • สร้างปลายทาง PSC ไปยัง Google APIs (resource "google_compute_global_forwarding_rule" "default")

เปิดไฟล์ psc.tf ในโฟลเดอร์ terraform-build เพิ่มโค้ดต่อไปนี้ลงในไฟล์

Terraform psc.tf

resource "google_compute_global_address" "default" {
  name         = "vertex-ip"
  purpose      = "PRIVATE_SERVICE_CONNECT"
  network      = google_compute_network.default.id
  address_type = "INTERNAL"
  address      = "192.168.255.250"
}

resource "google_compute_global_forwarding_rule" "default" {  
  name                  = "pscvertexgemini"
  target                = "all-apis"
  network               = google_compute_network.default.id
  ip_address            = google_compute_global_address.default.id
  load_balancing_scheme = ""
  }
  1. สลับไปที่เทอร์มินัล Cloud Shell และตรวจสอบว่าคุณอยู่ในโฟลเดอร์ terraform-build จากนั้นเรียกใช้ terraform init จากนั้นเรียกใช้ terraform plan ซึ่งจะแสดงให้เห็นว่าระบบจะเพิ่มรายการ 2 รายการ
    จากนั้นเรียกใช้ terraform apply แล้วพิมพ์ yes เพื่อสร้างปลายทาง API ของ Google สำหรับ IP และ PSC
  2. ยืนยันว่ามีปลายทาง
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global

7. งานที่ 5 สร้างรายการ DNS ด้วยตนเองไปยัง googleapis ด้วย Terraform

คุณสร้างรายการ DNS ด้วยตนเองเพื่อชี้ไปยังปลายทาง PSC โดยใช้ DNS ส่วนตัวได้ ซึ่งจะส่งผลต่อเครือข่ายทั้งหมดที่คุณกำหนดให้กับอุปกรณ์

  1. ไปที่บริการเครือข่ายแล้วเลือก Cloud DNS
  2. ในโซน คุณควรเห็นโซนที่สร้างขึ้นโดยอัตโนมัติสำหรับ Private Service Connect สำหรับ Google API โดยมีไดเรกทอรีบริการประเภทโซน ซึ่งใช้เพื่อเชื่อมต่อกับปลายทาง PSC ได้โดยมีรูปแบบเป็น **SERVICE-ENDPOINT.p.googleapis.com ตัวอย่าง: aiplatform-pscvertexgemini.p.googleapis.com
  3. ในกรณีนี้ เราต้องการสร้างรายการ DNS ส่วนตัวด้วยตนเอง การกำหนดค่าจะเป็นดังนี้
  • สร้างโซน DNS ส่วนตัวชื่อ "googleapis-private" สำหรับ "googleapis.com" และจำกัดให้ใช้ได้เฉพาะในเครือข่าย "python-net"
  • เพิ่มระเบียน A เพื่อแมป "googleapis.com" กับที่อยู่ IP "192.168.255.250"
  • เพิ่มระเบียน CNAME เพื่อเปลี่ยนเส้นทางโดเมนย่อยทั้งหมดของ "googleapis.com" (เช่น www.googleapis.com) ไปยัง "googleapis.com"
  1. เปิด Cloud Shell ในมุมมองเอดิเตอร์หากยังไม่ได้เปิด เปิดไฟล์ dns.tf ในโฟลเดอร์ terraform-build เพิ่มโค้ดต่อไปนี้ลงในไฟล์

Terraform dns.tf

resource "google_dns_managed_zone" "private_zone" {
  name        = "googleapis-private"
  dns_name    = "googleapis.com."  
  visibility  = "private"
  project     = var.project_id     

  private_visibility_config {
    networks {
      network_url = google_compute_network.default.id  
    }
  }
}

resource "google_dns_record_set" "a_record" {
  name    = "googleapis.com."  
  type    = "A"
  ttl     = 300
  managed_zone = google_dns_managed_zone.private_zone.name
  project = var.project_id    

  rrdatas = ["192.168.255.250"]
}

resource "google_dns_record_set" "cname_record" {
 name    = "*.googleapis.com."
 type    = "CNAME"
 ttl     = 300
 managed_zone = google_dns_managed_zone.private_zone.name
 project = var.project_id    

 rrdatas = ["googleapis.com."]  
}
  1. สลับไปที่เทอร์มินัล Cloud Shell และตรวจสอบว่าคุณอยู่ในโฟลเดอร์ terraform-build จากนั้นเรียกใช้ terraform plan ซึ่งจะแสดงรายการที่จะเพิ่ม
    จากนั้นเรียกใช้ terraform apply แล้วพิมพ์ yes เพื่อสร้างรายการ DNS ส่วนตัว
  2. คุณควรเห็นการตั้งค่าที่มีระเบียน A และ CNAME ดังนี้ 6d2fc061460cd983.png
  3. จากนั้นเราจะยืนยันการเชื่อมต่อกับการเปลี่ยนแปลงเหล่านี้ใน py-vm1

8. งานที่ 6 ยืนยันการเชื่อมต่ออุปกรณ์ปลายทางผ่านที่อยู่ IP

มาเชื่อมต่อโดยใช้ปลายทางส่วนตัวเพื่อเชื่อมต่อกับ Gemini กัน

  1. ไปที่อินสแตนซ์ VM py-vm1 เลือก SSH และ SSH เข้าสู่ VM
  2. รับสิทธิ์เข้าถึงระดับรูทโดยพิมพ์ sudo -i
  3. ตรวจสอบเส้นทางการเชื่อมต่อกับ aiplatform.googleapis.com โดยใช้คำสั่ง ping ซึ่งจะเป็นการ Ping ที่อยู่ IP ใน DNS ส่วนตัว ระเบียน A สำหรับ googleapis IP นี้เป็นปลายทาง PSC และการ Ping จะไม่สำเร็จ
ping -c 2 aiplatform.googleapis.com
  1. ตรวจสอบเส้นทางการเชื่อมต่อด้วย ping โดยใช้รายการ DNS ที่สร้างขึ้นโดยอัตโนมัติสำหรับ PSC Google APIs ที่มี aiplatform-pscvertexgemini.p.googleapis.com ซึ่งจะชี้ไปยังที่อยู่ IP ของปลายทาง PSC และการ Ping จะไม่สำเร็จ
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
  1. ตรวจสอบเส้นทางการเชื่อมต่อกับ aiplatform.googleapis.com โดยใช้คำสั่ง dig ควรเป็นที่อยู่ IP ของปลายทาง PSC
dig aiplatform.googleapis.com
  1. กลับไปที่คอนโซลแล้วเปิดอินสแตนซ์อื่นของ VM Instance py-vm1 เลือก SSH แล้ว SSH เข้าสู่ VM
  2. รับสิทธิ์เข้าถึงระดับรูทโดยพิมพ์ sudo -i
  3. เรียกใช้คำสั่งต่อไปนี้เพื่อดูการเชื่อมต่อในการดัมพ์ TCP
sudo tcpdump -i any port 53 -n or host aiplatform.googleapis.com
  1. ตอนนี้ให้กลับไปที่อินสแตนซ์ SSH แรกของอินสแตนซ์ VM py-vm1
  2. เปิดใช้งานสภาพแวดล้อมโดยใช้
cd py-gem-env
source env/bin/activate
  1. ตอนนี้มาทดสอบ Python กัน พิมพ์ ipython เพื่อเปิดใช้งานอินเทอร์เฟซ ipython
ipython
  1. ตอนนี้ให้คัดลอกและวางข้อความต่อไปนี้ ซึ่งจะถาม Gemini ว่า "สรุปในประโยคสั้นๆ ว่าตัวแยกคำในบริบทของ AI คืออะไร" และ "วาฬน่าทึ่งหรือไม่"
from google import genai
from google.genai import types
import os
import sys

LOCATION = "global"
MODEL_ID = "gemini-3-pro-preview" 

try:
    client = genai.Client(vertexai=True, location=LOCATION)
    print(f"Successfully initialized Google Gen AI Client (Vertex AI mode) in {LOCATION}")
except Exception as e:
    print(f"Error initializing client: {e}")
    print("Ensure you have installed the library: `pip install google-genai`")
    print("And authenticated: `gcloud auth application-default login`")
    sys.exit(1)

class SimpleChatSession:
    def __init__(self, model_id):
        self.model_id = model_id
        self.history = [] 

    def send_message(self, prompt, stream=True):
        user_content = types.Content(
            role="user",
            parts=[types.Part(text=prompt)]
        )
        self.history.append(user_content)

        try:
            response_stream = client.models.generate_content_stream(
                model=self.model_id,
                contents=self.history,
                config=types.GenerateContentConfig(
                    temperature=0.7 
                )
            )

            accumulated_text = ""
            
            for chunk in response_stream:
                if chunk.text:
                    yield chunk.text
                    accumulated_text += chunk.text
            
            model_content = types.Content(
                role="model",
                parts=[types.Part(text=accumulated_text)]
            )
            self.history.append(model_content)

        except Exception as e:
            print(f"\n[Error during generation: {e}]")

def get_chat_response(session: SimpleChatSession, prompt: str):
    print(f"\n--- User: {prompt} ---")
    print("--- Model: ", end="")
    
    stream_generator = session.send_message(prompt)
    
    full_text = ""
    for chunk_text in stream_generator:
        full_text += chunk_text
        print(chunk_text, end="", flush=True)

    print() 
    return full_text

if __name__ == "__main__":
    chat_session = SimpleChatSession(MODEL_ID)

    get_chat_response(chat_session, "Hello.")
    get_chat_response(chat_session, "In one short sentence summarize what is a tokenizer in the context of AI?")
    get_chat_response(chat_session, "Are whales awesome or not?")
  1. กด Enter 2 ครั้งเพื่อเรียกใช้และดูผลลัพธ์
  2. กลับไปที่อินสแตนซ์ที่ 2 ของอินสแตนซ์ VM py-vm1 คุณควรเห็นผลลัพธ์ของ TCPDUMP คุณจะเห็นว่าที่อยู่ IP ของ VM ใช้ที่อยู่ IP ของปลายทาง PSC เพื่อเชื่อมต่อกับ aiplatform.googleapis.com

ปิดเซสชัน SSH ทั้งหมดไปยังอินสแตนซ์ VM py-vm1

9. ล้างข้อมูล

  1. ไปที่ Cloud Shell และตรวจสอบว่าคุณอยู่ในไดเรกทอรี terraform-build cd terraform-build
  2. เรียกใช้ terraform plan destroy เพื่อดูการเปลี่ยนแปลงทั้งหมดที่จะเกิดขึ้น
terraform plan -destroy
  1. จากนั้นเรียกใช้คำสั่ง terraform destroy แล้วพิมพ์ yes ระบบจะนำทรัพยากรทั้งหมดที่คุณสร้างในโปรเจ็กต์ด้วย Terraform ออก
terraform destroy 

10. ขอแสดงความยินดี

ขอแสดงความยินดี คุณเชื่อมต่อกับ Vertex และใช้ Gemini 3 Pro ผ่านที่อยู่ API สาธารณะและแบบส่วนตัวโดยใช้ปลายทาง Private Service Connect สำหรับ Google APIs ได้สำเร็จ ฟังก์ชันนี้สามารถขยายการเชื่อมต่อ API ส่วนตัวไปยังสภาพแวดล้อมภายในองค์กร/ระบบคลาวด์อื่นๆ ที่เชื่อมต่อผ่าน (Interconnect, Cross-Cloud Interconnect และ VPC)

ขั้นตอนถัดไป / ดูข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับเครือข่าย Vertex AI

Codelab: เข้าถึง Anthropic Claude ใน Vertex AI ด้วย Python SDK ผ่านปลายทาง Private Service Connect

เข้าสู่ห้องทดลองถัดไป

ทำภารกิจต่อด้วย Google Cloud และดูแล็บอื่นๆ ของ Google Cloud Skills Boost เหล่านี้