Cloud SQL 데이터베이스 및 LangChain을 사용하여 LLM 및 RAG 기반 채팅 애플리케이션 빌드

1. 소개

이 Codelab에서는 생성형 AI 데이터베이스 검색 서비스를 배포하고, 배포된 환경을 사용하여 샘플 대화형 애플리케이션을 만드는 방법을 알아봅니다.

8727a44c8c402834.png

생성형 AI 검색 서비스 및 샘플 애플리케이션에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

기본 요건

  • Google Cloud 콘솔에 관한 기본적인 이해
  • 명령줄 인터페이스 및 Google Cloud Shell의 기본 기술

학습할 내용

  • Cloud SQL 인스턴스를 만드는 방법
  • 인스턴스에 연결하는 방법
  • 생성형 AI 데이터베이스 검색 서비스 구성 및 배포 방법
  • 배포된 서비스를 사용하여 샘플 애플리케이션을 배포하는 방법

필요한 항목

  • Google Cloud 계정 및 Google Cloud 프로젝트
  • 웹브라우저(예: Chrome)

2. 설정 및 요구사항

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로 PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.

55efc1aaa7a4d3ad.png

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

7ffe5cbb04455448.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.

3. 시작하기 전에

API 사용 설정

Cloud Shell 내에 프로젝트 ID가 설정되어 있는지 확인합니다.

일반적으로 프로젝트 ID는 그림과 같이 Cloud Shell의 명령 프롬프트에서 괄호 안에 표시됩니다.

fa6ee779963405d5.png

gcloud config set project [YOUR-PROJECT-ID]

그런 다음 PROJECT_ID 환경 변수를 Google Cloud 프로젝트 ID로 설정합니다.

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 및 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을 사용하여 생성형 AI 데이터베이스 검색 서비스를 배포하고 샘플 애플리케이션을 호스팅할 것이므로 첫 번째 단계는 Google 서비스 계정(GSA)을 만드는 것입니다. GSA는 GCE VM에서 사용되며 다른 서비스와 함께 작동하는 데 필요한 권한을 부여해야 합니다.

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 VM 배포

Cloud SQL 인스턴스와 동일한 리전 및 VPC에 GCE VM을 만듭니다.

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에 연결하도록 VM 승인

Cloud SQL 인스턴스의 승인된 네트워크 목록에 VM 공개 IP를 추가해야 합니다. 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

배포된 VM에 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

배포된 VM에 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을 사용하여 VM에서 기본 인스턴스에 연결합니다.

VM에 대해 열린 SSH 세션으로 계속 진행합니다. 연결이 끊어지면 위와 동일한 명령어를 사용하여 다시 연결합니다.

앞서 언급한 $CLOUDSQL_PASSWORD와 인스턴스 이름을 사용하여 GCE VM에서 Cloud SQL에 연결합니다.

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)]>

SSH 연결을 유지한 상태로 MySQL 세션을 종료합니다.

exit

예상되는 콘솔 출력:

MySQL [(none)]> exit
Bye
student@instance-1:~$ 

PostgreSQL

psql을 사용하여 VM에서 기본 인스턴스에 연결합니다.

VM에 대해 열린 SSH 세션으로 계속 진행합니다. 연결이 끊어졌다면 위와 동일한 명령어를 사용하여 다시 연결합니다.

앞서 언급한 $CLOUDSQL_PASSWORD와 인스턴스 이름을 사용하여 GCE VM에서 PostgreSQL에 연결합니다.

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

SSH 연결을 유지한 상태로 psql 세션을 종료합니다.

exit

예상되는 콘솔 출력:

postgres=> exit
student@instance-1:~$ 

6. 데이터베이스 초기화

데이터베이스에 데이터를 채우고 애플리케이션을 호스팅하는 플랫폼으로 클라이언트 VM을 사용할 것입니다. 첫 번째 단계는 데이터베이스를 만들어서 데이터로 채우는 것입니다.

데이터베이스 만들기

MySQL

이름이 'assistantdemo'인 데이터베이스를 만듭니다.

GCE VM 세션에서 다음을 실행합니다.

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 VM 세션에서 다음을 실행합니다.

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 환경 준비

계속 진행하기 위해 GitHub 저장소에서 준비된 Python 스크립트를 사용합니다. 그러나 그 전에 필수 소프트웨어를 설치해야 합니다.

GCE VM에서 다음을 실행합니다.

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 VM에서 다음을 실행합니다.

python -V

예상되는 콘솔 출력:

(.venv) student@instance-1:~$ python -V
Python 3.11.2
(.venv) student@instance-1:~$ 

구성 파일 준비

검색 서비스 및 샘플 애플리케이션용 코드와 함께 GitHub 저장소를 클론합니다.

GCE VM에서 다음을 실행합니다.

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 VM에서 다음을 실행합니다.

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 VM에서 다음을 실행합니다.

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 VM에서 다음을 실행합니다.

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 탭을 엽니다.

4ca978f5142bb6ce.png

새 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를 통해 VM에 연결된 첫 번째 탭에서 계속 진행합니다.

VM 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$

서비스 확인

이제 서비스가 올바르게 실행되고 VM이 엔드포인트에 액세스할 수 있는지 확인할 수 있습니다. gcloud 유틸리티를 사용하여 검색 서비스 엔드포인트를 가져옵니다. 또는 Cloud 콘솔에서 확인하고 curl 명령어에서 '$(gcloud run services list –filter='retrieval-service)"를 이 값으로 대체할 수 있습니다.

VM 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. 샘플 애플리케이션 배포

검색 서비스를 준비하고 실행하면 서비스를 사용할 샘플 애플리케이션을 배포할 수 있습니다. 애플리케이션은 VM이나 Cloud Run, Kubernetes와 같은 다른 서비스에 배포하거나 노트북에 로컬로 배포할 수도 있습니다. 여기에서는 VM에 배포하는 방법을 보여드리겠습니다.

환경 준비하기

동일한 SSH 세션을 사용하여 VM에서 계속 작업합니다. 애플리케이션을 실행하려면 Python 모듈을 추가해야 합니다. 명령어는 동일한 Python 가상 환경의 애플리케이션 디렉터리에서 실행됩니다.

VM 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)
...

클라이언트 ID 준비

애플리케이션의 예약 기능을 사용하려면 Cloud 콘솔을 사용하여 OAuth 2.0 클라이언트 ID를 준비해야 합니다. 예약은 클라이언트 사용자 인증 정보를 사용하여 데이터베이스에 예약 데이터를 기록하므로 애플리케이션에 로그인할 때 생성됩니다.

Cloud 콘솔에서 API 및 서비스로 이동하여 'OAuth 동의 화면'을 클릭합니다. '내부'를 선택합니다. 있습니다.

2400e5dcdb93eab8.png

그런 다음 '만들기'를 누릅니다. 다음 화면에서 그대로 할 수 있습니다

6c34d235156e571f.png

'앱 이름'과 같은 필수 입력란을 작성해야 합니다. '사용자 지원 이메일'입니다. 동의 화면에 표시할 도메인과 마지막으로 '개발자 연락처 정보'를 추가할 수도 있습니다.

2b7cd51aff915072.png

그런 다음 '저장하고 계속하기' 버튼을 누르면 다음 페이지로 이동합니다.

d90c10c88fd347f9.png

범위를 지정하지 않는 한 아무것도 변경할 필요가 없습니다. 마지막으로 '저장하고 계속하기' 버튼을 눌러 확인합니다. 다시 시도합니다. 그러면 애플리케이션 동의 화면이 설정됩니다.

다음 단계는 클라이언트 ID를 만드는 것입니다. 왼쪽 패널에서 '사용자 인증 정보'를 클릭합니다. OAuth2의 사용자 인증 정보로 연결됩니다.

7ad97432390f224c.png

여기에서 '사용자 인증 정보 만들기'를 클릭합니다. 'OAuth ClientID'를 선택합니다. 그러면 다른 화면이 열립니다.

325a926431c8f16d.png

'웹 애플리케이션'을 선택합니다. 을 선택하고 애플리케이션 URI(및 포트(선택사항))를 '승인된 JavaScript 출처'로 지정합니다. '승인된 리디렉션 URI' 페이지에 '/login/google'로 애플리케이션 호스트 승인 팝업 화면을 사용할 수 있습니다. 위 그림에서는 기본 애플리케이션 URI로 http://localhost를 사용한 것을 볼 수 있습니다.

'만들기' 버튼을 클릭하면 클라이언트 사용자 인증 정보가 포함된 팝업 창이 나타납니다.

e91adf03ec31cd15.png

나중에 애플리케이션에서 사용할 클라이언트 ID (및 선택적으로 클라이언트 비밀번호)가 필요합니다.

어시스턴트 애플리케이션 실행

애플리케이션을 시작하기 전에 몇 가지 환경 변수를 설정해야 합니다. 항공편 검색 및 공항 편의시설 검색 같은 애플리케이션의 기본 기능에는 애플리케이션이 검색 서비스를 가리키는 BASE_URL만 있으면 됩니다. gcloud 명령어를 사용하여 가져올 수 있습니다 .

VM 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 계정을 사용하여 애플리케이션에 로그인해야 하며 이를 위해 클라이언트 ID 준비 장의 OAuth 클라이언트 ID를 사용하여 CLIENT_ID 환경 변수를 제공해야 합니다.

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)

애플리케이션에 연결

여러 가지 방법으로 VM에서 실행 중인 애플리케이션에 연결할 수 있습니다. 예를 들어 VPC의 방화벽 규칙을 사용하여 VM에서 포트 8081을 열거나 공개 IP로 부하 분산기를 만들 수 있습니다. 여기서는 SSH 터널을 VM에 사용하여 로컬 포트 8080을 VM 포트 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을 사용하여 애플리케이션에 연결할 수 있습니다. 애플리케이션 화면이 표시됩니다.

c667b9013afac3f9.png

Cloud Shell에서 연결

또는 Cloud Shell을 사용하여 연결할 수도 있습니다. 맨 위에 있는 '+' 기호를 사용하여 다른 Cloud Shell 탭을 엽니다.

4ca978f5142bb6ce.png

새 Cloud Shell 탭에서 gcloud 명령어를 실행하여 VM에 대한 터널을 시작합니다.

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:~$

Cloud Shell에서 포트 8080을 열어 '웹 미리보기'에 사용할 수 있습니다.

'웹 미리보기'를 클릭합니다. 버튼을 클릭하고 드롭다운 메뉴에서 '포트 8080에서 미리보기'를 선택합니다.

444fbf54dcd4d160.png

웹브라우저에서 애플리케이션 인터페이스가 표시된 새 탭이 열립니다. 'Cymbal Air 고객 서비스 어시스턴트'가 표시되어야 합니다. 있습니다. 페이지의 주소 표시줄에 미리보기 페이지의 URI가 표시됩니다. '/?authuser=0&redirectedPreviously=true' 부분을 삭제해야 합니다. 끝부분에

389f0ae2945beed5.png

그리고 URI의 첫 번째 부분(예: 'https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/')을 사용합니다. 브라우저 창에 남아 있으며 '승인된 JavaScript 출처' 및 '승인된 리디렉션 URI'를 참조하세요. '클라이언트 ID 준비' 챕터가 원래 제공된 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'입니다.

2c37eeda0a7e2f80.png

신청서에 로그인

모든 설정이 완료되고 애플리케이션이 열리면 '로그인' 버튼을 클릭하여 사용자 인증 정보를 제공합니다. 이는 선택사항이며 애플리케이션의 예약 기능을 사용해 보려는 경우에만 필수입니다.

a1f571371b957129.png

사용자 인증 정보를 선택할 수 있는 팝업 창이 열립니다.

애플리케이션에 로그인할 준비가 되면 창 하단의 필드에 요청을 게시할 수 있습니다.

이 데모는 Cymbal Air 고객 서비스 어시스턴트를 보여줍니다. Cymbal Air는 가상의 여객 항공사입니다. 이 어시스턴트는 여행자가 항공편을 관리하고 샌프란시스코 국제공항(SFO)에 있는 Cymbal Air 허브에 관한 정보를 찾아보도록 도와주는 AI 챗봇입니다.

CLIENT_ID 없이 로그인하지 않아도 다음과 같은 사용자 질문에 답할 수 있습니다.

덴버로 가는 다음 항공편은 언제인가요?

C28 게이트 주변에 명품 매장이 있나요?

A6 게이트 근처에서 커피를 살 수 있는 곳은 어디인가요?

선물은 어디에서 구매할 수 있나요?

오전 10시 35분에 출발하는 덴버행 항공편을 예약하세요

애플리케이션에 로그인하면 항공편을 예약하거나 나에게 할당된 좌석이 창가 또는 통로 좌석인지 확인하는 등 다른 기능을 사용해 볼 수 있습니다.

6e7758f707c67c3e.png

이 애플리케이션은 최신 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 인스턴스를 삭제합니다.

실습을 마치면 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].

이제 VM을 폐기할 수 있습니다.

GCE VM 삭제

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 VM 및 검색 서비스의 서비스 계정 삭제

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 데이터베이스 검색 서비스 구성 및 배포 방법
  • 배포된 서비스를 사용하여 샘플 애플리케이션을 배포하는 방법

11. 설문조사

본 가이드를 어떻게 사용하실 계획인가요?

읽기만 할 계획입니다. 읽은 다음 연습 활동을 완료할 계획입니다.