1. Giới thiệu
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách triển khai Dịch vụ truy xuất cơ sở dữ liệu GenAI và tạo một ứng dụng tương tác mẫu bằng môi trường đã triển khai.
Bạn có thể xem thêm thông tin về Dịch vụ truy xuất GenAI và ứng dụng mẫu tại đây.
Điều kiện tiên quyết
- Có kiến thức cơ bản về Google Cloud Console
- Kỹ năng cơ bản về giao diện dòng lệnh và Google Cloud Shell
Kiến thức bạn sẽ học được
- Cách triển khai cụm AlloyDB
- Cách kết nối với AlloyDB
- Cách định cấu hình và triển khai Dịch vụ truy xuất cơ sở dữ liệu AI tạo sinh
- Cách triển khai ứng dụng mẫu bằng dịch vụ đã triển khai
Bạn cần có
- Tài khoản Google Cloud và Dự án Google Cloud
- Một trình duyệt web như Chrome
2. Cách thiết lập và các yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị cho người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn luôn có thể cập nhật thông tin này.
- Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là
PROJECT_ID
). Nếu không thích mã được tạo, bạn có thể tạo một mã ngẫu nhiên khác. Ngoài ra, bạn có thể thử dùng email của riêng mình để xem có thể sử dụng hay không. Bạn không thể thay đổi thông tin này sau bước này và thông tin này sẽ được giữ nguyên trong suốt thời gian diễn ra dự án. - Xin lưu ý rằng có một giá trị thứ ba là Mã dự án mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
- Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc tham gia lớp học lập trình này sẽ không tốn kém nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí sau khi hoàn tất hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Mặc dù bạn có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.
Trong Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ trên cùng bên phải:
Quá trình cấp phép và kết nối với môi trường chỉ mất vài phút. Khi quá trình này hoàn tất, bạn sẽ thấy như sau:
Máy ảo này được tải sẵn tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện tất cả công việc trong lớp học lập trình này trong một trình duyệt. Bạn không cần cài đặt gì cả.
3. Trước khi bắt đầu
Bật API
Kết quả:
Trong Cloud Shell, hãy đảm bảo bạn đã thiết lập mã dự án:
Thông thường, mã dự án sẽ xuất hiện trong dấu ngoặc đơn trong lời nhắc lệnh trong màn hình shell trên đám mây như trong hình:
gcloud config set project [YOUR-PROJECT-ID]
Sau đó, hãy đặt biến môi trường PROJECT_ID thành mã dự án Google Cloud:
PROJECT_ID=$(gcloud config get-value project)
Bật tất cả dịch vụ cần thiết:
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
Kết quả dự kiến
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. Triển khai cụm AlloyDB
Trước khi tạo cụm AlloyDB, chúng ta cần một dải IP riêng tư có sẵn trong VPC để phiên bản AlloyDB trong tương lai sử dụng. Nếu chưa có, chúng ta cần tạo và chỉ định cho các dịch vụ nội bộ của Google sử dụng. Sau đó, chúng ta có thể tạo cụm và thực thể.
Tạo dải IP riêng tư
Chúng ta cần định cấu hình Quyền truy cập vào dịch vụ riêng tư trong VPC cho AlloyDB. Giả định ở đây là chúng ta có mạng VPC "mặc định" trong dự án và mạng này sẽ được dùng cho mọi thao tác.
Tạo dải IP riêng tư:
gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
Tạo kết nối riêng tư bằng dải IP được phân bổ:
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
Kết quả dự kiến trên bảng điều khiển:
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)$
Tạo cụm AlloyDB
Tạo cụm AlloyDB trong khu vực us-central1.
Xác định mật khẩu cho người dùng postgres. Bạn có thể xác định mật khẩu của riêng mình hoặc sử dụng một hàm ngẫu nhiên để tạo mật khẩu
export PGPASSWORD=`openssl rand -hex 12`
Kết quả đầu ra dự kiến trên bảng điều khiển:
student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`
Ghi lại mật khẩu PostgreSQL để sử dụng sau này:
echo $PGPASSWORD
Kết quả đầu ra dự kiến trên bảng điều khiển:
student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD bbefbfde7601985b0dee5723
Xác định khu vực và tên cụm AlloyDB. Chúng ta sẽ dùng khu vực us-central1 và alloydb-aip-01 làm tên cụm:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
Chạy lệnh để tạo cụm:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
Kết quả đầu ra dự kiến trên bảng điều khiển:
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.
Tạo phiên bản chính AlloyDB
Tạo một thực thể chính AlloyDB cho cụm của chúng ta trong cùng một phiên shell trên đám mây. Nếu bị ngắt kết nối, bạn sẽ cần xác định lại biến môi trường tên cụm và khu vực.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--cluster=$ADBCLUSTER
Kết quả đầu ra dự kiến trên bảng điều khiển:
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. Chuẩn bị máy ảo GCE
Tạo tài khoản dịch vụ
Vì chúng ta sẽ sử dụng máy ảo để triển khai dịch vụ Truy xuất cơ sở dữ liệu GenAI và lưu trữ một ứng dụng mẫu, nên bước đầu tiên là tạo Tài khoản dịch vụ của Google (GSA). GSA sẽ được máy ảo GCE sử dụng và chúng ta cần cấp cho GSA các đặc quyền cần thiết để hoạt động với các dịch vụ khác.
Trong Cloud Shell, hãy thực thi:
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"
Triển khai máy ảo GCE
Tạo một máy ảo GCE trong cùng một vùng và VPC với cụm AlloyDB.
Trong Cloud Shell, hãy thực thi:
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
Kết quả đầu ra dự kiến trên bảng điều khiển:
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
Cài đặt ứng dụng Postgres
Cài đặt phần mềm ứng dụng PostgreSQL trên máy ảo đã triển khai
Kết nối với máy ảo:
gcloud compute ssh instance-1 --zone=us-central1-a
Kết quả đầu ra dự kiến trên bảng điều khiển:
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:~$
Cài đặt lệnh chạy phần mềm bên trong máy ảo:
sudo apt-get update
sudo apt-get install --yes postgresql-client
Kết quả dự kiến trên bảng điều khiển:
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) ...
Kết nối với thực thể
Kết nối với thực thể chính từ máy ảo bằng psql.
Tiếp tục phiên SSH đã mở đến máy ảo của bạn. Nếu bạn đã bị ngắt kết nối, hãy kết nối lại bằng lệnh tương tự như trên.
Sử dụng $PGASSWORD và tên cụm đã ghi chú trước đó để kết nối với AlloyDB từ máy ảo 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"
Kết quả đầu ra dự kiến trên bảng điều khiển:
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=>
Thoát khỏi phiên psql và tiếp tục thiết lập kết nối SSH:
exit
Kết quả đầu ra dự kiến trên bảng điều khiển:
postgres=> exit student@instance-1:~$
6. Khởi chạy cơ sở dữ liệu
Chúng ta sẽ sử dụng máy ảo ứng dụng làm nền tảng để điền dữ liệu vào cơ sở dữ liệu và lưu trữ ứng dụng. Bước đầu tiên là tạo cơ sở dữ liệu và điền dữ liệu vào cơ sở dữ liệu đó.
Tạo cơ sở dữ liệu
Tạo cơ sở dữ liệu có tên "assistantdemo".
Trong phiên máy ảo GCE, hãy thực thi:
psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"
Kết quả đầu ra dự kiến trên bảng điều khiển:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo" CREATE DATABASE student@instance-1:~$
Bật tiện ích pgVector.
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector"
Kết quả đầu ra dự kiến trên bảng điều khiển:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector" CREATE EXTENSION student@instance-1:~$
Chuẩn bị môi trường Python
Để tiếp tục, chúng ta sẽ sử dụng các tập lệnh Python đã chuẩn bị từ kho lưu trữ GitHub nhưng trước khi làm việc đó, chúng ta cần cài đặt phần mềm cần thiết.
Trong máy ảo GCE, hãy thực thi:
sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
Kết quả đầu ra dự kiến trên bảng điều khiển:
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:~$
Xác minh phiên bản Python.
Trong máy ảo GCE, hãy thực thi:
python -V
Kết quả dự kiến trên bảng điều khiển:
(.venv) student@instance-1:~$ python -V Python 3.11.2 (.venv) student@instance-1:~$
Điền cơ sở dữ liệu
Sao chép kho lưu trữ GitHub bằng mã cho dịch vụ truy xuất và ứng dụng mẫu.
Trong máy ảo GCE, hãy thực thi:
git clone https://github.com/GoogleCloudPlatform/genai-databases-retrieval-app.git
Kết quả đầu ra dự kiến trên bảng điều khiển:
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.
Chuẩn bị tệp cấu hình
Trong máy ảo GCE, hãy thực thi:
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
Kết quả đầu ra dự kiến trên bảng điều khiển:
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..."
Điền cơ sở dữ liệu bằng tập dữ liệu mẫu. Lệnh đầu tiên là thêm tất cả các gói bắt buộc vào môi trường ảo Python và lệnh thứ hai là điền dữ liệu vào cơ sở dữ liệu.
Trong máy ảo GCE, hãy thực thi:
pip install -r requirements.txt
python run_database_init.py
Kết quả đầu ra dự kiến trên bảng điều khiển(đã loại bỏ):
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. Triển khai Dịch vụ truy xuất cho Cloud Run
Bây giờ, chúng ta có thể triển khai dịch vụ truy xuất cho Cloud Run. Dịch vụ này chịu trách nhiệm xử lý cơ sở dữ liệu và trích xuất thông tin cần thiết từ cơ sở dữ liệu dựa trên yêu cầu của một ứng dụng AI.
Tạo tài khoản dịch vụ
Tạo một tài khoản dịch vụ cho dịch vụ truy xuất và cấp các đặc quyền cần thiết.
Mở một thẻ Cloud Shell khác bằng dấu "+" ở trên cùng.
Trong thẻ Cloud shell mới, hãy thực thi:
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"
Kết quả đầu ra dự kiến trên bảng điều khiển:
student@cloudshell:~ (gleb-test-short-003)$ gcloud iam service-accounts create retrieval-identity Created service account [retrieval-identity].
Đóng thẻ bằng lệnh thực thi "exit" trong thẻ:
exit
Triển khai Dịch vụ truy xuất
Tiếp tục trong thẻ đầu tiên mà bạn đã kết nối với máy ảo thông qua SSH bằng cách triển khai dịch vụ.
Trong phiên SSH của máy ảo, hãy thực thi:
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
Kết quả đầu ra dự kiến trên bảng điều khiển:
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$
Xác minh dịch vụ
Bây giờ, chúng ta có thể kiểm tra xem dịch vụ có chạy chính xác và máy ảo có quyền truy cập vào điểm cuối hay không. Chúng ta sử dụng tiện ích gcloud để lấy điểm cuối của dịch vụ truy xuất. Ngoài ra, bạn có thể kiểm tra trong bảng điều khiển đám mây và thay thế trong lệnh curl "$(gcloud run services list –filter="(retrieval-service)" bằng giá trị từ đó.
Trong phiên SSH của máy ảo, hãy thực thi:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
Kết quả đầu ra dự kiến trên bảng điều khiển:
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$
Nếu chúng ta thấy thông báo "Hello World" (Xin chào thế giới), tức là dịch vụ của chúng ta đang hoạt động và phân phát các yêu cầu.
8. Triển khai ứng dụng mẫu
Bây giờ, khi dịch vụ truy xuất đã khởi động và chạy, chúng ta có thể triển khai một ứng dụng mẫu sẽ sử dụng dịch vụ này. Bạn có thể triển khai ứng dụng trên máy ảo hoặc bất kỳ dịch vụ nào khác như Cloud Run, Kubernetes hoặc thậm chí là trên máy tính xách tay. Ở đây, chúng ta sẽ hướng dẫn cách triển khai ứng dụng trên máy ảo.
Chuẩn bị môi trường
Chúng ta tiếp tục làm việc trên máy ảo bằng chính phiên SSH đó. Để chạy ứng dụng, chúng ta cần thêm một số mô-đun Python. Lệnh này sẽ được thực thi từ thư mục ứng dụng trong cùng một môi trường ảo Python.
Trong phiên SSH của máy ảo, hãy thực thi:
cd ~/genai-databases-retrieval-app/llm_demo
pip install -r requirements.txt
Kết quả đầu ra dự kiến (đã loại bỏ):
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) ...
Chuẩn bị mã ứng dụng khách
Để sử dụng chức năng đặt phòng của ứng dụng, chúng ta cần chuẩn bị mã ứng dụng khách OAuth 2.0 bằng Cloud Console. Đó là khi chúng ta đăng nhập vào ứng dụng vì tính năng đặt phòng đang sử dụng thông tin xác thực của khách hàng để ghi lại dữ liệu đặt phòng trong cơ sở dữ liệu.
Trong Cloud Console, hãy chuyển đến API và Dịch vụ, nhấp vào "Màn hình xin phép OAuth" rồi chọn người dùng "Nội bộ".
Sau đó, nhấn vào "Tạo" rồi làm theo hướng dẫn trên màn hình tiếp theo.
Bạn cần điền vào các trường bắt buộc như "Tên ứng dụng" và "Email hỗ trợ người dùng". Ngoài ra, bạn có thể thêm một miền mà bạn muốn hiển thị trên màn hình yêu cầu đồng ý và cuối cùng là "Thông tin liên hệ của nhà phát triển"
Sau đó, bạn nhấn vào nút "Lưu và tiếp tục" ở cuối trang để chuyển đến trang tiếp theo.
Bạn không cần thay đổi gì ở đó trừ phi muốn chỉ định phạm vi. Cuối cùng, bạn xác nhận bằng cách nhấn lại nút "Lưu và tiếp tục". Thao tác này sẽ thiết lập màn hình xin phép trong ứng dụng.
Bước tiếp theo là tạo mã ứng dụng. Trên bảng điều khiển bên trái, hãy nhấp vào "Thông tin xác thực" để chuyển đến thông tin xác thực cho OAuth2.
Tại đây, bạn nhấp vào "Tạo thông tin xác thực" ở trên cùng rồi chọn "Mã ứng dụng khách OAuth". Sau đó, một màn hình khác sẽ mở ra.
Chọn "Ứng dụng web" trong danh sách thả xuống cho loại ứng dụng và đặt URI ứng dụng (và cổng – không bắt buộc) làm "Nguồn gốc JavaScript được uỷ quyền". Ngoài ra, bạn cần thêm vào "URI chuyển hướng được uỷ quyền" máy chủ lưu trữ ứng dụng của mình bằng "/login/google" ở cuối để có thể sử dụng màn hình bật lên uỷ quyền. Trong hình ở trên, bạn có thể thấy rằng tôi đã sử dụng http://localhost làm URI ứng dụng cơ sở của mình.
Sau khi nhấn nút "Tạo", bạn sẽ thấy một cửa sổ bật lên chứa thông tin xác thực của khách hàng.
Sau này, chúng ta sẽ cần Mã ứng dụng khách (và Mật khẩu ứng dụng khách (không bắt buộc)) để dùng với ứng dụng
Chạy ứng dụng Trợ lý
Trước khi bắt đầu ứng dụng, chúng ta cần thiết lập một số biến môi trường. Chức năng cơ bản của ứng dụng như truy vấn chuyến bay và tiện nghi sân bay chỉ yêu cầu BASE_URL trỏ ứng dụng đến dịch vụ truy xuất. Chúng ta có thể lấy thông tin này bằng lệnh gcloud .
Trong phiên SSH của máy ảo, hãy thực thi:
export BASE_URL=$(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
Kết quả đầu ra dự kiến (đã loại bỏ):
student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export BASE_URL=$(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")
Để sử dụng các tính năng nâng cao hơn của ứng dụng như đặt vé và thay đổi chuyến bay, chúng ta cần đăng nhập vào ứng dụng này bằng Tài khoản Google. Để làm được điều đó, chúng ta cần cung cấp biến môi trường CLIENT_ID bằng Mã ứng dụng khách OAuth trong chương Chuẩn bị mã ứng dụng khách:
export CLIENT_ID=215....apps.googleusercontent.com
Kết quả dự kiến (đã loại bỏ):
student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export CLIENT_ID=215....apps.googleusercontent.com
Và giờ chúng ta có thể chạy ứng dụng của mình:
python run_app.py
Kết quả đầu ra dự kiến:
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)
Kết nối với Ứng dụng
Bạn có một số cách để kết nối với ứng dụng đang chạy trên máy ảo. Ví dụ: bạn có thể mở cổng 8081 trên máy ảo bằng cách sử dụng các quy tắc tường lửa trong VPC hoặc tạo bộ cân bằng tải có IP công khai. Ở đây, chúng ta sẽ sử dụng một đường hầm SSH đến máy ảo, dịch cổng cục bộ 8080 thành cổng máy ảo 8081.
Đang kết nối từ máy cục bộ
Khi muốn kết nối từ máy cục bộ, chúng ta cần chạy một đường hầm SSH. Bạn có thể thực hiện việc này bằng cách sử dụng gcloud compute ssh:
gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8081:localhost:8081
Kết quả đầu ra dự kiến:
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:~$
Bây giờ, chúng ta có thể mở trình duyệt và sử dụng http://localhost:8081 để kết nối với ứng dụng của chúng ta. Chúng ta sẽ thấy màn hình ứng dụng.
Kết nối từ Cloud Shell
Ngoài ra, chúng ta có thể sử dụng màn hình shell trên đám mây để kết nối. Mở một thẻ Cloud Shell khác bằng dấu "+" ở trên cùng.
Trong màn hình shell trên đám mây mới, hãy lấy URI gốc và chuyển hướng cho ứng dụng web của bạn bằng cách thực thi lệnh gcloud:
echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"
Sau đây là kết quả dự kiến:
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
Đồng thời, bạn có thể dùng nguồn gốc và lệnh chuyển hướng URI dưới dạng "Nguồn gốc JavaScript được cho phép" và "URI chuyển hướng được phép" cho thông tin xác thực được tạo trong chương "Chuẩn bị mã ứng dụng khách" để thay thế hoặc thêm vào các giá trị http://localhost:8080 được cung cấp ban đầu.
Trong thẻ shell đám mây mới, hãy bắt đầu đường hầm đến máy ảo bằng cách thực thi lệnh gcloud:
gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
Bạn sẽ thấy lỗi "Không thể chỉ định địa chỉ được yêu cầu" – vui lòng bỏ qua lỗi này.
Sau đây là kết quả dự kiến:
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:~$
Thao tác này sẽ mở cổng 8080 trên màn hình shell trên đám mây. Bạn có thể dùng cổng này cho tính năng "Xem trước trên web".
Nhấp vào nút "Xem trước trên web" ở trên cùng bên phải của Cloud Shell, rồi chọn "Xem trước trên cổng 8080" trong trình đơn thả xuống
Thao tác này sẽ mở một thẻ mới trong trình duyệt web có giao diện ứng dụng. Bạn sẽ thấy được trang "Trợ lý dịch vụ khách hàng của Cymbal Air".
Đăng nhập vào Ứng dụng
Khi mọi thứ được thiết lập và đơn đăng ký của bạn đang mở, chúng tôi có thể sử dụng nút "Đăng nhập" ở trên cùng bên phải của màn hình đăng ký để cung cấp thông tin đăng nhập của chúng tôi. Bạn không bắt buộc phải làm việc này và chỉ cần làm nếu muốn thử chức năng đặt phòng của ứng dụng.
Thao tác này sẽ mở ra một cửa sổ bật lên để chúng ta có thể chọn thông tin xác thực.
Sau khi đăng nhập, ứng dụng đã sẵn sàng và bạn có thể bắt đầu đăng yêu cầu của mình vào trường ở cuối cửa sổ.
Bản minh hoạ này giới thiệu trợ lý dịch vụ khách hàng của Cymbal Air. Cymbal Air là một hãng hàng không chở khách hư cấu. Trợ lý này là một chatbot dựa trên AI giúp khách du lịch quản lý chuyến bay và tra cứu thông tin về trung tâm của Cymbal Air tại Sân bay quốc tế San Francisco (SFO).
Nếu không đăng nhập (không có CLIENT_ID), tính năng này có thể giúp trả lời các câu hỏi của người dùng như:
Chuyến bay tiếp theo đến Denver là khi nào?
Có cửa hàng xa xỉ nào xung quanh cổng C28 không?
Tôi có thể uống cà phê ở đâu gần cổng A6?
Tôi có thể mua quà tặng ở đâu?
Vui lòng đặt chuyến bay đến Denver khởi hành lúc 10:35 sáng
Khi đăng nhập vào ứng dụng, bạn có thể thử các tính năng khác như đặt vé máy bay hoặc kiểm tra xem chỗ ngồi được chỉ định cho bạn là chỗ ngồi bên cửa sổ hay chỗ ngồi ở lối đi.
Ứng dụng này sử dụng các mô hình cơ sở mới nhất của Google để tạo phản hồi và bổ sung thông tin về chuyến bay và tiện nghi từ cơ sở dữ liệu AlloyDB đang hoạt động. Bạn có thể đọc thêm về ứng dụng minh hoạ này trên trang GitHub của dự án.
9. Dọn dẹp môi trường
Bây giờ, khi tất cả tác vụ đã hoàn tất, chúng ta có thể dọn dẹp môi trường
Xoá Dịch vụ Cloud Run
Trong Cloud Shell, hãy thực thi:
gcloud run services delete retrieval-service --region us-central1
Kết quả đầu ra dự kiến trên bảng điều khiển:
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].
Xoá Tài khoản dịch vụ cho dịch vụ Cloud Run
Trong Cloud Shell, hãy thực thi:
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet
Kết quả dự kiến trên bảng điều khiển:
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)$
Huỷ bỏ các phiên bản AlloyDB và cụm khi bạn hoàn tất lớp học lập trình
Xoá cụm AlloyDB và tất cả các phiên bản
Cụm này bị huỷ bằng tuỳ chọn buộc, đồng thời xoá tất cả các thực thể thuộc cụm.
Trong màn hình shell trên đám mây, hãy xác định biến môi trường và dự án nếu bạn đã bị ngắt kết nối và tất cả các chế độ cài đặt trước đó đều bị mất:
gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)
Xoá cụm:
gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
Kết quả đầu ra dự kiến trên bảng điều khiển:
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.
Xóa các bản sao lưu AlloyDB
Xoá tất cả bản sao lưu AlloyDB cho cụm:
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
Kết quả đầu ra dự kiến trên bảng điều khiển:
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.
Bây giờ, chúng ta có thể huỷ bỏ máy ảo
Xoá máy ảo GCE
Trong Cloud Shell, hãy thực thi:
export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
--zone=$ZONE \
--quiet
Kết quả đầu ra dự kiến trên bảng điều khiển:
student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1 export ZONE=us-central1-a gcloud compute instances delete $GCEVM \ --zone=$ZONE \ --quiet Deleted
Xoá Tài khoản dịch vụ cho máy ảo GCE và dịch vụ Truy xuất
Trong Cloud Shell, hãy thực thi:
PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet
Kết quả đầu ra dự kiến trên bảng điều khiển:
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. Xin chúc mừng
Chúc mừng bạn đã hoàn thành lớp học lập trình này.
Nội dung đã đề cập
- Cách triển khai cụm AlloyDB
- Cách kết nối với AlloyDB
- Cách định cấu hình và triển khai Dịch vụ truy xuất cơ sở dữ liệu AI tạo sinh
- Cách triển khai ứng dụng mẫu bằng dịch vụ đã triển khai
11. Khảo sát
Kết quả: