1. מבוא
ב-codelab הזה תלמדו איך לפרוס את שירות השליפה של מסדי נתונים של AI גנרטיבי וליצור אפליקציה אינטראקטיבית לדוגמה באמצעות סביבת הפריסה.

כאן אפשר לקבל מידע נוסף על שירות השליפה של AI גנרטיבי ועל אפליקציית הדוגמה.
דרישות מוקדמות
- הבנה בסיסית של מסוף Google Cloud
- מיומנויות בסיסיות בממשק שורת הפקודה וב-Cloud Shell של Google Cloud
מה תלמדו
- איך יוצרים מכונה של Cloud SQL
- איך מתחברים למופע
- איך מגדירים ומפעילים את שירות השליפה של מסדי נתונים של AI גנרטיבי
- איך פורסים אפליקציה לדוגמה באמצעות השירות שנפרס
מה תצטרכו
- חשבון Google Cloud ופרויקט Google Cloud
- דפדפן אינטרנט כמו Chrome
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
ב-מסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-codelab הזה בדפדפן. לא צריך להתקין שום דבר.
3. לפני שמתחילים
הפעלת ה-API
ב-Cloud Shell, מוודאים שמזהה הפרויקט מוגדר:
בדרך כלל מזהה הפרויקט מופיע בסוגריים בשורת הפקודה ב-Cloud Shell, כמו שמוצג בתמונה:

gcloud config set project [YOUR-PROJECT-ID]
אחר כך מגדירים את משתנה הסביבה PROJECT_ID למזהה הפרויקט בענן ב-Google Cloud:
PROJECT_ID=$(gcloud config get-value project)
מפעילים את כל השירותים הנדרשים:
gcloud services enable sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
vpcaccess.googleapis.com \
aiplatform.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
iam.googleapis.com
הפלט הצפוי במסוף:
student@cloudshell:~ (gleb-test-short-004)$ gcloud services enable sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
vpcaccess.googleapis.com \
aiplatform.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
iam.googleapis.com
Operation "operations/acf.p2-404051529011-664c71ad-cb2b-4ab4-86c1-1f3157d70ba1" finished successfully.
4. יצירת מכונה של Cloud SQL
יוצרים מכונה של Cloud SQL עם תמיכה בווקטורים.
יצירת סיסמה
מגדירים סיסמה למשתמש ברירת המחדל במסד הנתונים. אתם יכולים להגדיר סיסמה משלכם או להשתמש בפונקציה אקראית כדי ליצור סיסמה
export CLOUDSQL_PASSWORD=`openssl rand -hex 12`
חשוב לרשום לפניכם את הערך שנוצר לסיסמה
echo $CLOUDSQL_PASSWORD
MySQL
אפשר להפעיל את הדגל cloudsql_vector במהלך יצירת המופע. כרגע, תמיכה בווקטורים מוצעת ב-MySQL 8.0.36 וב-MySQL 8.0.37.
export region=us-central1
gcloud sql instances create my-cloudsql-instance --region=$region --database-version=MYSQL_8_0_36 --database-flags=cloudsql_vector=ON --root-password=$CLOUDSQL_PASSWORD
הפלט הצפוי במסוף (כתובת ה-IP הוסרה):
student@cloudshell:~ export region=us-central1 gcloud sql instances create my-cloudsql-instance --region=$region --database-version=MYSQL_8_0_36 --database-flags=cloudsql_vector=ON --root-password=$CLOUDSQL_PASSWORD Creating Cloud SQL instance for MYSQL_8_0_36...done. Created [https://sqladmin.googleapis.com/sql/v1beta4/projects/test-project-402417/instances/my-cloudsql-instance]. NAME DATABASE_VERSION LOCATION TIER PRIMARY_ADDRESS PRIVATE_ADDRESS STATUS my-cloudsql-instance MYSQL_8_0_36 us-central1-a db-n1-standard-1 00.000.00.00 - RUNNABLE
PostgreSQL
התוסף pgvector מוצע בגרסאות >= 11.
export region=us-central1
gcloud sql instances create my-cloudsql-instance --region=$region --database-version=POSTGRES_15 --tier=db-g1-small
הפלט הצפוי במסוף (כתובת ה-IP הוסרה):
student@cloudshell:~ export region=us-central1 gcloud sql instances create my-cloudsql-instance --region=$region --database-version=POSTGRES_15 --tier=db-g1-small Creating Cloud SQL instance for POSTGRES_15...done. Created [https://sqladmin.googleapis.com/sql/v1beta4/projects/test-project-402417/instances/my-cloudsql-instance]. NAME DATABASE_VERSION LOCATION TIER PRIMARY_ADDRESS PRIVATE_ADDRESS STATUS my-cloudsql-instance POSTGRES_15 us-central1-a db-g1-small 00.000.00.00 - RUNNABLE
אחרי שיוצרים את המופע, צריך להגדיר סיסמה למשתמש שמוגדר כברירת מחדל במופע ולבדוק אם אפשר להתחבר באמצעות הסיסמה. כשמוצגת בקשה להתחבר, מזינים את הסיסמה.
gcloud sql users set-password postgres \
--instance=my-cloudsql-instance \
--password=$CLOUDSQL_PASSWORD
gcloud sql connect my-cloudsql-instance --user=postgres
הפלט הצפוי במסוף:
student@cloudshell:~ (test-project-402417)$ gcloud sql users set-password postgres \
--instance=my-cloudsql-instance \
--password=$CLOUDSQL_PASSWORD
gcloud sql connect my-cloudsql-instance --user=postgres
Updating Cloud SQL user...done.
Allowlisting your IP for incoming connection for 5 minutes...done.
Connecting to database with SQL user [postgres].Password:
psql (16.3 (Ubuntu 16.3-1.pgdg22.04+1), server 15.7)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=>
יוצאים מהסשן של psql:
exit
5. הכנת מכונה וירטואלית ב-GCE
יצירת חשבון שירות
מכיוון שנשתמש במכונת ה-VM כדי לפרוס את שירות השליפה של מסדי הנתונים של GenAI ולארח אפליקציה לדוגמה, השלב הראשון הוא ליצור חשבון שירות של Google (GSA). מכונת ה-VM של GCE תשתמש ב-GSA, ולכן נצטרך להעניק לה את ההרשאות הנדרשות כדי לעבוד עם שירותים אחרים.
ב-Cloud Shell, מריצים את הפקודה:
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create compute-aip --project $PROJECT_ID
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudbuild.builds.editor"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/artifactregistry.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/storage.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/run.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudsql.viewer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudsql.client"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
פריסת מכונה וירטואלית ב-GCE
יוצרים מכונה וירטואלית ב-GCE באותו אזור ובאותה רשת VPC כמו מכונת Cloud SQL.
ב-Cloud Shell, מריצים את הפקודה:
export ZONE=us-central1-a
gcloud compute instances create instance-1 \
--zone=$ZONE \
--create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com
הפלט הצפוי במסוף:
student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
gcloud compute instances create instance-1 \
--zone=$ZONE \
--create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
--scopes=https://www.googleapis.com/auth/cloud-platform
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/zones/us-central1-a/instances/instance-1].
NAME: instance-1
ZONE: us-central1-a
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.71.192.233
STATUS: RUNNING
איך נותנים למכונה הווירטואלית הרשאה להתחבר ל-Cloud SQL
צריך להוסיף את כתובת ה-IP הציבורית של המכונה הווירטואלית לרשימת הרשתות המורשות של מכונת Cloud SQL. ב-Cloud Shell, מריצים את הפקודה:
VM_EXTERNAL_IP=$(gcloud compute instances describe instance-1 --zone=us-central1-a --format='get(networkInterfaces[0].accessConfigs[0].natIP)')
gcloud sql instances patch my-cloudsql-instance --authorized-networks=$VM_EXTERNAL_IP
הפלט הצפוי במסוף:
student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
student@cloudshell:~ (test-project-402417)$ VM_EXTERNAL_IP=$(gcloud compute instances describe instance-1 --zone=us-central1-a --format='get(networkInterfaces[0].accessConfigs[0].natIP)')
gcloud sql instances patch my-cloudsql-instance --authorized-networks=$VM_EXTERNAL_IP
When adding a new IP address to authorized networks, make sure to also include any IP addresses that have already been authorized. Otherwise, they will be overwritten and de-authorized.
Do you want to continue (Y/n)? Y
The following message will be used for the patch API method.
{"name": "my-cloudsql-instance", "project": "test-project-402417", "settings": {"ipConfiguration": {"authorizedNetworks": [{"value": "34.71.252.173"}]}}}
Patching Cloud SQL instance...done.
Updated [https://sqladmin.googleapis.com/sql/v1beta4/projects/test-project-402417/instances/my-cloudsql-instance].
התקנת לקוח מסד הנתונים
MySQL
מתקינים את תוכנת הלקוח של MySQL במכונה הווירטואלית שנפרסה.
מתחברים ל-VM:
gcloud compute ssh instance-1 --zone=us-central1-a
הפלט הצפוי במסוף:
student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417]. Updating project ssh metadata...done. Waiting for SSH key to propagate. Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts. Linux instance-1 5.10.0-26-cloud-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. student@instance-1:~$
מריצים את פקודת התוכנה בתוך ה-VM:
sudo apt-get update
sudo apt-get install --yes default-mysql-client
הפלט הצפוי במסוף:
student@instance-1:~$ sudo apt-get update sudo apt-get install --yes mysql-client Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl libgdbm-compat4 libperl5.32 libterm-readkey-perl mariadb-client-10.5 mariadb-client-core-10.5 perl perl-modules-5.32 Suggested packages: libclone-perl libmldbm-perl libnet-daemon-perl libsql-statement-perl perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl make libtap-harness-archive-perl The following NEW packages will be installed: default-mysql-client libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl libgdbm-compat4 libperl5.32 libterm-readkey-perl mariadb-client-10.5 mariadb-client-core-10.5 perl Perl-modules-5.32 ...redacted... Processing triggers for libc-bin (2.31-13+deb11u10) ...
PostgreSQL
מתקינים את תוכנת הלקוח של PostgreSQL במכונה הווירטואלית שנפרסה.
מתחברים ל-VM:
gcloud compute ssh instance-1 --zone=us-central1-a
הפלט הצפוי במסוף:
student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417]. Updating project ssh metadata...done. Waiting for SSH key to propagate. Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts. Linux instance-1 5.10.0-26-cloud-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. student@instance-1:~$
מריצים את פקודת התוכנה בתוך ה-VM:
sudo apt-get update
sudo apt-get install --yes postgresql-client
הפלט הצפוי במסוף:
student@instance-1:~$ sudo apt-get update sudo apt-get install --yes postgresql-client Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B] Get:4 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B] Hit:7 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable InRelease Get:8 https://packages.cloud.google.com/apt cloud-sdk-bookworm InRelease [1652 B] Get:2 https://deb.debian.org/debian bookworm InRelease [151 kB] Get:3 https://deb.debian.org/debian bookworm-updates InRelease [55.4 kB] ...redacted... update-alternatives: using /usr/share/postgresql/15/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode Setting up postgresql-client (15+248) ... Processing triggers for man-db (2.11.2-2) ... Processing triggers for libc-bin (2.36-9+deb12u7) ...
התחברות למופע
MySQL
מתחברים למופע הראשי מהמכונה הווירטואלית באמצעות MySQL.
ממשיכים עם סשן ה-SSH הפתוח למכונה הווירטואלית. אם החיבור נותק, צריך להתחבר שוב באמצעות אותה פקודה שצוינה למעלה.
משתמשים בסיסמה $CLOUDSQL_PASSWORD שצוינה קודם ובשם המופע כדי להתחבר ל-Cloud SQL מהמכונה הווירטואלית של GCE:
export CLOUDSQL_PASSWORD=<Noted password>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export INSTANCE_NAME=my-cloudsql-instance
export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD
הפלט הצפוי במסוף:
student@instance-1:~$ export CLOUDSQL_PASSWORD=P9... student@instance-1:~$ export REGION=us-central1 student@instance-1:~$ export INSTANCE_NAME=my-cloud-sql-instance student@instance-1:~$ export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)") student@instance-1:~$ mysql –host=$INSTANCE_IP –user=root –password=$CLOUDSQL_PASSWORD –sslmode=require Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 2824706 Server version: 8.0.36-google (Google) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>
יוצאים מהסשן של MySQL בלי לנתק את חיבור ה-SSH:
exit
הפלט הצפוי במסוף:
MySQL [(none)]> exit Bye student@instance-1:~$
PostgreSQL
מתחברים למופע הראשי מהמכונה הווירטואלית באמצעות psql.
ממשיכים עם סשן ה-SSH הפתוח למכונה הווירטואלית. אם החיבור נותק, צריך להתחבר שוב באמצעות אותה פקודה שצוינה למעלה.
משתמשים בסיסמה $CLOUDSQL_PASSWORD שצוינה קודם ובשם המופע כדי להתחבר ל-PostgreSQL מהמכונה הווירטואלית של GCE:
export PGPASSWORD=<Noted password (CLOUDSQL_PASSWORD)>
export CLOUDSQL_PASSWORD=$PGPASSWORD
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export INSTANCE_NAME=my-cloudsql-instance
export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"
הפלט הצפוי במסוף:
student@instance-1:~$ export CLOUDSQL_PASSWORD=P9...
student@instance-1:~$ export REGION=us-central1
student@instance-1:~$ export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres sslmode=require"
psql (13.11 (Debian 13.11-0+deb11u1), server 14.7)
WARNING: psql major version 13, server major version 14.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=>
יוצאים מהסשן של psql בלי לנתק את חיבור ה-SSH:
exit
הפלט הצפוי במסוף:
postgres=> exit student@instance-1:~$
6. הפעלת מסד הנתונים
נשתמש במכונה הווירטואלית של הלקוח כפלטפורמה לאכלוס מסד הנתונים בנתונים ולאירוח האפליקציה. השלב הראשון הוא ליצור מסד נתונים ולאכלס אותו בנתונים.
יצירת מסד נתונים
MySQL
יוצרים מסד נתונים בשם assistantdemo.
בסשן של המכונה הווירטואלית ב-GCE, מריצים את הפקודה:
mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD -e "CREATE DATABASE assistantdemo"
הפלט הצפוי במסוף (ללא פלט):
student@instance-1:~$ mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD -e "CREATE DATABASE assistantdemo" student@instance-1:~$
PostgreSQL
יוצרים מסד נתונים בשם assistantdemo.
בסשן של המכונה הווירטואלית ב-GCE, מריצים את הפקודה:
psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"
הפלט הצפוי במסוף:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo" CREATE DATABASE student@instance-1:~$
מפעילים את התוסף pgvector.
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector"
הפלט הצפוי במסוף (ללא פלט):
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector" CREATE EXTENSION student@instance-1:~$
הכנת סביבת Python
כדי להמשיך, נשתמש בסקריפטים מוכנים של Python ממאגר GitHub, אבל לפני כן נצטרך להתקין את התוכנה הנדרשת.
במכונה הווירטואלית של GCE מריצים את הפקודה:
sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
הפלט הצפוי במסוף:
student@instance-1:~$ sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl
Suggested packages:
git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
The following NEW packages will be installed:
git git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl python3.11-venv
0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded.
Need to get 12.4 MB of archives.
After this operation, 52.2 MB of additional disk space will be used.
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
...redacted...
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 23.0.1
Uninstalling pip-23.0.1:
Successfully uninstalled pip-23.0.1
Successfully installed pip-24.0
(.venv) student@instance-1:~$
בודקים את גרסת Python.
במכונה הווירטואלית של GCE מריצים את הפקודה:
python -V
הפלט הצפוי במסוף:
(.venv) student@instance-1:~$ python -V Python 3.11.2 (.venv) student@instance-1:~$
הכנת קובץ התצורה
משכפלים את מאגר GitHub עם הקוד של שירות האחזור והאפליקציה לדוגמה.
במכונה הווירטואלית של GCE מריצים את הפקודה:
git clone https://github.com/GoogleCloudPlatform/genai-databases-retrieval-app.git
הפלט הצפוי במסוף:
student@instance-1:~$ git clone https://github.com/GoogleCloudPlatform/genai-databases-retrieval-app.git Cloning into 'genai-databases-retrieval-app'... remote: Enumerating objects: 525, done. remote: Counting objects: 100% (336/336), done. remote: Compressing objects: 100% (201/201), done. remote: Total 525 (delta 224), reused 179 (delta 135), pack-reused 189 Receiving objects: 100% (525/525), 46.58 MiB | 16.16 MiB/s, done. Resolving deltas: 100% (289/289), done.
MySQL
במכונה הווירטואלית של GCE מריצים את הפקודה:
cd ~/genai-databases-retrieval-app/retrieval_service
cp example-config-cloudsql.yml config.yml
cp example-config-cloudsql.yml config.yml
sed -i s/engine/mysql/g config.yml
sed -i s/my-project/$PROJECT_ID/g config.yml
sed -i s/my-region/$REGION/g config.yml
sed -i s/my-instance/$INSTANCE_NAME/g config.yml
sed -i s/my-password//g config.yml
sed -i s/my_database/assistantdemo/g config.yml
sed -i s/my-user/root/g config.yml
cat config.yml
הפלט הצפוי במסוף:
student@instance-1:~$ cd genai-databases-retrieval-app/retrieval_service cp example-config-cloudsql.yml config.yml sed -i s/127.0.0.1/$INSTANCE_IP/g config.yml sed -i s/my-password/$CLOUDSQL_PASSWORD/g config.yml sed -i s/my_database/assistantdemo/g config.yml sed -i s/my-user/postgres/g config.yml cat config.yml host: 0.0.0.0 # port: 8080 datastore: # Example for MySQL kind: "cloudsql-mysql" host: 10.65.0.2 # port: 5432 database: "assistantdemo" user: "root" password: "P9..."
Postgres
במכונה הווירטואלית של GCE מריצים את הפקודה:
cd ~/genai-databases-retrieval-app/retrieval_service
cp example-config-cloudsql.yml config.yml
sed -i s/engine/postgres/g config.yml
sed -i s/my-project/$PROJECT_ID/g config.yml
sed -i s/my-region/$REGION/g config.yml
sed -i s/my-instance/$INSTANCE_NAME/g config.yml
sed -i s/my-password/$PGPASSWORD/g config.yml
sed -i s/my_database/assistantdemo/g config.yml
sed -i s/my-user/postgres/g config.yml
cat config.yml
הפלט הצפוי במסוף:
student@instance-1:~$ cd genai-databases-retrieval-app/retrieval_service cp example-config-cloudsql.yml config.yml sed -i s/engine/postgres/g config.yml sed -i s/my-project/$PROJECT_ID/g config.yml sed -i s/my-region/$REGION/g config.yml sed -i s/my-instance/$INSTANCE_NAME/g config.yml sed -i s/my-password/$CLOUDSQL_PASSWORD/g config.yml sed -i s/my_database/assistantdemo/g config.yml sed -i s/my-user/postgres/g config.yml cat config.yml host: 0.0.0.0 # port: 8080 datastore: # Example for Postgres kind: "cloudsql-postgres" host: 10.65.0.2 # port: 5432 database: "assistantdemo" user: "postgres" password: "P9..."
איכלוס מסד הנתונים
מאכלסים את מסד הנתונים במערך הנתונים לדוגמה. הפקודה הראשונה מוסיפה את כל החבילות הנדרשות לסביבה הווירטואלית של Python, והפקודה השנייה מאכלסת את מסד הנתונים בנתונים.
במכונה הווירטואלית של GCE מריצים את הפקודה:
cd ~/genai-databases-retrieval-app/retrieval_service
pip install -r requirements.txt
python run_database_init.py
הפלט הצפוי במסוף (צונזר):
student@instance-1:~/genai-databases-retrieval-app/retrieval_service$ pip install -r requirements.txt python run_database_init.py Collecting asyncpg==0.28.0 (from -r requirements.txt (line 1)) Obtaining dependency information for asyncpg==0.28.0 from https://files.pythonhosted.org/packages/77/a4/88069f7935b14c58534442a57be3299179eb46aace2d3c8716be199ff6a6/asyncpg-0.28.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata Downloading asyncpg-0.28.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.3 kB) Collecting fastapi==0.101.1 (from -r requirements.txt (line 2)) ... database init done. student@instance-1:~/genai-databases-retrieval-app/retrieval_service$
7. פריסת שירות השליפה ב-Cloud Run
עכשיו אפשר לפרוס את שירות האחזור ב-Cloud Run. השירות אחראי לעבוד עם מסד הנתונים ולחלץ ממנו את המידע הנדרש על סמך הבקשה מאפליקציית AI.
יצירת חשבון שירות
יוצרים חשבון שירות לשירות האחזור ומעניקים לו את ההרשאות הנדרשות.
פותחים כרטיסייה נוספת ב-Cloud Shell באמצעות הסימן '+' בחלק העליון.

בכרטיסייה החדשה של Cloud Shell, מריצים את הפקודה:
export PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create retrieval-identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudsql.client"
הפלט הצפוי במסוף:
student@cloudshell:~ (gleb-test-short-003)$ gcloud iam service-accounts create retrieval-identity Created service account [retrieval-identity].
סוגרים את הכרטיסייה באמצעות הפקודה 'exit' בכרטיסייה:
exit
פריסת שירות האחזור
ממשיכים בכרטיסייה הראשונה שבה אתם מחוברים למכונה הווירטואלית באמצעות SSH, ומבצעים פריסה של השירות.
בסשן ה-SSH של המכונה הווירטואלית, מריצים את הפקודה:
cd ~/genai-databases-retrieval-app
gcloud alpha run deploy retrieval-service \
--source=./retrieval_service/\
--no-allow-unauthenticated \
--service-account retrieval-identity \
--region us-central1 \
--network=default \
--quiet
הפלט הצפוי במסוף:
student@instance-1:~/genai-databases-retrieval-app$ gcloud alpha run deploy retrieval-service \
--source=./retrieval_service/\
--no-allow-unauthenticated \
--service-account retrieval-identity \
--region us-central1 \
--network=default
This command is equivalent to running `gcloud builds submit --tag [IMAGE] ./retrieval_service/` and `gcloud run deploy retrieval-service --image [IMAGE]`
Building using Dockerfile and deploying container to Cloud Run service [retrieval-service] in project [gleb-test-short-003] region [us-central1]
X Building and deploying... Done.
✓ Uploading sources...
✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/6ebe74bf-3039-4221-b2e9-7ca8fa8dad8e?project=1012713954588].
✓ Creating Revision...
✓ Routing traffic...
Setting IAM Policy...
Completed with warnings:
Setting IAM policy failed, try "gcloud beta run services remove-iam-policy-binding --region=us-central1 --member=allUsers --role=roles/run.invoker retrieval-service"
Service [retrieval-service] revision [retrieval-service-00002-4pl] has been deployed and is serving 100 percent of traffic.
Service URL: https://retrieval-service-onme64eorq-uc.a.run.app
student@instance-1:~/genai-databases-retrieval-app$
אימות השירות
עכשיו אפשר לבדוק אם השירות פועל בצורה תקינה ולמכונה הווירטואלית יש גישה לנקודת הקצה. אנחנו משתמשים בכלי השירות gcloud כדי לקבל את נקודת הקצה של שירות האחזור. אפשר גם לבדוק את הערך במסוף Cloud ולהחליף את "$(gcloud run services list –filter="(retrieval-service)" בפקודת curl בערך שמופיע שם.
בסשן ה-SSH של המכונה הווירטואלית, מריצים את הפקודה:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
הפלט הצפוי במסוף:
student@instance-1:~/genai-databases-retrieval-app$ curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
{"message":"Hello World"}student@instance-1:~/genai-databases-retrieval-app$
אם אנחנו רואים את ההודעה "Hello World", זה אומר שהשירות שלנו פעיל ומטפל בבקשות.
8. פריסת אפליקציה לדוגמה
עכשיו, אחרי שהשירות לאחזור נתונים פועל, אפשר לפרוס אפליקציה לדוגמה שתשתמש בשירות. אפשר לפרוס את האפליקציה במכונה וירטואלית או בכל שירות אחר כמו Cloud Run, Kubernetes או אפילו באופן מקומי במחשב נייד. במאמר הזה נסביר איך פורסים את התוסף במכונה הווירטואלית.
הכנת הסביבה
אנחנו ממשיכים לעבוד על המכונה הווירטואלית באמצעות אותו סשן SSH. כדי להריץ את האפליקציה שלנו, צריך להוסיף כמה מודולים של Python. הפקודה תופעל מהספרייה של האפליקציה באותה סביבה וירטואלית של Python.
בסשן ה-SSH של המכונה הווירטואלית, מריצים את הפקודה:
cd ~/genai-databases-retrieval-app/llm_demo
pip install -r requirements.txt
הפלט הצפוי (עם צנזורה):
student@instance-1:~$ cd ~/genai-databases-retrieval-app/llm_demo pip install -r requirements.txt Collecting fastapi==0.104.0 (from -r requirements.txt (line 1)) Obtaining dependency information for fastapi==0.104.0 from https://files.pythonhosted.org/packages/db/30/b8d323119c37e15b7fa639e65e0eb7d81eb675ba166ac83e695aad3bd321/fastapi-0.104.0-py3-none-any.whl.metadata Downloading fastapi-0.104.0-py3-none-any.whl.metadata (24 kB) ...
הכנת מזהה לקוח
כדי להשתמש בפונקציונליות של הזמנות באפליקציה, צריך להכין מזהה לקוח OAuth 2.0 באמצעות מסוף Cloud. זה יקרה כשניכנס לאפליקציה, כי ההזמנה משתמשת בפרטי הכניסה של הלקוחות כדי לתעד את נתוני ההזמנה במסד הנתונים.
במסוף Cloud, עוברים אל 'ממשקי API ושירותים', לוחצים על 'מסך הסכמה ל-OAuth' ובוחרים באפשרות 'משתמש פנימי'.

אחר כך לוחצים על 'יצירה' ופועלים לפי ההוראות במסך הבא.

צריך למלא את שדות החובה, כמו 'שם האפליקציה' ו'כתובת אימייל לתמיכה במשתמשים'. אפשר גם להוסיף דומיין שרוצים להציג במסך ההסכמה, ובסוף את 'הפרטים ליצירת קשר עם המפתח'.

אחר כך לוחצים על הלחצן 'שמירה והמשך' בתחתית הדף כדי לעבור לדף הבא.

לא צריך לשנות שם שום דבר, אלא אם רוצים לציין את היקפי ההרשאות. לסיום, לוחצים שוב על הלחצן 'שמירה והמשך' כדי לאשר את הפעולה. הפעולה הזו תגדיר את מסך ההסכמה של האפליקציה.
השלב הבא הוא ליצור את מזהה הלקוח. בחלונית הימנית לוחצים על 'פרטי כניסה' שמובילים לפרטי הכניסה של OAuth2.

לוחצים על 'יצירת פרטי כניסה' בחלק העליון ובוחרים באפשרות 'מזהה לקוח OAuth'. אז ייפתח מסך נוסף.

בוחרים באפשרות 'אפליקציית אינטרנט' מהרשימה הנפתחת של סוג האפליקציה ומזינים את ה-URI של האפליקציה (ואת היציאה – אופציונלי) בשדה 'מקורות JavaScript מורשים'. כדי להשתמש בחלון הקופץ של ההרשאה, צריך להוסיף ל'כתובות URI מורשות להפניה אוטומטית' את מארח האפליקציה עם '/login/google' בסוף. בתמונה שלמעלה אפשר לראות שהשתמשתי ב-http://localhost בתור ה-URI של אפליקציית הבסיס שלי.
אחרי שלוחצים על הלחצן 'יצירה', מופיע חלון קופץ עם פרטי הכניסה של הלקוח.

נצטרך את מזהה הלקוח (ואם רוצים, גם את סוד הלקוח) בהמשך כדי להשתמש בו באפליקציה שלנו
הפעלת אפליקציית Assistant
לפני שמפעילים את האפליקציה, צריך להגדיר כמה משתני סביבה. הפונקציונליות הבסיסית של האפליקציה, כמו חיפוש טיסות ושירותים בשדה התעופה, דורשת רק את BASE_URL שמפנה את האפליקציה לשירות האחזור. אפשר לקבל אותו באמצעות הפקודה gcloud .
בסשן ה-SSH של המכונה הווירטואלית, מריצים את הפקודה:
export BASE_URL=$(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
הפלט הצפוי (עם צנזורה):
student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export BASE_URL=$(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
כדי להשתמש ביכולות מתקדמות יותר של האפליקציה, כמו הזמנה ושינוי של טיסות, צריך להיכנס לאפליקציה באמצעות חשבון Google. לשם כך, צריך לספק את משתנה הסביבה CLIENT_ID באמצעות מזהה הלקוח של OAuth מהפרק בנושא הכנת מזהה הלקוח:
export CLIENT_ID=215....apps.googleusercontent.com
הפלט הצפוי (עם צנזורה):
student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export CLIENT_ID=215....apps.googleusercontent.com
עכשיו אפשר להריץ את האפליקציה:
python run_app.py
הפלט אמור להיראות כך:
student@instance-1:~/genai-databases-retrieval-app/llm_demo$ python main.py INFO: Started server process [28565] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8081 (Press CTRL+C to quit)
קישור לאפליקציה
יש כמה דרכים להתחבר לאפליקציה שפועלת במכונה הווירטואלית. לדוגמה, אפשר לפתוח את יציאה 8081 במכונה הווירטואלית באמצעות כללים בחומת האש ב-VPC, או ליצור מאזן עומסים עם כתובת IP ציבורית. במקרה הזה נשתמש במנהרת SSH למכונה הווירטואלית, שתמפה את היציאה המקומית 8080 ליציאה 8081 במכונה הווירטואלית.
התחברות ממחשב מקומי
כדי להתחבר ממכונה מקומית, צריך להריץ מנהרת SSH. אפשר לעשות זאת באמצעות gcloud compute ssh:
gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8081:localhost:8081
הפלט אמור להיראות כך:
student-macbookpro:~ student$ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081 Warning: Permanently added 'compute.7064281075337367021' (ED25519) to the list of known hosts. Linux instance-1.us-central1-c.c.gleb-test-001.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. student@instance-1:~$
עכשיו אפשר לפתוח את הדפדפן ולהשתמש בכתובת http://localhost:8081 כדי להתחבר לאפליקציה. אמור להופיע מסך האפליקציה.

התחברות מ-Cloud Shell
אפשר גם להשתמש ב-Cloud Shell כדי להתחבר. פותחים כרטיסייה נוספת ב-Cloud Shell באמצעות הסימן '+' בחלק העליון.

בכרטיסייה החדשה של Cloud Shell, מריצים את פקודת gcloud כדי להתחיל את המנהור למכונה הווירטואלית:
gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
תוצג שגיאה 'לא ניתן להקצות את הכתובת המבוקשת' – אפשר להתעלם ממנה.
הפלט הצפוי:
student@cloudshell:~ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081 bind [::1]:8081: Cannot assign requested address inux instance-1.us-central1-a.c.gleb-codelive-01.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sat May 25 19:15:46 2024 from 35.243.235.73 student@instance-1:~$
הוא פותח את יציאה 8080 ב-Cloud Shell, שאפשר להשתמש בה לתצוגה מקדימה של האתר.
לוחצים על הלחצן 'תצוגה מקדימה באינטרנט' בפינה הימנית העליונה של Cloud Shell, ובתפריט הנפתח בוחרים באפשרות 'תצוגה מקדימה ביציאה 8080'.

תיפתח כרטיסייה חדשה בדפדפן האינטרנט עם ממשק האפליקציה. אמור להופיע הדף 'Cymbal Air Customer Service Assistant'. בסרגל הכתובות של הדף מוצג ה-URI של דף התצוגה המקדימה. צריך להסיר את החלק '/?authuser=0&redirectedPreviously=true' בסוף

צריך להשתמש בחלק הראשון של ה-URI, למשל https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/, ולהשאיר אותו בחלון הדפדפן. אחר כך צריך להזין אותו בפרטי הכניסה שיצרנו בפרק 'הכנת מזהה הלקוח' בשדות Authorized JavaScript origins (מקורות JavaScript מורשים) ו-Authorized redirect URIs (כתובות URI מורשות להפניה אוטומטית), במקום הערכים http://localhost:8080 שסופקו במקור, או בנוסף אליהם. הערך העליון ייראה כך: https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev והערך התחתון ייראה כך: https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/login/google

כניסה לאפליקציה
אחרי שמסיימים את ההגדרה ופותחים את האפליקציה, אפשר להשתמש בלחצן 'כניסה' בפינה השמאלית העליונה של מסך האפליקציה כדי להזין את פרטי הכניסה. הפעולה הזו היא אופציונלית ונדרשת רק אם רוצים לנסות את פונקציית ההזמנה של האפליקציה.

ייפתח חלון קופץ שבו אפשר לבחור את פרטי הכניסה.
אחרי הכניסה לחשבון, האפליקציה מוכנה ואפשר להתחיל לפרסם את הבקשות בשדה בחלק התחתון של החלון.
ההדגמה הזו מציגה את העוזר לשירות לקוחות Cymbal Air. חברת התעופה Cymbal Air היא חברת תעופה פיקטיבית לנוסעים. העוזר הוא צ'אט בוט מבוסס-AI שעוזר לנוסעים לנהל את הטיסות שלהם ולחפש מידע על מרכז הפעילות של חברת התעופה Cymbal Air בנמל התעופה הבינלאומי של סן פרנסיסקו (SFO).
בלי להיכנס לחשבון (בלי CLIENT_ID), הוא יכול לעזור לענות על שאלות של משתמשים כמו:
מתי הטיסה הבאה לדנוור?
יש חנויות יוקרה ליד שער C28?
איפה אפשר לקנות קפה ליד שער A6?
איפה אפשר לקנות מתנה?
תזמין לי טיסה לדנוור שיוצאת ב-10:35 בבוקר
כשנכנסים לאפליקציה, אפשר לנסות יכולות אחרות כמו הזמנת טיסות או בדיקה אם המושב שהוקצה לכם הוא מושב ליד החלון או המעבר.

האפליקציה משתמשת במודלים העדכניים של Google כדי ליצור תשובות, ומוסיפה להן מידע על טיסות ועל מתקנים ממסד הנתונים התפעולי של Cloud SQL. מידע נוסף על אפליקציית ההדגמה הזו זמין בדף GitHub של הפרויקט.
9. ניקוי הסביבה
אחרי שכל המשימות יושלמו, נוכל לנקות את הסביבה שלנו.
מחיקת שירות Cloud Run
ב-Cloud Shell, מריצים את הפקודה:
gcloud run services delete retrieval-service --region us-central1
הפלט הצפוי במסוף:
student@cloudshell:~ (gleb-test-short-004)$ gcloud run services delete retrieval-service --region us-central1 Service [retrieval-service] will be deleted. Do you want to continue (Y/n)? Y Deleting [retrieval-service]...done. Deleted service [retrieval-service].
מחיקת חשבון השירות של שירות Cloud Run
ב-Cloud Shell, מריצים את הפקודה:
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet
הפלט הצפוי במסוף:
student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-222] student@cloudshell:~ (gleb-test-short-004)$ gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet deleted service account [retrieval-identity@gleb-test-short-004.iam.gserviceaccount.com] student@cloudshell:~ (gleb-test-short-004)$
מחיקת המופע ב-Cloud SQL
כשמסיימים את שיעור ה-Lab, צריך להשמיד את המכונה של Cloud SQL
אם התנתקתם וכל ההגדרות הקודמות אבדו, מגדירים את משתני הפרויקט והסביבה ב-Cloud Shell:
export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)
מוחקים את המכונה:
gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
הפלט הצפוי במסוף:
student@cloudshell:~$ gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID All of the instance data will be lost when the instance is deleted. Do you want to continue (Y/n)? y Deleting Cloud SQL instance...done. Deleted [https://sandbox.googleapis.com/v1beta4/projects/test-project-001-402417/instances/my-cloudsql-instance].
עכשיו אפשר להרוס את המכונה הווירטואלית
מחיקת מכונה וירטואלית של GCE
ב-Cloud Shell, מריצים את הפקודה:
export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
הפלט הצפוי במסוף:
student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
Deleted
מחיקת חשבון השירות של מכונה וירטואלית ב-GCE ושירות האחזור
ב-Cloud Shell, מריצים את הפקודה:
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet
הפלט הצפוי במסוף:
student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project) gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet Your active configuration is: [cloudshell-222] deleted service account [compute-aip@gleb-test-short-004.iam.gserviceaccount.com] student@cloudshell:~ (gleb-test-short-004)$
10. מזל טוב
כל הכבוד, סיימתם את ה-Codelab.
מה נכלל
- איך יוצרים מכונה של Cloud SQL
- איך מתחברים למופע Cloud SQL
- איך מגדירים ומפעילים את שירות השליפה של מסדי נתונים של AI גנרטיבי
- איך פורסים אפליקציה לדוגמה באמצעות השירות שנפרס