1. Pengantar
Dalam codelab ini, Anda akan mempelajari cara men-deploy Layanan Pengambilan Database GenAI dan membuat contoh aplikasi interaktif menggunakan lingkungan yang di-deploy.
Anda bisa mendapatkan informasi lebih lanjut tentang Layanan Pengambilan GenAI dan aplikasi contohnya di sini.
Prasyarat
- Pemahaman dasar tentang Konsol Google Cloud
- Keterampilan dasar dalam antarmuka command line dan Google Cloud shell
Yang akan Anda pelajari
- Cara men-deploy Cluster AlloyDB
- Cara terhubung ke AlloyDB
- Cara mengonfigurasi dan men-deploy Layanan Pengambilan Database GenAI
- Cara men-deploy aplikasi contoh menggunakan layanan yang di-deploy
Yang akan Anda butuhkan
- Akun Google Cloud dan Project Google Cloud
- Browser web seperti Chrome
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.
3. Sebelum memulai
Aktifkan API
Output:
Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan:
Biasanya project ID ditampilkan dalam tanda kurung di command prompt di Cloud Shell seperti yang ditunjukkan dalam gambar:
gcloud config set project [YOUR-PROJECT-ID]
Kemudian, tetapkan variabel lingkungan PROJECT_ID ke project ID Google Cloud Anda:
PROJECT_ID=$(gcloud config get-value project)
Aktifkan semua layanan yang diperlukan:
gcloud services enable alloydb.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
Output yang diharapkan
student@cloudshell:~ (gleb-test-short-004)$ gcloud services enable alloydb.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. Deploy Cluster AlloyDB
Buat cluster AlloyDB dan instance utama. Prosedur berikut menjelaskan cara membuat cluster dan instance AlloyDB menggunakan Google Cloud SDK. Jika Anda lebih memilih pendekatan konsol, Anda dapat mengikuti dokumentasi di sini.
Sebelum membuat cluster AlloyDB, kita memerlukan rentang IP pribadi yang tersedia di VPC untuk digunakan oleh instance AlloyDB mendatang. Jika tidak memilikinya, kita harus membuatnya, menetapkannya untuk digunakan oleh layanan Google internal, dan setelah itu kita dapat membuat cluster dan instance.
Buat rentang IP pribadi
Kita perlu menyetel konfigurasi Akses Layanan Pribadi di VPC untuk AlloyDB. Asumsinya di sini adalah kita memiliki jaringan VPC "default" dalam project dan jaringan tersebut akan digunakan untuk semua tindakan.
Buat rentang IP pribadi:
gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
Buat koneksi pribadi menggunakan rentang IP yang dialokasikan:
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \ --global \ --purpose=VPC_PEERING \ --prefix-length=24 \ --description="VPC private service access" \ --network=default Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range]. student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=psa-range \ --network=default Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully. student@cloudshell:~ (test-project-402417)$
Buat Cluster AlloyDB
Di bagian ini, kita akan membuat cluster AlloyDB di region us-central1.
Tentukan sandi untuk pengguna postgres. Anda dapat menentukan sandi Anda sendiri atau menggunakan fungsi acak untuk membuatnya
export PGPASSWORD=`openssl rand -hex 12`
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`
Catat sandi PostgreSQL untuk penggunaan berikutnya.
echo $PGPASSWORD
Anda akan memerlukan sandi tersebut pada masa mendatang untuk terhubung ke instance sebagai pengguna postgres. Sebaiknya tulis atau salin di suatu tempat agar dapat digunakan nanti.
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD bbefbfde7601985b0dee5723
Membuat Cluster Uji Coba Gratis
Jika belum pernah menggunakan AlloyDB, Anda dapat membuat cluster uji coba gratis:
Tentukan region dan nama cluster AlloyDB. Kita akan menggunakan region us-central1 dan alloydb-aip-01 sebagai nama cluster:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
Jalankan perintah untuk membuat cluster:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION \
--subscription-type=TRIAL
Output konsol yang diharapkan:
export REGION=us-central1 export ADBCLUSTER=alloydb-aip-01 gcloud alloydb clusters create $ADBCLUSTER \ --password=$PGPASSWORD \ --network=default \ --region=$REGION \ --subscription-type=TRIAL Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4 Creating cluster...done.
Buat instance utama AlloyDB untuk cluster kita di sesi cloud shell yang sama. Jika koneksi terputus, Anda harus menentukan variabel lingkungan nama cluster dan region lagi.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=8 \
--region=$REGION \
--cluster=$ADBCLUSTER
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \ --instance-type=PRIMARY \ --cpu-count=8 \ --region=$REGION \ --availability-type ZONAL \ --cluster=$ADBCLUSTER Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721 Creating instance...done.
Membuat Cluster Standar AlloyDB
Jika bukan cluster AlloyDB pertama Anda dalam project, lanjutkan dengan pembuatan cluster standar.
Tentukan region dan nama cluster AlloyDB. Kita akan menggunakan region us-central1 dan alloydb-aip-01 sebagai nama cluster:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
Jalankan perintah untuk membuat cluster:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
Output konsol yang diharapkan:
export REGION=us-central1 export ADBCLUSTER=alloydb-aip-01 gcloud alloydb clusters create $ADBCLUSTER \ --password=$PGPASSWORD \ --network=default \ --region=$REGION Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4 Creating cluster...done.
Buat instance utama AlloyDB untuk cluster kita di sesi cloud shell yang sama. Jika koneksi terputus, Anda harus menentukan variabel lingkungan nama cluster dan region lagi.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--cluster=$ADBCLUSTER
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \ --instance-type=PRIMARY \ --cpu-count=2 \ --region=$REGION \ --availability-type ZONAL \ --cluster=$ADBCLUSTER Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721 Creating instance...done.
5. Siapkan Virtual Machine GCE
Buat Akun Layanan
Karena kita akan menggunakan VM untuk men-deploy layanan Pengambilan Database GenAI dan menghosting aplikasi contoh, langkah pertama adalah membuat Akun Layanan Google (GSA). GSA akan digunakan oleh VM GCE, dan kita perlu memberinya izin akses yang diperlukan agar dapat berfungsi dengan layanan lain.
Di Cloud Shell, jalankan:
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/alloydb.viewer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/serviceusage.serviceUsageConsumer"
Deploy VM GCE
Buat VM GCE di region dan VPC yang sama dengan cluster AlloyDB.
Di Cloud Shell, jalankan:
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
Output konsol yang diharapkan:
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
Instal Klien Postgres
Instal software klien PostgreSQL pada VM yang di-deploy
Hubungkan ke VM:
gcloud compute ssh instance-1 --zone=us-central1-a
Output konsol yang diharapkan:
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:~$
Instal software yang menjalankan perintah dalam VM:
sudo apt-get update
sudo apt-get install --yes postgresql-client
Output konsol yang diharapkan:
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) ...
Hubungkan ke Instance
Hubungkan ke instance utama dari VM menggunakan psql.
Lanjutkan dengan sesi SSH yang dibuka ke VM Anda. Jika koneksi Anda telah terputus, hubungkan kembali menggunakan perintah yang sama seperti di atas.
Gunakan $PGASSWORD yang dicatat sebelumnya dan nama cluster untuk terhubung ke AlloyDB dari VM GCE:
export PGPASSWORD=<Noted password>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"
Output konsol yang diharapkan:
student@instance-1:~$ export PGPASSWORD=P9... student@instance-1:~$ export REGION=us-central1 student@instance-1:~$ export ADBCLUSTER=alloydb-aip-01 student@instance-1:~$ export INSTANCE_IP=export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)") 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=>
Keluar dari sesi psql dengan tetap mempertahankan koneksi SSH:
exit
Output konsol yang diharapkan:
postgres=> exit student@instance-1:~$
6. Melakukan inisialisasi database
Kita akan menggunakan VM klien sebagai platform untuk mengisi database dengan data dan menghosting aplikasi. Langkah pertama adalah membuat database dan mengisinya dengan data.
Buat Database
Buat database dengan nama "assistantdemo".
Dalam sesi VM GCE, jalankan:
psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"
Output konsol yang diharapkan:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo" CREATE DATABASE student@instance-1:~$
Aktifkan ekstensi pgVector.
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector"
Output konsol yang diharapkan:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector" CREATE EXTENSION student@instance-1:~$
Menyiapkan Lingkungan Python
Untuk melanjutkan, kita akan menggunakan skrip Python yang sudah disiapkan dari repositori GitHub. Namun, sebelum itu, kita perlu menginstal software yang diperlukan.
Di VM GCE, jalankan:
sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
Output konsol yang diharapkan:
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:~$
Verifikasi versi Python.
Di VM GCE, jalankan:
python -V
Output konsol yang diharapkan:
(.venv) student@instance-1:~$ python -V Python 3.11.2 (.venv) student@instance-1:~$
Isi Database
Buat clone repositori GitHub dengan kode untuk layanan pengambilan dan aplikasi contoh.
Di VM GCE, jalankan:
git clone https://github.com/GoogleCloudPlatform/genai-databases-retrieval-app.git
Output konsol yang diharapkan:
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.
Siapkan file konfigurasi
Di VM GCE, jalankan:
cd genai-databases-retrieval-app/retrieval_service
cp example-config.yml config.yml
sed -i s/127.0.0.1/$INSTANCE_IP/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
Output konsol yang diharapkan:
student@instance-1:~$ cd genai-databases-retrieval-app/retrieval_service cp example-config.yml config.yml sed -i s/127.0.0.1/$INSTANCE_IP/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 host: 0.0.0.0 # port: 8080 datastore: # Example for AlloyDB kind: "postgres" host: 10.65.0.2 # port: 5432 database: "assistantdemo" user: "postgres" password: "P9..."
Isi database dengan set data contoh. Perintah pertama menambahkan semua paket yang diperlukan ke lingkungan virtual Python, sedangkan perintah kedua mengisi database dengan data.
Di VM GCE, jalankan:
pip install -r requirements.txt
python run_database_init.py
Output konsol yang diharapkan (disamarkan):
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. Men-deploy Layanan Pengambilan ke Cloud Run
Sekarang kita dapat men-deploy layanan pengambilan ke Cloud Run. Layanan ini bertanggung jawab untuk menggunakan database dan mengekstrak informasi yang diperlukan dari database berdasarkan permintaan dari aplikasi AI.
Buat Akun Layanan
Buat akun layanan untuk layanan pengambilan dan berikan hak istimewa yang diperlukan.
Buka tab Cloud Shell lain menggunakan tanda "+" di bagian atas.
Di tab Cloud Shell baru, jalankan:
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"
Output konsol yang diharapkan:
student@cloudshell:~ (gleb-test-short-003)$ gcloud iam service-accounts create retrieval-identity Created service account [retrieval-identity].
Tutup tab dengan menjalankan perintah "exit" di tab:
exit
Men-deploy Layanan Pengambilan
Lanjutkan di tab pertama tempat Anda terhubung ke VM melalui SSH dengan men-deploy layanan.
Dalam sesi SSH VM, jalankan:
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
Output konsol yang diharapkan:
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$
Verifikasi Layanan
Sekarang kita dapat memeriksa apakah layanan berjalan dengan benar dan VM memiliki akses ke endpoint. Kita menggunakan utilitas gcloud untuk mendapatkan endpoint layanan pengambilan. Atau, Anda dapat memeriksanya di cloud console dan mengganti "$(gcloud run services list –filter="(retrieval-service)" dengan nilai dari sana dalam perintah curl.
Dalam sesi SSH VM, jalankan:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
Output konsol yang diharapkan:
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$
Jika kita melihat pesan "Hello World", berarti layanan kita sudah aktif dan melayani permintaan.
8. Men-deploy Aplikasi Contoh
Sekarang setelah layanan pengambilan aktif dan berjalan, kita dapat men-deploy aplikasi contoh yang akan menggunakan layanan tersebut. Aplikasi dapat di-deploy di VM atau layanan lain seperti Cloud Run, Kubernetes, atau bahkan secara lokal di laptop. Di sini kita akan menunjukkan cara men-deploy-nya di VM.
Siapkan lingkungan
Kita tetap mengerjakan VM menggunakan sesi SSH yang sama. Untuk menjalankan aplikasi, kita perlu menambahkan beberapa modul Python. Perintah akan dijalankan dari direktori aplikasi di lingkungan virtual Python yang sama.
Dalam sesi SSH VM, jalankan:
cd ~/genai-databases-retrieval-app/llm_demo
pip install -r requirements.txt
Output yang diharapkan (disamarkan):
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) ...
Menyiapkan Client ID
Untuk menggunakan fungsi pemesanan aplikasi, kita perlu menyiapkan Client ID OAuth 2.0 menggunakan Cloud Console. Tanpanya, kami tidak dapat login ke aplikasi dengan kredensial Google untuk melakukan pemesanan. Kita memerlukannya untuk mencatat data pemesanan di database.
Di Cloud Console, buka API dan Layanan, lalu klik "Layar izin OAuth". Tindakan ini akan membuka halaman Ringkasan Oauth tempat kita mengklik Mulai.
Di halaman berikutnya, kita memberikan nama aplikasi, email dukungan pengguna, lalu mengklik Berikutnya.
Di layar berikutnya, kita memilih Internal untuk aplikasi kita dan mengklik Next lagi.
Kemudian, kita memberikan email kontak dan mengklik Berikutnya
Kemudian, kita menyetujui kebijakan layanan Google API dan menekan tombol Create.
Tindakan ini akan mengarahkan kita ke halaman tempat kita dapat membuat klien OAuth.
Di layar, kita memilih "Web Application" dari menu dropdown, memasukkan "Cymbal Air" sebagai aplikasi, lalu menekan tombol Add URI.
URI mewakili sumber tepercaya untuk aplikasi dan bergantung pada tempat Anda mencoba menjangkau aplikasi. Kita menempatkan "https://localhost:8081" sebagai URI yang diotorisasi dan "https://localhost:8081/login/google" sebagai URI pengalihan. Nilai tersebut akan berfungsi jika Anda memasukkan "https://localhost:8081" di browser sebagai URI untuk koneksi. Misalnya, saat Anda terhubung melalui tunnel SSH dari komputer. Saya akan menunjukkan cara melakukannya nanti.
Setelah menekan tombol "Create", Anda akan mendapatkan jendela pop-up dengan kredensial klien Anda. Dan kredensial akan dicatat dalam sistem. Anda selalu dapat menyalin client ID untuk digunakan saat memulai aplikasi.
Nanti Anda akan melihat tempat Anda memberikan client ID tersebut.
Jalankan Aplikasi Asisten
Sebelum memulai aplikasi, kita perlu menyiapkan beberapa variabel lingkungan. Fungsi dasar aplikasi seperti kueri penerbangan dan fasilitas bandara hanya memerlukan BASE_URL yang mengarahkan aplikasi ke layanan pengambilan. Kita bisa mendapatkannya menggunakan perintah gcloud .
Dalam sesi SSH VM, jalankan:
export BASE_URL=$(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
Output yang diharapkan (disamarkan):
student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export BASE_URL=$(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
Untuk menggunakan kemampuan aplikasi yang lebih canggih seperti memesan dan mengubah penerbangan, kita harus login ke aplikasi menggunakan Akun Google kita dan untuk tujuan tersebut, kita harus memberikan variabel lingkungan CLIENT_ID menggunakan client ID OAuth dari bab Menyiapkan Client ID:
export CLIENT_ID=215....apps.googleusercontent.com
Output yang diharapkan (disamarkan):
student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export CLIENT_ID=215....apps.googleusercontent.com
Sekarang kita dapat menjalankan aplikasi:
python run_app.py
Output yang diharapkan:
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)
Hubungkan ke Aplikasi
Anda memiliki beberapa cara untuk terhubung ke aplikasi yang berjalan di VM. Misalnya, Anda dapat membuka port 8081 di VM menggunakan aturan firewall di VPC atau membuat load balancer dengan IP publik. Di sini kita akan menggunakan tunnel SSH ke VM yang menerjemahkan port lokal 8080 ke port VM 8081.
Menghubungkan dari Mesin Lokal
Jika ingin terhubung dari komputer lokal, kita perlu menjalankan tunnel SSH. Hal ini dapat dilakukan menggunakan gcloud compute ssh:
gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8081:localhost:8081
Output yang diharapkan:
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:~$
Sekarang kita dapat membuka browser dan menggunakan http://localhost:8081 untuk terhubung ke aplikasi. Kita akan melihat layar aplikasi.
Menghubungkan dari Cloud Shell
Atau, kita dapat menggunakan Google Cloud Shell untuk terhubung. Buka tab Cloud Shell lain menggunakan tanda "+" di bagian atas.
Di tab baru, dapatkan URI origin dan pengalihan untuk klien web Anda yang menjalankan perintah gcloud:
echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"
Berikut output yang diharapkan:
student@cloudshell:~ echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google" origin: https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev redirect: https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev/login/google
Dan gunakan origin dan pengalihan URI sebagai "Asal JavaScript resmi" dan "URI pengalihan resmi" untuk kredensial yang dibuat di bab "Menyiapkan Client ID" yang menggantikan atau menambahkan nilai http://localhost:8080 yang diberikan sebelumnya.
Klik "Cymbal Air" di halaman client ID OAuth 2.0.
Masukkan origin dan URI pengalihan untuk Cloud Shell, lalu tekan tombol Simpan.
Di tab Cloud Shell yang baru, mulai tunnel ke VM dengan menjalankan perintah gcloud:
gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
Tindakan ini akan menampilkan pesan error "Cannot assign requested address" - harap abaikan.
Berikut output yang diharapkan:
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:~$
Tindakan ini akan membuka port 8080 pada Cloud Shell yang dapat digunakan untuk "Pratinjau web".
Klik tombol "Web preview" di bagian kanan atas Cloud Shell Anda. Dari menu drop-down, pilih "Preview on port 8080"
Alat ini akan membuka tab baru di browser web Anda dengan antarmuka aplikasi. Anda akan dapat melihat halaman "Cymbal Air Customer Service Assistant".
Login ke Aplikasi
Setelah semuanya disiapkan dan aplikasi Anda terbuka, kita dapat menggunakan tombol "Login" di kanan atas layar aplikasi untuk memberikan kredensial. Langkah ini bersifat opsional dan hanya diperlukan jika Anda ingin mencoba fungsi pemesanan aplikasi.
Tindakan ini akan membuka jendela pop-up tempat kita dapat memilih kredensial.
Setelah login, aplikasi akan siap dan Anda dapat mulai memposting permintaan ke kolom di bagian bawah jendela.
Demo ini menampilkan asisten layanan pelanggan Cymbal Air. Cymbal Air adalah maskapai penumpang fiktif. Asisten ini adalah chatbot AI yang membantu wisatawan mengelola penerbangan dan mencari informasi tentang hub Cymbal Air di Bandar Udara Internasional San Francisco (SFO).
Tanpa login (tanpa CLIENT_ID), aplikasi ini dapat membantu menjawab pertanyaan pengguna seperti:
Kapan penerbangan berikutnya ke Denver?
Apakah ada toko mewah di sekitar gerbang C28?
Di mana saya bisa mendapatkan kopi di dekat gerbang A6?
Di mana saya bisa membeli hadiah?
Please book flight to Denver departing at 10:35am
Saat login ke aplikasi, Anda dapat mencoba kemampuan lain seperti memesan penerbangan atau memeriksa apakah kursi yang ditetapkan untuk Anda adalah kursi di dekat jendela atau lorong.
Aplikasi ini menggunakan model dasar Google terbaru untuk menghasilkan respons dan melengkapinya dengan informasi tentang penerbangan dan fasilitas dari database AlloyDB operasional. Anda dapat membaca selengkapnya tentang aplikasi demo ini di halaman GitHub project.
9. Membersihkan lingkungan
Setelah semua tugas selesai, kita dapat membersihkan lingkungan
Hapus Layanan Cloud Run
Di Cloud Shell, jalankan:
gcloud run services delete retrieval-service --region us-central1
Output konsol yang diharapkan:
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].
Hapus Akun Layanan untuk layanan Cloud Run
Di Cloud Shell, jalankan:
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet
Output konsol yang diharapkan:
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)$
Hancurkan instance dan cluster AlloyDB setelah Anda selesai mengerjakan lab
Hapus cluster AlloyDB dan semua instance
Cluster tersebut dihancurkan dengan opsi paksa yang juga akan menghapus semua instance milik cluster tersebut.
Di Cloud Shell, tentukan variabel project dan lingkungan jika koneksi Anda terputus dan semua setelan sebelumnya hilang:
gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)
Hapus cluster:
gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force All of the cluster data will be lost when the cluster is deleted. Do you want to continue (Y/n)? Y Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f Deleting cluster...done.
Hapus Cadangan AlloyDB
Hapus semua cadangan AlloyDB untuk cluster:
for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f Deleting backup...done.
Sekarang kita bisa menghancurkan VM
Hapus VM GCE
Di Cloud Shell, jalankan:
export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1 export ZONE=us-central1-a gcloud compute instances delete $GCEVM \ --zone=$ZONE \ --quiet Deleted
Hapus Akun Layanan untuk VM GCE dan layanan Pengambilan
Di Cloud Shell, jalankan:
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet
Output konsol yang diharapkan:
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. Selamat
Selamat, Anda telah menyelesaikan codelab.
Yang telah kita bahas
- Cara men-deploy Cluster AlloyDB
- Cara terhubung ke AlloyDB
- Cara mengonfigurasi dan men-deploy Layanan Pengambilan Database GenAI
- Cara men-deploy aplikasi contoh menggunakan layanan yang di-deploy
11. Survei
Output: