เข้าถึง Gemini Chat ด้วย Python SDK ผ่านปลายทาง Private Service Connect

1. ภาพรวม

Vertex AI API สามารถเข้าถึงได้ผ่านอินเทอร์เน็ต แต่คุณอาจต้องการเข้าถึง Vertex AI API แบบส่วนตัวในองค์กรโดยไม่ต้องผ่านอินเทอร์เน็ต ในชั้นเรียนนี้ คุณจะเข้าถึง Vertex Gemini Chat API ผ่าน Python SDK ที่ทำงานบนอินสแตนซ์ VM ผ่านอินเทอร์เน็ตสาธารณะก่อน

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

ในชั้นเรียนนี้ คุณจะได้สร้างรูปแบบต่อไปนี้

รูปที่ 1

8b283cc5684283c2.png

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

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

เริ่ม Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

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

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

  1. เปิด Cloud Shell ที่ด้านบนของคอนโซลทางด้านขวา ตรวจสอบว่าคุณเห็นรหัสโปรเจ็กต์ที่ถูกต้องใน Cloud Shell ยืนยันข้อความแจ้งเพื่ออนุญาตให้เข้าถึง 4261e776f64ea978.png
  2. สร้างโฟลเดอร์ชื่อ terraform-build แล้วย้ายไปยังโฟลเดอร์
mkdir terraform-build  && cd terraform-build
  1. สร้างไฟล์ main.tf และ variable.tf
touch main.tf variable.tf 
  1. เปลี่ยนไปใช้มุมมองเครื่องมือแก้ไข Cloud Shell เลือก editor ตรวจสอบว่าคุณอนุญาตข้อความแจ้งที่จำเป็นเพื่อให้อินเทอร์เฟซโหลดได้
  2. เมื่อโหลดแล้ว ให้ไปที่ไฟล์ > เปิดโฟลเดอร์ แล้วไปที่ /home/your-user-name/terraform-build แล้วเลือกตกลงเพื่อเปิดโฟลเดอร์ในเครื่องมือแก้ไข 78f5eb9f2f82f1b0.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" {
  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"
  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

 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"
  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"

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

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

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

  metadata_startup_script = <<-EOF
    sudo apt-get update
    sudo apt-get install python3 python3-dev python3-venv -y
    sudo apt-get install tcpdump dnsutils -y
    sudo -i
    sudo mkdir -p ~/py-gem-env
    cd ~/py-gem-env
    python3 -m venv env
    source env/bin/activate
    pip install ipython google-cloud-aiplatform
  EOF
}

resource "google_compute_instance" "vm2" {
  name         = "py-vm2"
  zone         = "us-east1-b"
  machine_type = "n2-standard-2"

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

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

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

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

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. เมื่อเห็นข้อความต่อไปนี้ ให้เลือก "คัดลอก" แล้วเปลี่ยนกลับไปที่เซสชัน vm py-vm1 และในส่วนป้อนรหัสการให้สิทธิ์: ให้วางรหัสที่คุณคัดลอกไว้แล้วกด Enter เพื่อตรวจสอบสิทธิ์

c29615cdf9324209.png

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

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

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.210.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.211.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.212.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.213.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.215.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.216.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.12.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.13.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.26.95
  1. ตอนนี้มาลองใช้ Python กัน พิมพ์ ipython เพื่อเปิดใช้งานอินเทอร์เฟซ ipython
ipython

4685b31f13df54e1.png

  1. ตอนนี้ให้คัดลอกและวางข้อมูลต่อไปนี้ ข้อความนี้ถาม Gemini ว่า "โลโก้ Google มีสีอะไรบ้าง" และ "ท้องฟ้ามีสีอะไร" แทนที่ enter-your-project-id-here ด้วยรหัสโปรเจ็กต์ในเครื่องหมายคำพูด
import vertexai
from vertexai.generative_models import GenerativeModel, ChatSession

project_id = "enter-your-project-id-here" 
location = "us-central1" 

vertexai.init(project=project_id, location=location)
model = GenerativeModel("gemini-1.5-pro")
chat_session = model.start_chat()  

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat_session, prompt)) 

prompt = "What are all the colors of the Google logo?"
print(get_chat_response(chat_session, prompt)) 

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

ตอนนี้กําหนดค่า py-vm2 ด้วยการกำหนดค่าเดียวกัน

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

c29615cdf9324209.png

  1. มาทดสอบกันอย่างรวดเร็วว่าเชื่อมต่อกับ Vertex Gemini API ได้ไหม คำสั่งนี้จะส่ง Ping ไปยัง us-central1-aiplatform.googleapis.com 4 ครั้งเพื่อให้เราได้รับการตอบกลับจากที่อยู่สาธารณะของ API
ping -c 4 us-central1-aiplatform.googleapis.com
  1. เราจะกลับมาทดสอบ VM นี้ในภายหลัง ปิดเซสชัน SSH แล้วมาดำเนินการต่อ

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

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

  1. เปิด Cloud Shell ในมุมมองเครื่องมือแก้ไขหากยังไม่ได้เปิด เราจะสร้างสิ่งต่อไปนี้
  • สร้าง IP สำหรับปลายทาง PSC 192.168.255.250 (resource "google_compute_global_address" "default")
  • สร้างปลายทาง PSC ไปยัง Google API (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 Terminal และตรวจสอบว่าคุณอยู่ในโฟลเดอร์ terraform-build จากนั้นเรียกใช้ terraform init แล้วเรียกใช้ terraform plan ซึ่งจะแสดงการเพิ่มรายการ 2 รายการ
    จากนั้นเรียกใช้ terraform apply แล้วพิมพ์ yes เพื่อสร้างปลายทาง IP และ PSC ของ Google APIs
  2. ยืนยันว่าปลายทางมีอยู่
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global

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

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

  1. ไปที่อินสแตนซ์ VM py-vm1 เลือก SSH และ SSH เข้าสู่ VM
  2. รับสิทธิ์เข้าถึงรูทโดยพิมพ์ sudo -i
  3. เราจะใช้อินสแตนซ์นี้เพื่อทดสอบปลายทาง PSC เท่านั้น ดังนั้นเราจะแก้ไขไฟล์โฮสต์ด้วยรายการต่อไปนี้
echo 192.168.255.250 us-central1-aiplatform.googleapis.com >> /etc/hosts

cat /etc/hosts
  1. ตรวจสอบเส้นทางการเชื่อมต่อไปยัง us-central1-aiplatform.googleapis.com โดยใช้คำสั่ง ping ซึ่งจะเป็นการ ping ที่อยู่ IP ที่คุณป้อนในไฟล์โฮสต์ นี่คือปลายทาง PSC และคุณจะทำการ ping ไม่สำเร็จ
ping -c 2 us-central1-aiplatform.googleapis.com
  1. กลับไปที่คอนโซลและเปิดอินสแตนซ์อื่นของอินสแตนซ์ VM py-vm1 เลือก SSH และ SSH เข้าสู่ VM
  2. รับสิทธิ์เข้าถึงรูทโดยพิมพ์ sudo -i
  3. เรียกใช้คำสั่งต่อไปนี้เพื่อดูการเชื่อมต่อใน TCP dump
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
  1. ตอนนี้ให้เปลี่ยนกลับไปที่อินสแตนซ์ SSH แรกของอินสแตนซ์ VM py-vm1
  2. เปิดใช้งาน env โดยใช้
cd py-gem-env
source env/bin/activate
  1. มาทดสอบ Python กัน พิมพ์ ipython เพื่อเปิดใช้งานอินเทอร์เฟซ ipython คราวนี้ การเข้าชมจะส่งผ่านปลายทาง PSC
ipython
  1. ตอนนี้ให้คัดลอกและวางข้อมูลต่อไปนี้ ข้อความนี้ถาม Gemini ว่า "โลโก้ Google มีสีอะไรบ้าง" และ "อธิบายน้ำตกไนแองการา" แทนที่ enter-your-project-id-here ด้วยรหัสโปรเจ็กต์ในเครื่องหมายคำพูด
import vertexai
from vertexai.generative_models import GenerativeModel, ChatSession

project_id = "enter-your-project-id-here" 
location = "us-central1" 

vertexai.init(project=project_id, location=location)
model = GenerativeModel("gemini-1.5-pro")
chat_session = model.start_chat()  # Corrected line

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat_session, prompt)) 

prompt = "What are all the colors of the Google logo?"
print(get_chat_response(chat_session, prompt)) 

prompt = "Describe Niagara Falls"
print(get_chat_response(chat_session, prompt))
  1. กด Enter เพื่อเรียกใช้และดูผลลัพธ์
  2. กลับไปที่อินสแตนซ์ที่ 2 ของอินสแตนซ์ VM py-vm1 คุณควรเห็นผลลัพธ์ของ TCPDUMP คุณจะเห็นอินและเอาต์ที่มีที่อยู่ IP ของ VM และที่อยู่ IP ของปลายทาง PSC เพื่อเชื่อมต่อกับ us-central1-aiplatform.googleapis.com
22:21:55.032433 ens4  Out IP 10.0.11.18.57114 > 192.168.255.250.443: Flags [.], ack 8606, win 501, options [nop,nop,TS val 1797790182 ecr 2593039209], length 0
22:21:55.468285 ens4  In  IP 192.168.255.250.443 > 10.0.11.18.57114: Flags [P.], seq 8606:8991, ack 5785, win 296, options [nop,nop,TS val 2593039645 ecr 1797790182], length 385
22:21:55.468320 ens4  Out IP 10.0.11.18.57114 > 192.168.255.250.443: Flags [.], ack 8991, win 501, options [nop,nop,TS val 1797790618 ecr 2593039645], length 0
  1. ปิดเซสชัน SSH ทั้งหมดไปยังอินสแตนซ์ VM py-vm1

8. งานที่ 6 สร้างรายการ 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 Terminal และตรวจสอบว่าคุณอยู่ในโฟลเดอร์ terraform-build จากนั้นเรียกใช้ terraform plan ซึ่งจะแสดงรายการที่จะเพิ่ม
    จากนั้นเรียกใช้ terraform apply แล้วพิมพ์ yes เพื่อสร้างรายการ DNS ส่วนตัว
  2. คุณควรเห็นการตั้งค่าที่มีระเบียน A และ CNAME ดังตัวอย่างนี้ โปรดดู b7f122f0d1fd2850.png
  3. ต่อไปเราจะยืนยันการเชื่อมต่อกับการเปลี่ยนแปลงเหล่านี้ใน py-vm2

9. งานที่ 7 ยืนยันการเชื่อมต่ออุปกรณ์ปลายทางผ่านที่อยู่ IP (ไม่บังคับ)

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

  1. ไปที่อินสแตนซ์ VM py-vm2 เลือก SSH และ SSH เข้าสู่ VM
  2. รับสิทธิ์เข้าถึงรูทโดยพิมพ์ sudo -i
  3. ตรวจสอบเส้นทางการเชื่อมต่อไปยัง us-central1-aiplatform.googleapis.com โดยใช้คำสั่ง ping ซึ่งจะ ping ที่อยู่ IP ใน DNS ส่วนตัว ซึ่งเป็นระเบียน A สำหรับ googleapis IP นี้เป็นปลายทาง PSC และคุณจะทำการ ping ไม่สำเร็จ
ping -c 2 us-central1-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. ตรวจสอบเส้นทางการเชื่อมต่อไปยัง us-central1-aiplatform.googleapis.com โดยใช้คำสั่ง dig ซึ่งควรเป็นที่อยู่ IP ของปลายทาง PSC
dig us-central1-aiplatform.googleapis.com
  1. กลับไปที่คอนโซลและเปิดอินสแตนซ์อื่นของอินสแตนซ์ VM py-vm2 เลือก SSH และ SSH เข้าสู่ VM
  2. รับสิทธิ์เข้าถึงรูทโดยพิมพ์ sudo -i
  3. เรียกใช้คำสั่งต่อไปนี้เพื่อดูการเชื่อมต่อในการดัมพ์ TCP
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
  1. ตอนนี้ให้เปลี่ยนกลับไปที่อินสแตนซ์ SSH แรกของอินสแตนซ์ VM py-vm2
  2. เปิดใช้งาน env โดยใช้
cd py-gem-env
source env/bin/activate
  1. มาทดสอบ Python กัน พิมพ์ ipython เพื่อเปิดใช้งานอินเทอร์เฟซ ipython
ipython
  1. ตอนนี้ให้คัดลอกและวางข้อมูลต่อไปนี้ คำถามนี้ถาม Gemini ว่า "โลโก้ Google มีสีอะไรบ้าง" และ "ฟีเจอร์ 2 อย่างของ Gemini Pro คืออะไร" แทนที่ enter-your-project-id-here ด้วยรหัสโปรเจ็กต์ในเครื่องหมายคำพูด
import vertexai
from vertexai.generative_models import GenerativeModel, ChatSession

project_id = "enter-your-project-id-here" 
location = "us-central1" 

vertexai.init(project=project_id, location=location)
model = GenerativeModel("gemini-1.5-pro")
chat_session = model.start_chat()  # Corrected line

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat_session, prompt)) 

prompt = "What are all the colors of the Google logo?"
print(get_chat_response(chat_session, prompt)) 

prompt = "What are two features of Gemini pro"
print(get_chat_response(chat_session, prompt))
  1. กด Enter เพื่อเรียกใช้และดูผลลัพธ์
  2. กลับไปที่อินสแตนซ์ที่ 2 ของอินสแตนซ์ VM py-vm2 คุณควรเห็นผลลัพธ์ของ TCPDUMP คุณจะเห็นข้อมูลขาเข้าและขาออก และที่อยู่ IP ของ VM จะใช้ที่อยู่ IP ของปลายทาง PSC เพื่อเชื่อมต่อกับ us-central1-aiplatform.googleapis.com

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

10. ล้าง

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

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

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

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

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

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

เข้ารับการทดสอบครั้งถัดไป

ดำเนินการต่อในภารกิจของคุณกับ Google Cloud และดูห้องทดลอง Google Cloud Skills Boost อื่นๆ เหล่านี้