1. סקירה כללית
אפשר לגשת ל-Vertex AI API דרך האינטרנט, אבל יכול להיות שבארגון שלכם תרצו לגשת ל-Vertex AI API באופן פרטי בלי לעבור דרך האינטרנט. בשיעור ה-Lab הזה תקבלו גישה ל-Vertex Gemini chat API דרך Python SDK שפועל במכונה וירטואלית (VM) דרך האינטרנט הציבורי.
לאחר מכן תיצורו נקודת קצה מסוג Private Service Connect ל-Google APIs, ותשנו את זרימת התנועה כך שתשתמש בנקודת הקצה הפרטית כדי להתחבר ל-Gemini chat API. ההגדרות יהיו שילוב של Terraform, gcloud והמסוף.
בשיעור ה-Lab הזה תלמדו ליצור את התבנית הבאה.
איור 1.
2. מטרה
בשיעור ה-Lab הזה תלמדו איך לבצע את המשימה הבאה:
- הגדרת מכונה וירטואלית לשימוש ב-Python SDK
- חיבור ל-Gemini Chat באמצעות סקריפט Python
- הגדרת נקודת קצה מסוג PSC כדי להתחבר אל Googleapis
- אימות נתיב הקישוריות אל Googleais
- הגדרת רשומות DNS ידניות
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- שם הפרויקט הוא השם המוצג של המשתתפים בפרויקט. זוהי מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן אותו.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שמגדירים אותו. מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי. בדרך כלל לא משנה מה המחרוזת הזו. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט (בדרך כלל מזהים אותו בתור
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניכם, תוכלו ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות כתובת משלכם ולבדוק אם היא זמינה. לא ניתן לשנות את השם אחרי השלב הזה, והוא יישאר למשך כל פרק הזמן של הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי העזרה.
- בשלב הבא, כדי להשתמש במשאבים או ב-API של Cloud, תצטרכו להפעיל את החיוב במסוף Cloud. השלמת הקודלאב הזה לא תעלה הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים אחרי סיום המדריך, אפשר למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בסך 300$.
הפעלת Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל בסדנת הקוד הזו נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת ב-Cloud.
במסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:
תהליך ההקצאה והחיבור לסביבה אמור להימשך רק כמה רגעים. בסיום, אמור להופיע משהו כזה:
המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, משפרת מאוד את ביצועי הרשת ואת האימות. אתם יכולים לבצע את כל העבודה בקודלאב הזה בדפדפן. אין צורך להתקין שום דבר.
3. משימה 1: הגדרת סביבה באמצעות Terraform
ניצור VPC בהתאמה אישית עם כללי חומת אש ותת-רשת. פותחים את מסוף Cloud ובוחרים את הפרויקט שבו רוצים להשתמש.
- פותחים את Cloud Shell שנמצא בחלק העליון של המסוף בצד שמאל, מוודאים שמוצג מזהה הפרויקט הנכון ב-Cloud Shell ומאשרים את ההנחיות להרשאת גישה.
- יוצרים תיקייה בשם terraform-build ועוברים לתיקייה
mkdir terraform-build && cd terraform-build
- יוצרים קובץ main.tf וקובץ variable.tf.
touch main.tf variable.tf
- עוברים לתצוגה של Cloud Shell Editor. בוחרים באפשרות editor (עריכה) ומוודאים שמאשרים את ההנחיות הנדרשות כדי שהממשק יוכל לטעון.
- אחרי הטעינה, עוברים אל קובץ > פתיחת תיקייה, עוברים אל /home/your-user-name/terraform-build ובוחרים באפשרות Ok כדי לפתוח את התיקייה בעורך.
- בוחרים את הקובץ variable.tf ומוסיפים את הטקסט הבא. מחליפים את הטקסט
your-project-id-here
במזהה הפרויקט בפועל במירכאות
variable "project_id" { type = string default = "your-project-id-here" } variable "network_id" { type = string default = "python-net" }
- לאחר מכן פותחים את הקובץ main.tf. נוסיף קוד terraform כדי לבצע פעולות שונות, כפי שמוסבר בהמשך.
הפעלת ממשקי API |
|
יצירת VPC בשם python-net |
|
הוספת תת-רשת |
|
הוספת שני כללי חומת אש |
|
- מעתיקים ומדביקים את הקוד הבא בקובץ 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"] }
- חוזרים למסוף Cloud Shell, מוודאים שנמצאים בספרייה terraform-build
cd terraform-build
ומריצים את הפקודות הבאות:
terraform init
אתחול ספריית העבודה. בשלב הזה מתבצעת הורדה של הספקים הנדרשים להגדרה הנתונה.
terraform plan
יצירת תוכנית ביצוע שמציגה את הפעולות ש-Terraform תבצע כדי לפרוס את התשתית.
- עכשיו, כדי ליצור את המשאבים, מריצים את הפקודה
terraform apply
ומקלידיםyes
כדי להריץ אותה.
4. משימה 2: יצירת שער NAT ומכונות וירטואליות באמצעות Terraform
אנחנו צריכים לתת גישה חיצונית יוצאת לאינטרנט, לכן נוצר שער Cloud NAT ומצרפים אותו.
- פותחים את Cloud Shell, עוברים לתיקייה terraform-build ויוצרים את הקבצים הבאים (סה"כ שלושה קבצים). נערוך אותם בהמשך.
touch nat-vm.tf psc.tf dns.tf
- עוברים לתצוגת Cloud Shell editor ובוחרים את הקובץ nat-vm.tf ומוסיפים את קוד Terraform הבא. הפעולה הזו תיצור שער NAT ושתי מכונות וירטואליות.
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
}
- עוברים ל-Cloud Shell terminal, מוודאים שנמצאים בתיקייה terraform-build ומריצים את הפקודה
terraform plan
. תוצג הודעה על הוספת 4 פריטים. לאחר מכן, מריצים את הפקודהterraform apply
ומקלידיםyes
כדי ליצור את שער ה-NAT ואת שתי המכונות הווירטואליות.
5. משימה 3: הגדרה ובדיקה של מכונות וירטואליות
- עוברים אל מכונות ה-VM. בוחרים את המכונה הווירטואלית שמתחילה ב-py-vm1. בוחרים באפשרות SSH.
- אחרי שמתחברים ל-py-vm1 באמצעות SSH,מפעילים את root על ידי הקלדה של
sudo -i
. - מפעילים את סביבת venv:
cd py-gem-env
source env/bin/activate
- עכשיו נבצע אימות כדי שנוכל לבצע בדיקות בהמשך. מריצים את הפקודה הבאה במכונה הווירטואלית ומקישים על y כשמופיעה בקשה.
gcloud auth application-default login
- לאחר מכן מעתיקים את כתובת ה-URL שמתחילה ב-https://, פותחים כרטיסייה חדשה בחלון הדפדפן של המעבדה ומדביקים את כתובת ה-URL. מאשרים את ההנחיות.
- כשמוצגת ההודעה הבאה, בוחרים באפשרות 'העתקה', חוזרים לסשן של המכונה הווירטואלית py-vm1 ובשדה Enter authorization code: מדביקים את הקוד שהעתקתם ולוחצים על Enter כדי לבצע אימות.
- עכשיו נבצע בדיקה מהירה כדי לבדוק אם אנחנו יכולים להתחבר ל-Vertex Gemini API. לשם כך, נשתמש בכתובת us-central1-aiplatform.googleapis.com, כך שנבצע
dig
לכתובת הזו כדי לראות איך התנועה מנותבת.
dig us-central1-aiplatform.googleapis.com
- אמורה להופיע הודעה דומה (הכתובת תהיה שונה). שימו לב שהנתיב עובר דרך כתובות 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
- עכשיו נשתמש ב-Python. מקלידים
ipython
כדי להפעיל את הממשק ipython.
ipython
- עכשיו מעתיקים ומדביקים את הטקסט הבא. כך שואלים את 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))
- מקישים על Enter כדי להריץ את הפקודה ולראות את התוצאה.
- הבקשה הזו ניגשה ל-Vertex דרך ממשק ה-API הציבורי.
- סוגרים את סשן ה-SSH וממשיכים.
עכשיו מגדירים את py-vm2 עם אותן הגדרות
- עוברים אל מכונות ה-VM. בוחרים את המכונה הווירטואלית שמתחילה ב-py-vm2. בוחרים באפשרות SSH.
- אחרי שמתחברים ל-py-vm2 ב-SSH, מפעילים את root באמצעות הקלדה של **
sudo -i
** - מפעילים את סביבת venv:
cd py-gem-env
source env/bin/activate
- עכשיו נבצע אימות כדי שנוכל לבצע בדיקות בהמשך. מריצים את הפקודה הבאה במכונה הווירטואלית
gcloud auth application-default login
- לאחר מכן מעתיקים את כתובת ה-URL שמתחילה ב-https://, פותחים כרטיסייה חדשה בחלון הדפדפן של המעבדה ומדביקים את כתובת ה-URL. מאשרים את ההנחיות.
- כשמוצגת ההודעה הבאה, בוחרים באפשרות 'העתקה', חוזרים לסשן ה-VM py-vm2 ובשדה Enter authorization code: מדביקים את הקוד שהעתקתם ולוחצים על Enter כדי לבצע אימות.
- עכשיו נבצע בדיקה מהירה כדי לבדוק אם אנחנו יכולים להתחבר ל-Vertex Gemini API. הפקודה הזו תשלח 4 פינגים לכתובת us-central1-aiplatform.googleapis.com כדי שנקבל תשובה מהכתובת הציבורית של ה-API.
ping -c 4 us-central1-aiplatform.googleapis.com
- נבדוק את המכונה הווירטואלית הזו מאוחר יותר. סוגרים את סשן ה-SSH וממשיכים.
6. משימה 4: יצירת נקודת הקצה (endpoint) של PSC ל-googleapis באמצעות Terraform
כדי לאפשר קישוריות פרטית לנקודת הקצה של Vertex API, נוצר נקודת קצה של Private Service Connect לממשקי Google API. כך נוכל להשתמש בכתובת IP פרטית שתוקצה לנו כדי לנתב את התנועה לממשקי ה-API של Google שאנחנו צריכים, במקרה הזה Vertex.
- פותחים את 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 = ""
}
- עוברים לטרמינל של Cloud Shell ומוודאים שנמצאים בתיקייה
terraform-build
. לאחר מכן, מריצים את הפקודהterraform init
ואז את הפקודהterraform plan
. יוצגו 2 פריטים שנוספו.
לאחר מכן, מריצים את הפקודהterraform apply
ומקלידיםyes
כדי ליצור את נקודת הקצה של ממשקי ה-API של Google ל-IP ול-PSC. - אימות קיומה של נקודת קצה
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global
7. משימה 5: אימות הקישוריות של נקודת קצה באמצעות כתובת IP
נשתמש בנקודת הקצה הפרטית כדי להתחבר ל-Gemini.
- עוברים למכונה הווירטואלית py-vm1. בחירת SSH והתחברות ל-VM באמצעות SSH
- כדי לקבל הרשאת root, מקלידים
sudo -i
- נשתמש במכונה הספציפית הזו רק כדי לבדוק את נקודת הקצה של PSC, לכן נשנה את קובץ המארח באמצעות הרשומה הבאה:
echo 192.168.255.250 us-central1-aiplatform.googleapis.com >> /etc/hosts
cat /etc/hosts
- בודקים את נתיב הקישוריות אל us-central1-aiplatform.googleapis.com באמצעות הפקודה
ping
. הפקודה תשלח הודעה (ping) לכתובת ה-IP שהזנתם בקובצי המארחים. זהו נקודת קצה של PSC והפינגים לא יצליחו.
ping -c 2 us-central1-aiplatform.googleapis.com
- חוזרים למסוף ופותחים מכונה וירטואלית נוספת של py-vm1. בוחרים באפשרות SSH ומתחברים למכונה הווירטואלית באמצעות SSH.
- כדי לקבל הרשאת root, מקלידים
sudo -i
- מריצים את הפקודה הבאה כדי לראות את הקישוריות בקובץ נתונים של TCP.
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
- עכשיו עוברים בחזרה למכונה הווירטואלית py-vm1.
- מפעילים את הסביבה באמצעות
cd py-gem-env
source env/bin/activate
- עכשיו נבדוק את Python. מקלידים
ipython
כדי להפעיל את הממשק ipython. הפעם התנועה תעבור דרך נקודת הקצה של PSC.
ipython
- עכשיו מעתיקים ומדביקים את הטקסט הבא. כך שואלים את 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))
- מקישים על Enter כדי להריץ את הפקודה ולראות את התוצאה.
- חוזרים למופע השני של מכונה וירטואלית py-vm1. אמורה להופיע התוצאה של TCPDUMP. תוכלו לראות את 'כניסה' ו'יציאה' עם כתובות ה-IP של המכונה הווירטואלית, וגם את כתובת ה-IP של נקודת הקצה (endpoint) של 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
- סגירת כל סשני ה-SSH למכונה הווירטואלית py-vm1
8. משימה 6: יצירת רשומת DNS ידנית ל-googleapis באמצעות Terraform (אופציונלי)
אפשר ליצור רשומת DNS ידנית שמפנה לנקודת הקצה של PSC באמצעות DNS פרטי. השינוי הזה ישפיע על כל הערוצים שתקציבו אליו.
- עוברים אל 'שירותי רשת' ובוחרים ב-Cloud DNS.
- בתצוגת האזורים אמור להופיע אזור שנוצר באופן אוטומטי עבור Private Service Connect ל-Google APIs, עם ספריית שירותים מסוג אזור. אפשר להשתמש בו כדי להתחבר לנקודת הקצה (endpoint) של PSC בפורמט **SERVICE-ENDPOINT.p.googleapis.com דוגמה:
aiplatform-pscvertexgemini.p.googleapis.com
- במקרה הזה, אנחנו רוצים ליצור באופן ידני רשומה של DNS פרטי. ההגדרה תהיה כך
- יוצרים תחום DNS פרטי בשם 'googleapis-private' עבור 'googleapis.com' ומגבילים אותו לרשת 'python-net'.
- מוסיפים רשומת A כדי למפות את 'googleapis.com' לכתובת ה-IP '192.168.255.250'.
- מוסיפים רשומת CNAME כדי להפנות אוטומטית את כל תתי-הדומיינים של 'googleapis.com' (למשל, www.googleapis.com) אל 'googleapis.com'.
- פותחים את 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."]
}
- עוברים לטרמינל של Cloud Shell ומוודאים שנמצאים בתיקייה
terraform-build
. לאחר מכן מריצים את הפקודהterraform plan
כדי להציג את הפריטים שיתווספו.
לאחר מכן מריצים את הפקודהterraform apply
ומקלידיםyes
כדי ליצור את הרשומה של ה-DNS הפרטי. - ההגדרה אמורה לכלול רשומת A ורשומת CNAME, כמו בדוגמה הבאה:
- בשלב הבא אנחנו מאמתים את הקישוריות עם השינויים האלה ב-py-vm2.
9. משימה 7: אימות הקישוריות של נקודת הקצה באמצעות כתובת IP (אופציונלי)
נשתמש בנקודת הקצה הפרטית כדי להתחבר ל-Gemini.
- עוברים למכונה הווירטואלית py-vm2. בחירת SSH והתחברות ל-VM באמצעות SSH
- כדי לקבל הרשאת root, מקלידים
sudo -i
- בודקים את נתיב הקישוריות אל us-central1-aiplatform.googleapis.com באמצעות הפקודה
ping
. הפקודה הזו תשלח הודעה ל-ping לכתובת ה-IP ב-DNS הפרטי, רשומת A של googleapis. כתובת ה-IP הזו היא נקודת קצה של PSC והפינגים שלכם ייכשלו.
ping -c 2 us-central1-aiplatform.googleapis.com
- בודקים את נתיב הקישוריות באמצעות
ping
באמצעות רשומת ה-DNS שנוצרה באופן אוטומטי עבור ממשקי Google API של PSC באמצעותaiplatform-pscvertexgemini.p.googleapis.com
. הכתובת הזו מפנה לכתובת ה-IP של נקודת הקצה של PSC, והפינגים לא יצליחו.
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
- בודקים את נתיב הקישוריות אל us-central1-aiplatform.googleapis.com באמצעות הפקודה
dig
. זו צריכה להיות כתובת ה-IP של נקודת הקצה של PSC.
dig us-central1-aiplatform.googleapis.com
- חוזרים למסוף ופותחים מכונה וירטואלית נוספת, py-vm2. בוחרים באפשרות SSH ומתחברים למכונה הווירטואלית באמצעות SSH.
- כדי לקבל הרשאת root, מקלידים
sudo -i
- מריצים את הפקודה הבאה כדי לראות את הקישוריות ב-dump של TCP
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
- עכשיו עוברים בחזרה למכונה הווירטואלית py-vm2.
- מפעילים את הסביבה באמצעות
cd py-gem-env
source env/bin/activate
- עכשיו נבדוק את Python. מקלידים
ipython
כדי להפעיל את הממשק ipython.
ipython
- עכשיו מעתיקים ומדביקים את הטקסט הבא. הבקשה הזו מבקשת מ-Gemini לומר "מהם כל הצבעים של הלוגו של Google" וגם "מהן שתי התכונות של 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))
- מקישים על Enter כדי להריץ את הפקודה ולראות את התוצאה.
- חוזרים למכונה הווירטואלית השנייה py-vm2. אמורה להופיע תוצאת ה-TCPDUMP. תוכלו לראות את הנתונים הנכנסים והיוצאים, וכתובת ה-IP של המכונה הווירטואלית משתמשת בכתובת ה-IP של נקודת הקצה (endpoint) של PSC כדי להתחבר אל us-central1-aiplatform.googleapis.com
סגירת כל סשני ה-SSH למכונה הווירטואלית py-vm2
10. ניקוי
- נכנסים ל-Cloud Shell, מוודאים שנמצאים בספרייה terraform-build
cd terraform-build
ומריצים את הפקודה הבאהterraform destroy
ומקלידיםyes
. כל המשאבים שיצרתם בפרויקט באמצעות Terraform יוסרו.
11. מזל טוב
הצלחת להתחבר לצ'אט של Vertex Gemini באמצעות כתובת ה-API הציבורית וגם באופן פרטי באמצעות נקודת קצה (endpoint) של Private Service Connect לממשקי Google API. הפונקציונליות הזו מאפשרת להרחיב את קישוריות ה-API הפרטי לסביבה המקומית או לסביבת ענן אחרת שמחוברות באמצעות (Interconnect, Cross-Cloud Interconnect ו-VPC).
השלבים הבאים / מידע נוסף
מידע נוסף על ניתוב ב-Vertex AI
Codelab: גישה ל-Anthropic Claude ב-Vertex AI באמצעות Python SDK דרך נקודת קצה של Private Service Connect
אל שיעור ה-Lab הבא
אתם יכולים להמשיך את יחידת ה-Quest ב-Google Cloud ולנסות את שיעורי ה-Lab הבאים של Google Cloud Skills Boost: