온프레미스 호스트는 벡터 검색 색인 엔드포인트에 공개 인터넷을 통해 도달하거나 Cloud VPN 또는 Cloud Interconnect를 이용해 Private Service Connect를 사용하는 하이브리드 네트워킹 아키텍처를 통해 비공개로 도달할 수 있습니다. 두 옵션 모두 SSL/TLS 암호화를 제공합니다. 그러나 비공개 옵션이 훨씬 더 우수한 성능을 제공하므로 중요한 애플리케이션에는 비공개 옵션이 권장됩니다.
이 튜토리얼에서는 고가용성 VPN(HA VPN)을 사용하여 멀티 클라우드 및 온프레미스 비공개 연결의 기반이 되는 두 Virtual Private Cloud(VPC) 네트워크 사이에서 비공개로 벡터 검색 색인 엔드포인트에 액세스할 수 있습니다.
이 튜토리얼은 Vertex AI, 가상 프라이빗 클라우드, Google Cloud 콘솔, Cloud Shell에 익숙한 엔터프라이즈 네트워크 관리자, 데이터 과학자, 연구원을 대상으로 합니다. 벡터 검색에 익숙하면 도움이 되지만 필수 사항은 아닙니다.
목표
- 앞선 다이어그램과 같이 VPC 네트워크 2개를 만듭니다.
- 하나(
onprem-vpc
)는 온프레미스 네트워크를 나타냅니다. - 다른 하나(
vertex-networking-vpc
)는 벡터 검색 색인 엔드포인트를 위한 것입니다.
- 하나(
vertex-networking-vpc
및onprem-vpc
를 연결하기 위해 HA VPN 게이트웨이, Cloud VPN 터널, Cloud Router를 배포합니다.- 벡터 검색 색인을 빌드하고 배포합니다.
- Private Service Connect 전달 규칙을 만들어 쿼리를 벡터 검색 색인 엔드포인트에 전달합니다.
vertex-networking-vpc
에서 색인 엔드포인트에 대한 경로를onprem-vpc
에 공지하기 위해 Cloud Router 커스텀 공지 경로를 구성합니다.- HA VPN을 통해 벡터 검색 색인에 요청을 전송하는 클라이언트 애플리케이션을 나타내는 Compute Engine VM 인스턴스를
onprem-vpc
에 만듭니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
- Cloud Shell을 열고 이 튜토리얼에 나열된 명령어를 실행합니다. Cloud Shell은 웹브라우저에서 프로젝트와 리소스를 관리할 수 있는 Google Cloud의 대화형 셸 환경입니다.
- Cloud Shell에서 현재 프로젝트를 Google Cloud 프로젝트 ID로 설정한 후 동일한 프로젝트 ID를
projectid
셸 변수에 저장합니다. PROJECT_ID를 프로젝트 ID로 바꿉니다. 필요한 경우 Google Cloud 콘솔에서 프로젝트 ID를 찾을 수 있습니다. 자세한 내용은 프로젝트 ID 찾기를 참조하세요.projectid="PROJECT_ID" gcloud config set project ${projectid}
- 프로젝트 소유자가 아니라면 프로젝트 소유자에게 프로젝트 IAM 관리자(roles/resourcemanager.projectIamAdmin) 역할을 부여해 달라고 요청합니다. 다음 단계에서 IAM 역할을 부여하려면 이 역할이 있어야 합니다.
-
Google 계정에 역할을 부여합니다. 다음 각 IAM 역할에 대해 다음 명령어를 한 번씩 실행합니다.
roles/aiplatform.user, roles/compute.instanceAdmin.v1, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/dns.admin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/iap.admin, roles/iap.tunnelResourceAccessor, roles/notebooks.admin, roles/servicemanagement.quotaAdmin, roles/servicedirectory.editor, roles/storage.admin, roles/aiplatform.admin, roles/aiplatform.user, roles/resourcemanager.projectIamAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
PROJECT_ID
를 프로젝트 ID로 바꿉니다.EMAIL_ADDRESS
를 이메일 주소로 바꿉니다.ROLE
을 각 개별 역할로 바꿉니다.
-
Enable the DNS, IAM, Compute Engine, Notebooks, and Vertex AI APIs:
gcloud services enable dns.googleapis.com
iam.googleapis.com compute.googleapis.com notebooks.googleapis.com aiplatform.googleapis.com
VPC 네트워크 만들기
이 섹션에서는 벡터 검색 색인을 만들고 이를 엔드포인트에 배포하기 위한 VPC 네트워크 1개와 해당 엔드포인트에 대한 비공개 액세스를 위한 VPC 네트워크 1개를 만듭니다.
벡터 검색 색인 엔드포인트의 VPC 네트워크 만들기(vertex-networking-vpc
)
색인 엔드포인트의 VPC 네트워크를 만듭니다.
gcloud compute networks create vertex-networking-vpc --project=$projectid --subnet-mode custom
기본 IPv4 범위가
172.16.20.0/28
인workbench-subnet
라는 서브넷을 만듭니다.gcloud compute networks subnets create workbench-subnet \ --project=$projectid --range=172.16.20.0/28 \ --network=vertex-networking-vpc \ --region=us-central1 \ --enable-private-ip-google-access
기본 IPv4 범위가
172.16.30.0/28
인psc-forwarding-rule-subnet
이라는 서브넷을 만듭니다.gcloud compute networks subnets create psc-forwarding-rule-subnet \ --project=$projectid \ --range=172.16.30.0/28 \ --network=vertex-networking-vpc \ --region=us-central1 \ --enable-private-ip-google-access
엔드포인트에 대한 비공개 액세스를 위한 VPC 네트워크 만들기(onprem-vpc
)
온프레미스 네트워크(
onprem-vpc
)를 시뮬레이션하도록 VPC 네트워크를 만듭니다.gcloud compute networks create onprem-vpc \ --subnet-mode custom
onprem-vpc
네트워크에서 기본 IPv4 범위가172.16.10.0/29
인onprem-vpc-subnet1
이라는 서브넷을 만듭니다.gcloud compute networks subnets create onprem-vpc-subnet1 \ --network onprem-vpc \ --range 172.16.10.0/29 \ --region us-central1
VPC 네트워크가 올바르게 구성되었는지 확인
Google Cloud 콘솔의 VPC 네트워크 페이지에서 현재 프로젝트의 네트워크 탭으로 이동합니다.
VPC 네트워크 목록에서 네트워크 2개(
vertex-networking-vpc
및onprem-vpc
)가 생성되었는지 확인합니다.현재 프로젝트의 서브넷 탭을 클릭합니다.
VPC 서브넷 목록에서
workbench-subnet
,psc-forwarding-rule-subnet
,onprem-vpc-subnet1
서브넷이 생성되었는지 확인합니다.
on-prem-client
VM 인스턴스 만들기
이 섹션에서는 HA VPN을 통해 벡터 검색 색인 엔드포인트에 요청을 전송하는 클라이언트 애플리케이션을 나타내는 VM 인스턴스를 만듭니다.
Cloud Shell에서
on-prem-client
VM 인스턴스를 만듭니다.gcloud compute instances create on-prem-client \ --zone=us-central1-a \ --image-family=debian-11 \ --image-project=debian-cloud \ --subnet=onprem-vpc-subnet1 \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --no-address \ --shielded-secure-boot \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install tcpdump dnsutils -y"
하이브리드 연결 구성
이 섹션에서는 서로 연결된 HA VPN 게이트웨이 2개를 만듭니다. 하나는 vertex-networking-vpc
VPC 네트워크에 있습니다. 다른 하나는 onprem-vpc
VPC 네트워크에 있습니다.
각 게이트웨이에는 Cloud Router와 VPN 터널 쌍이 포함됩니다.
HA VPN 게이트웨이 만들기
Cloud Shell에서
vertex-networking-vpc
VPC 네트워크의 HA VPN 게이트웨이를 만듭니다.gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \ --network vertex-networking-vpc \ --region us-central1
onprem-vpc
VPC 네트워크의 HA VPN 게이트웨이를 만듭니다.gcloud compute vpn-gateways create onprem-vpn-gw1 \ --network onprem-vpc \ --region us-central1
Google Cloud 콘솔에서 VPN 페이지의 Cloud VPN 게이트웨이 탭으로 이동합니다.
2개의 게이트웨이(
vertex-networking-vpn-gw1
및onprem-vpn-gw1
)가 생성되었고 각 게이트웨이에 인터페이스 IP 주소 2개가 있는지 확인합니다.
Cloud Router 및 Cloud NAT 게이트웨이 만들기
두 VPC 네트워크 각각에 일반 Cloud Router 1개와 리전 Cloud Router 1개를 만듭니다. 각 리전 Cloud Router에서 Cloud NAT 게이트웨이를 만듭니다. Cloud NAT 게이트웨이는 외부 IP 주소가 없는 Compute Engine 가상 머신(VM) 인스턴스에 대한 발신 연결을 제공합니다.
Cloud Shell에서
vertex-networking-vpc
VPC 네트워크의 Cloud Router를 만듭니다.gcloud compute routers create vertex-networking-vpc-router1 \ --region us-central1\ --network vertex-networking-vpc \ --asn 65001
onprem-vpc
VPC 네트워크의 Cloud Router를 만듭니다.gcloud compute routers create onprem-vpc-router1 \ --region us-central1\ --network onprem-vpc\ --asn 65002
vertex-networking-vpc
VPC 네트워크의 리전 Cloud Router를 만듭니다.gcloud compute routers create cloud-router-us-central1-vertex-nat \ --network vertex-networking-vpc \ --region us-central1
리전 Cloud Router에서 Cloud NAT 게이트웨이를 구성합니다.
gcloud compute routers nats create cloud-nat-us-central1 \ --router=cloud-router-us-central1-vertex-nat \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --region us-central1
onprem-vpc
VPC 네트워크의 리전 Cloud Router를 만듭니다.gcloud compute routers create cloud-router-us-central1-onprem-nat \ --network onprem-vpc \ --region us-central1
리전 Cloud Router에서 Cloud NAT 게이트웨이를 구성합니다.
gcloud compute routers nats create cloud-nat-us-central1-on-prem \ --router=cloud-router-us-central1-onprem-nat \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --region us-central1
Google Cloud 콘솔에서 Cloud Router 페이지로 이동합니다.
Cloud Router 목록에서 다음 라우터가 생성되었는지 확인합니다.
cloud-router-us-central1-onprem-nat
cloud-router-us-central1-vertex-nat
onprem-vpc-router1
vertex-networking-vpc-router1
새 값을 보려면 Google Cloud 콘솔 브라우저 탭을 새로고침해야 할 수 있습니다.
Cloud Router 목록에서
cloud-router-us-central1-vertex-nat
를 클릭합니다.라우터 세부정보 페이지에서
cloud-nat-us-central1
Cloud NAT 게이트웨이가 생성되었는지 확인합니다.뒤로 화살표를 클릭하여 Cloud Router 페이지로 돌아갑니다.
라우터 목록에서
cloud-router-us-central1-onprem-nat
를 클릭합니다.라우터 세부정보 페이지에서
cloud-nat-us-central1-on-prem
Cloud NAT 게이트웨이가 생성되었는지 확인합니다.
VPN 터널 만들기
Cloud Shell의
vertex-networking-vpc
네트워크에서vertex-networking-vpc-tunnel0
이라는 VPN 터널을 만듭니다.gcloud compute vpn-tunnels create vertex-networking-vpc-tunnel0 \ --peer-gcp-gateway onprem-vpn-gw1 \ --region us-central1 \ --ike-version 2 \ --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \ --router vertex-networking-vpc-router1 \ --vpn-gateway vertex-networking-vpn-gw1 \ --interface 0
vertex-networking-vpc
네트워크에서vertex-networking-vpc-tunnel1
이라는 VPN 터널을 만듭니다.gcloud compute vpn-tunnels create vertex-networking-vpc-tunnel1 \ --peer-gcp-gateway onprem-vpn-gw1 \ --region us-central1 \ --ike-version 2 \ --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \ --router vertex-networking-vpc-router1 \ --vpn-gateway vertex-networking-vpn-gw1 \ --interface 1
onprem-vpc
네트워크에서onprem-vpc-tunnel0
이라는 VPN 터널을 만듭니다.gcloud compute vpn-tunnels create onprem-vpc-tunnel0 \ --peer-gcp-gateway vertex-networking-vpn-gw1 \ --region us-central1\ --ike-version 2 \ --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \ --router onprem-vpc-router1 \ --vpn-gateway onprem-vpn-gw1 \ --interface 0
onprem-vpc
네트워크에서onprem-vpc-tunnel1
이라는 VPN 터널을 만듭니다.gcloud compute vpn-tunnels create onprem-vpc-tunnel1 \ --peer-gcp-gateway vertex-networking-vpn-gw1 \ --region us-central1\ --ike-version 2 \ --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \ --router onprem-vpc-router1 \ --vpn-gateway onprem-vpn-gw1 \ --interface 1
Google Cloud 콘솔에서 VPN 페이지로 이동합니다.
VPN 터널 목록에서 VPN 터널 4개가 생성되었는지 확인합니다.
BGP 세션 설정
Cloud Router는 경계 게이트웨이 프로토콜(BGP)을 사용하여 VPC 네트워크(이 경우 vertex-networking-vpc
)와 온프레미스 네트워크(onprem-vpc
로 표시) 간에 경로를 교환합니다. Cloud Router에서 온프레미스 라우터의 인터페이스와 BGP 피어를 구성합니다.
인터페이스와 BGP 피어 구성은 함께 BGP 세션을 구성합니다.
이 섹션에서는 vertex-networking-vpc
에 대한 2개의 BGP 세션과 onprem-vpc
에 대한 2개의 BGP 세션을 만듭니다.
라우터 사이에 인터페이스와 BGP 피어를 구성하면 경로 교환이 자동으로 시작됩니다.
vertex-networking-vpc
용 BGP 세션 설정
Cloud Shell의
vertex-networking-vpc
네트워크에서vertex-networking-vpc-tunnel0
에 대한 BGP 인터페이스를 만듭니다.gcloud compute routers add-interface vertex-networking-vpc-router1 \ --interface-name if-tunnel0-to-onprem \ --ip-address 169.254.0.1 \ --mask-length 30 \ --vpn-tunnel vertex-networking-vpc-tunnel0 \ --region us-central1
vertex-networking-vpc
네트워크에서bgp-onprem-tunnel0
에 대한 BGP 피어를 만듭니다.gcloud compute routers add-bgp-peer vertex-networking-vpc-router1 \ --peer-name bgp-onprem-tunnel0 \ --interface if-tunnel0-to-onprem \ --peer-ip-address 169.254.0.2 \ --peer-asn 65002 \ --region us-central1
vertex-networking-vpc
네트워크에서vertex-networking-vpc-tunnel1
에 대한 BGP 인터페이스를 만듭니다.gcloud compute routers add-interface vertex-networking-vpc-router1 \ --interface-name if-tunnel1-to-onprem \ --ip-address 169.254.1.1 \ --mask-length 30 \ --vpn-tunnel vertex-networking-vpc-tunnel1 \ --region us-central1
vertex-networking-vpc
네트워크에서bgp-onprem-tunnel1
에 대한 BGP 피어를 만듭니다.gcloud compute routers add-bgp-peer vertex-networking-vpc-router1 \ --peer-name bgp-onprem-tunnel1 \ --interface if-tunnel1-to-onprem \ --peer-ip-address 169.254.1.2 \ --peer-asn 65002 \ --region us-central1
onprem-vpc
용 BGP 세션 설정
onprem-vpc
네트워크에서onprem-vpc-tunnel0
에 대한 BGP 인터페이스를 만듭니다.gcloud compute routers add-interface onprem-vpc-router1 \ --interface-name if-tunnel0-to-vertex-networking-vpc \ --ip-address 169.254.0.2 \ --mask-length 30 \ --vpn-tunnel onprem-vpc-tunnel0 \ --region us-central1
onprem-vpc
네트워크에서bgp-vertex-networking-vpc-tunnel0
에 대한 BGP 피어를 만듭니다.gcloud compute routers add-bgp-peer onprem-vpc-router1 \ --peer-name bgp-vertex-networking-vpc-tunnel0 \ --interface if-tunnel0-to-vertex-networking-vpc \ --peer-ip-address 169.254.0.1 \ --peer-asn 65001 \ --region us-central1
onprem-vpc
네트워크에서onprem-vpc-tunnel1
에 대한 BGP 인터페이스를 만듭니다.gcloud compute routers add-interface onprem-vpc-router1 \ --interface-name if-tunnel1-to-vertex-networking-vpc \ --ip-address 169.254.1.2 \ --mask-length 30 \ --vpn-tunnel onprem-vpc-tunnel1 \ --region us-central1
onprem-vpc
네트워크에서bgp-vertex-networking-vpc-tunnel1
에 대한 BGP 피어를 만듭니다.gcloud compute routers add-bgp-peer onprem-vpc-router1 \ --peer-name bgp-vertex-networking-vpc-tunnel1 \ --interface if-tunnel1-to-vertex-networking-vpc \ --peer-ip-address 169.254.1.1 \ --peer-asn 65001 \ --region us-central1
BGP 세션 생성 검증
Google Cloud 콘솔에서 VPN 페이지로 이동합니다.
VPN 터널 목록에서 각 터널의 BGP 세션 상태 열 값이 BGP 세션 구성에서 BGP 설정됨으로 변경되었는지 확인합니다. 새 값을 보려면 Google Cloud 콘솔 브라우저 탭을 새로고침해야 할 수 있습니다.
vertex-networking-vpc
로 학습된 경로 검증
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 목록에서
vertex-networking-vpc
를 클릭합니다.경로 탭을 클릭합니다.
리전 목록에서 us-central1(아이오와)을 선택하고 보기를 클릭합니다.
대상 IP 범위 열에서
onprem-vpc-subnet1
서브넷의 IP 범위(172.16.10.0/29
)가 두 번 표시되는지 확인합니다.
학습된 경로 on-prem-vpc
검증
뒤로 화살표를 클릭하여 VPC 네트워크 페이지로 돌아갑니다.
VPC 네트워크 목록에서
on-prem-vpc
를 클릭합니다.경로 탭을 클릭합니다.
리전 목록에서 us-central1(아이오와)을 선택하고 보기를 클릭합니다.
대상 IP 범위 열에서
workbench-subnet
서브넷의 IP 범위(172.16.20.0/28
) 및psc-forwarding-rule-subnet
서브넷의 IP 범위(172.16.30.0/28
)가 두 번 표시되는지 확인합니다.
Vertex AI Workbench 인스턴스 생성
이 섹션에서는 사용자 관리형 서비스 계정을 만든 다음 서비스 계정을 사용하여 Google Cloud 서비스 및 API에 액세스하는 Vertex AI Workbench 인스턴스를 만듭니다.
서비스 계정 만들기
이 튜토리얼에서는 Compute Engine 및 IAM 권장사항에 따라 사용자 관리 서비스 계정을 만듭니다.
Cloud Shell에서
workbench-sa
라는 이름의 서비스 계정을 만듭니다.gcloud iam service-accounts create workbench-sa \ --display-name="workbench-sa"
서비스 계정에 Vertex AI 사용자(
roles/aiplatform.user
) IAM 역할을 할당합니다.gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/aiplatform.user"
서비스 계정에 스토리지 관리자(
roles/storage.admin
) IAM 역할을 할당합니다.gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/storage.admin"
서비스 계정에 서비스 사용량 관리자(
roles/serviceusage.serviceUsageAdmin
) IAM 역할을 할당합니다.gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/serviceusage.serviceUsageAdmin"
Vertex AI Workbench 인스턴스 만들기
Vertex AI Workbench 인스턴스를 만들어 workbench-sa
서비스 계정을 지정합니다.
gcloud workbench instances create workbench-tutorial \
--vm-image-project=deeplearning-platform-release \
--vm-image-family=common-cpu-notebooks \
--machine-type=n1-standard-4 \
--location=us-central1-a \
--subnet-region=us-central1 \
--shielded-secure-boot=SHIELDED_SECURE_BOOT \
--subnet=workbench-subnet \
--disable-public-ip \
--service-account-email=workbench-sa@$projectid.iam.gserviceaccount.com
벡터 검색 색인 만들기 및 배포
개발 환경 준비
Google Cloud 콘솔의 Vertex AI Workbench 페이지에서 인스턴스 탭으로 이동합니다.
Vertex AI Workbench 인스턴스 이름(
workbench-tutorial
) 옆에 있는 JupyterLab 열기를 클릭합니다.Vertex AI Workbench 인스턴스가 JupyterLab을 엽니다.
파일 > 새로 만들기 > 노트북을 선택합니다.
커널 선택 메뉴에서 Python 3(로컬)를 선택하고 선택을 클릭합니다.
새 노트북이 열리면 코드를 입력할 수 있는 기본 코드 셀이 있습니다. 텍스트 필드 뒤에
[ ]:
가 표시되어 있습니다. 텍스트 필드에 코드를 붙여넣습니다.Vertex AI SDK for Python을 설치하려면 다음 코드를 셀에 붙여넣고
선택한 셀 실행 및 진행을 클릭합니다.!pip install --upgrade --user google-cloud-aiplatform google-cloud-storage
이 단계와 이어지는 각 단계에서 필요한 경우
아래에 셀 삽입을 클릭하여 새 코드 셀을 추가하고 셀에 코드를 붙여넣은 후 선택한 셀 실행 및 진행을 클릭합니다.이 Jupyter 런타임에서 새로 설치된 패키지를 사용하려면 런타임을 다시 시작합니다.
# Restart kernel after installs so that your environment can access the new packages import IPython app = IPython.Application.instance() app.kernel.do_shutdown(True)
PROJECT_ID를 프로젝트 ID로 대체하여 다음 환경 변수를 설정합니다.
# set project ID and location PROJECT_ID = "PROJECT_ID" LOCATION = "us-central1" # generate a unique id for this session from datetime import datetime UID = datetime.now().strftime("%m%d%H%M")
API 사용 설정
Jupyterlab 노트북에서 다음 명령어를 실행하여 노트북에 Compute Engine, Vertex AI, Cloud Storage용 API를 사용 설정합니다.
! gcloud services enable compute.googleapis.com aiplatform.googleapis.com storage.googleapis.com \
--project {PROJECT_ID}
Cloud Storage 버킷에서 샘플 데이터 준비
이 튜토리얼에서는 벡터 검색 빠른 시작에서 사용되는 TheLook 데이터 세트를 사용합니다. 이 데이터 세트에 대한 자세한 내용은 빠른 시작 문서 페이지를 참조하세요.
이 섹션에서는 Cloud Storage 버킷을 만들어 데이터 세트의 임베딩 파일을 배치합니다. 이후 단계에서 이 파일을 사용하여 색인을 빌드합니다.
Jupyterlab 노트북에서 Cloud Storage 버킷을 만듭니다.
BUCKET_URI = f"gs://{PROJECT_ID}-vs-quickstart-{UID}" ! gcloud storage buckets create $BUCKET_URI --location=$LOCATION --project=$PROJECT_ID
예시 파일을 Cloud Storage 버킷에 복사합니다.
! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
또한 벡터 검색을 사용하여 쿼리를 실행하려면 임베딩 파일을 로컬 디렉터리에 복사해야 합니다.
! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" . # for query tests
벡터 검색 색인 만들기
Jupyterlab 노트북에서 임베딩을 벡터 검색에 로드합니다.
# init the aiplatform package from google.cloud import aiplatform aiplatform.init(project=PROJECT_ID, location=LOCATION)
create_tree_ah_index
함수로 MatchingEngineIndex를 만듭니다. Matching Engine은 백터 검색의 이전 이름입니다.# create Index my_index = aiplatform.MatchingEngineIndex.create_tree_ah_index( display_name = f"vs-quickstart-index-{UID}", contents_delta_uri = BUCKET_URI, dimensions = 768, approximate_neighbors_count = 10, )
MatchingEngineIndex.create_tree_ah_index()
메서드는 색인을 빌드합니다. 이 튜토리얼에서는 이 작업에 5~10분 정도 걸립니다.Google Cloud 콘솔의 벡터 검색 페이지에서 색인 탭으로 이동합니다.
이름이
"vs-quickstart-index-"
로 시작하는 색인이 있고 올바른 타임스탬프를 포함하는지 확인합니다.색인 ID를 기록해 둡니다. 이후 단계에서 색인을 배포할 때 이 ID가 필요합니다.
색인 엔드포인트 만들기
Cloud Shell에서 다음 명령어를 실행하고 PROJECT_ID를 프로젝트 ID로 바꿉니다.
projectid=PROJECT_ID gcloud config set project ${projectid} SERVICE_PROJECT=${projectid} REGION=us-central1 VERTEX_ENDPOINT=$REGION-aiplatform.googleapis.com DISPLAY_NAME=vector-search
색인 엔드포인트 만들기
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer `gcloud auth print-access-token`" \ https://$VERTEX_ENDPOINT/v1/projects/$SERVICE_PROJECT/locations/$REGION/indexEndpoints \ -d '{displayName: "'$DISPLAY_NAME'", privateServiceConnectConfig: { enablePrivateServiceConnect: true, projectAllowlist: ["'$SERVICE_PROJECT'"] }}'
색인 엔드포인트가 생성되었는지 확인합니다.
gcloud ai index-endpoints list --region=us-central1
출력은 다음 예와 비슷합니다. 여기서 색인 엔드포인트 ID는
8151506529447575552
입니다.Using endpoint [https://us-central1-aiplatform.googleapis.com/] --- createTime: '2023-10-10T23:55:20.526145Z' displayName: vector-search encryptionSpec: {} etag: AMEw9yN2qytNiwT73uwYpz_7N_b2-O8D1AuNoDb5QjFmkU4ye5Gzk2oQlMZBR1XeoQ11 name: projects/725264228516/locations/us-central1/indexEndpoints/8151506529447575552 privateServiceConnectConfig: enablePrivateServiceConnect: true projectAllowlist: - vertex-genai-400103 - vertex-genai-400103 updateTime: '2023-10-10T23:55:21.951394Z'
색인 엔드포인트 ID를 기록해 둡니다. 이후 단계에서 색인을 배포할 때 이 ID가 필요합니다.
엔드포인트에 색인 배포
Cloud Shell에서 다음 명령어를 실행하여 색인을 엔드포인트에 배포합니다.
gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID \
--deployed-index-id=vector_one \
--display-name=vector-search \
--index=INDEX \
--project=$projectid \
--region=us-central1
다음 값을 바꿉니다.
- INDEX_ENDPOINT_ID: 사용자가 만든 Private Service Connect 색인 엔드포인트의 색인 엔드포인트 ID
- INDEX: 배포할 색인의 ID
출력은 다음 예와 비슷합니다. 여기서 색인 엔드포인트 ID는 8151506529447575552
입니다.
Using endpoint [https://us-central1-aiplatform.googleapis.com/]
The deploy index operation [projects/725264228516/locations/us-central1/indexEndpoints/8151506529447575552/operations/6271807495283408896] was submitted successfully.
배포 작업은 10~15분 정도 걸립니다. 색인을 배포할 때 서비스 연결이 생성됩니다.
색인이 색인 엔드포인트에 배포되었는지 확인
Google Cloud 콘솔의 벡터 검색 페이지에서 색인 엔드포인트 탭으로 이동합니다.
vector-search
색인 엔드포인트에vector-search
라고도 하는 배포된 색인이 있는지 확인합니다.색인 엔드포인트 이름 옆에 회전하는 파란색 원이 표시되면 색인을 아직 배포 중인 것입니다.
색인 엔드포인트의 서비스 연결 URI 가져오기
색인이 완전히 배포되면 서비스 연결 URI를 가져올 수 있습니다.
Cloud Shell에서 다음 명령어를 실행하여 서비스 연결 URI를 가져옵니다.
gcloud ai index-endpoints list --region=us-central1 | grep -i serviceAttachment:
다음 출력 예에서 서비스 연결 URI는 projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798
입니다.
Using endpoint [https://us-central1-aiplatform.googleapis.com/]
serviceAttachment: projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798
projects
로 시작하는 serviceAttachment
URI를 기록해 둡니다(예: projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798
).
다음 단계에서 전달 규칙을 만들 때 필요합니다.
전달 규칙 만들기
Cloud Shell에서 전달 규칙에서 벡터 검색 색인을 쿼리할 때 사용할 IP 주소를 예약합니다.
gcloud compute addresses create vector-search-forwarding-rule \ --region=us-central1 \ --subnet=psc-forwarding-rule-subnet
예약된 IP 주소를 찾습니다.
gcloud compute addresses list --filter="name=vector-search-forwarding-rule"
SERVICE_ATTACHMENT_URI를
serviceAttachment
URI로 대체하여 엔드포인트를 서비스 연결에 연결하는 전달 규칙을 만듭니다.gcloud compute forwarding-rules create vector-search-forwarding-rule \ --region=us-central1 \ --network=vertex-networking-vpc \ --address=vector-search-forwarding-rule \ --target-service-attachment=SERVICE_ATTACHMENT_URI
다음은 이 명령어의 사용 예시입니다.
gcloud compute forwarding-rules create vector-search-forwarding-rule \ --region=us-central1 \ --network=vertex-networking-vpc \ --address=vector-search-forwarding-rule \ --target-service-attachment=projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798
Google Cloud 콘솔의 Private Service Connect 페이지에서 연결된 엔드포인트 탭으로 이동합니다.
vector-search-forwarding-rule
의 상태가Accepted
인지 확인합니다.Private Service Connect 전달 규칙의 IP 주소를 기록해 둡니다. 이후 단계에서 이 엔드포인트를 사용하여 배포된 벡터 검색 색인과의 통신을 설정할 수 있습니다.
배포된 색인 쿼리
벡터 검색 색인 엔드포인트에 연결된 Private Service Connect 전달 규칙을 설정했으므로 on-prem-client
VM 인스턴스에서 전달 규칙으로 쿼리를 전송하여 배포된 색인을 쿼리할 수 있습니다.
IAP(Identity-Aware Proxy)가 VM 인스턴스에 연결할 수 있도록 다음과 같은 방화벽 규칙을 만듭니다.
- IAP를 통해 액세스할 수 있게 만들려는 모든 VM 인스턴스에 적용됩니다.
- IP 범위
35.235.240.0/20
에서 포트 22를 통한 TCP 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달을 위해 사용하는 모든 IP 주소가 포함됩니다.
방화벽을 만든 후 gRPC 클라이언트를 설치합니다. 이후 단계에서 gRPC 클라이언트를 사용하여 on-prem-client
VM 인스턴스에서 쿼리를 전송합니다.
방화벽 규칙 만들기 및 gRPC 설치
Cloud Shell에서 다음 명령어를 실행하고 PROJECT_ID를 프로젝트 ID로 바꿉니다.
projectid=PROJECT_ID gcloud config set project ${projectid}
ssh-iap-vpc
라는 IAP 방화벽 규칙을 만듭니다.gcloud compute firewall-rules create ssh-iap-vpc \ --network onprem-vpc \ --allow tcp:22 \ --source-ranges=35.235.240.0/20
on-prem-client
VM 인스턴스에 로그인합니다.gcloud compute ssh on-prem-client \ --project=$projectid \ --zone=us-central1-a \ --tunnel-through-iap
on-prem-client
VM 인스턴스에서gRPC
클라이언트를 설치합니다.sudo apt-get install git -y git clone https://github.com/grpc/grpc.git sudo apt-get install build-essential autoconf libtool pkg-config -y sudo apt-get install cmake -y cd grpc/ git submodule update --init mkdir -p cmake/build cd cmake/build cmake -DgRPC_BUILD_TESTS=ON ../.. make grpc_cli
설치하는 데 30분 정도 걸립니다.
기존 색인 항목의 ID 가져오기
Google Cloud 콘솔의 Vertex AI Workbench 페이지에서 인스턴스 탭으로 이동합니다.
Vertex AI Workbench 인스턴스 이름 옆에 있는 JupyterLab 열기를 클릭합니다.
Vertex AI Workbench 인스턴스가 JupyterLab을 엽니다.
File(파일) > New(새로 만들기) > Terminal(터미널)을 선택합니다.
JupyterLab 터미널(Cloud Shell 아님)에서 색인의 마지막 항목을 확인합니다.
tail -1 product-embs.json
다음 예시와 같이 항목의 ID 번호가 포함된 항목의 첫 번째 키-값 쌍을 찾습니다.
"id":"27452"
이 ID 번호를 기록해 둡니다. 다음 섹션에서 쿼리를 수행하는 데 필요합니다.
벡터 검색 쿼리 수행
on-prem-client
VM 인스턴스에서 배포된 색인을 쿼리합니다.
./grpc_cli call FORWARDING_RULE_IP:10000 google.cloud.aiplatform.container.v1.MatchService.Match "deployed_index_id:'"vector_one"',embedding_id: '"ITEM_ID"'"
다음 값을 바꿉니다.
- FORWARDING_RULE_IP: 이전 섹션에서 만든 Private Service Connect 전달 규칙의 IP 주소
- ITEM_ID: 이전 섹션에서 저장한 항목 ID 번호
출력은 다음과 비슷합니다.
user@on-prem-client:~/grpc/cmake/build$ ./grpc_cli call 172.16.30.2:10000 google.cloud.aiplatform.container.v1.MatchService.Match "deployed_index_id:'"vector_one"',embedding_id: '"20020916"'"
connecting to 172.16.30.2:10000
neighbor {
id: "16136217"
distance: 0.99999558925628662
}
neighbor {
id: "2196405"
distance: 0.82817935943603516
}
neighbor {
id: "3796353"
distance: 0.82687419652938843
}
neighbor {
id: "815154"
distance: 0.8179466724395752
}
neighbor {
id: "16262338"
distance: 0.816785454750061
}
neighbor {
id: "31290454"
distance: 0.81560027599334717
}
neighbor {
id: "4012943"
distance: 0.80958610773086548
}
neighbor {
id: "39738359"
distance: 0.8020891547203064
}
neighbor {
id: "7691697"
distance: 0.80035769939422607
}
neighbor {
id: "6398888"
distance: 0.79880392551422119
}
Rpc succeeded with OK status
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트는 유지하되 개별 리소스를 삭제하세요.
다음과 같이 Google Cloud 콘솔에서 개별 리소스를 삭제할 수 있습니다.
다음과 같이 벡터 검색 색인을 배포 취소하고 삭제합니다.
Google Cloud 콘솔의 벡터 검색 페이지에서 색인 탭으로 이동합니다.
이름이
"vs-quickstart-index-"
로 시작하고 올바른 타임스탬프가 포함된 색인을 찾습니다.색인 이름을 클릭합니다.
색인 정보 페이지의 배포된 색인 목록에서 색인 이름 옆에 있는
작업 클릭한 다음 배포 취소 클릭합니다.색인 배포를 취소하는 데 몇 분 정도 걸립니다. 색인 이름 옆에 회전하는 파란색 원이 표시되거나 색인 상태가
Undeploying
으로 나열되는 경우 색인은 아직 배포 취소 중인 것입니다. 색인이 더 이상 배포되지 않는지 확인하려면 Google Cloud 콘솔 브라우저 탭을 새로고침해야 할 수 있습니다.뒤로 화살표를 클릭하여 색인 탭으로 돌아갑니다.
색인 목록에서 색인 이름 옆에 있는
작업을 클릭한 다음 삭제를 클릭하여 색인을 삭제합니다.
다음과 같이 색인 엔드포인트를 삭제합니다.
Google Cloud 콘솔의 벡터 검색 페이지에서 색인 엔드포인트 탭으로 이동합니다.
색인 엔드포인트 목록에서 엔드포인트 이름 옆에 있는
작업을 클릭한 다음 삭제를 클릭하여 색인 엔드포인트를 삭제합니다.
다음과 같이 Vertex AI Workbench 인스턴스를 삭제합니다.
Google Cloud 콘솔의 Vertex AI 섹션에서 Workbench 페이지에 있는 인스턴스 탭으로 이동합니다.
workbench-tutorial
Vertex AI Workbench 인스턴스를 선택하고 삭제를 클릭합니다.
다음과 같이 Compute Engine VM 인스턴스를 삭제합니다.
Google Cloud 콘솔에서 Compute Engine 페이지로 이동합니다.
on-prem-client
VM 선택하고 삭제를 클릭합니다.
다음과 같이 VPN 터널을 삭제합니다.
Google Cloud 콘솔에서 VPN 페이지로 이동합니다.
VPN 페이지에서 Cloud VPN 터널 탭을 클릭합니다.
VPN 터널 목록에서 이 튜토리얼에서 만든 4개의 VPN 터널을 선택하고
삭제를 클릭합니다.
다음과 같이 HA VPN 게이트웨이를 삭제합니다.
VPN 페이지에서 Cloud VPN 게이트웨이 탭을 클릭합니다.
VPN 게이트웨이 목록에서
onprem-vpn-gw1
을 클릭합니다.Cloud VPN 게이트웨이 세부정보 페이지에서
VPN 게이트웨이 삭제를 클릭합니다.필요한 경우
뒤로 화살표를 클릭하여 VPN 게이트웨이 목록으로 돌아가서vertex-networking-vpn-gw1
을 클릭합니다.Cloud VPN 게이트웨이 세부정보 페이지에서
VPN 게이트웨이 삭제를 클릭합니다.
다음과 같이 Cloud Router를 삭제합니다.
Cloud Router 페이지로 이동합니다.
Cloud Router 목록에서 이 튜토리얼에서 만든 라우터 4개를 선택합니다.
라우터를 삭제하려면
삭제를 클릭합니다.Cloud Router에 연결된 2개의 Cloud NAT 게이트웨이도 삭제됩니다.
다음과 같이
vertex-networking-vpc
VPC 네트워크의vector-search-forwarding-rule
전달 규칙을 삭제합니다.부하 분산 페이지의 프런트엔드 탭으로 이동합니다.
전달 규칙 목록에서
vector-search-forwarding-rule
를 클릭합니다.전달 규칙 세부정보 페이지에서
삭제를 클릭합니다.
다음과 같이 VPC 네트워크를 삭제합니다.
VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 목록에서
onprem-vpc
를 클릭합니다.VPC 네트워크 세부정보 페이지에서
VPC 네트워크 삭제를 클릭합니다.각 네트워크를 삭제하면 하위 네트워크, 경로 및 방화벽 규칙도 삭제됩니다.
VPC 네트워크 목록으로 돌아가서
vertex-networking-vpc
를 클릭합니다.VPC 네트워크 세부정보 페이지에서
VPC 네트워크 삭제를 클릭합니다.
다음과 같이 스토리지 버킷을 삭제합니다.
Google Cloud 콘솔에서 Cloud Storage 페이지로 이동합니다.
스토리지 버킷을 선택하고
삭제를 클릭합니다.
다음과 같이
workbench-sa
서비스 계정을 삭제합니다.서비스 계정페이지로 이동합니다.
workbench-sa
서비스 계정을 선택하고 삭제를 클릭합니다.
다음 단계
- Vertex AI 엔드포인트 및 서비스에 액세스하기 위한 엔터프라이즈 네트워킹 옵션을 알아보세요.
- Private Service Connect 작동 방식과 상당한 성능상의 이점을 제공하는 이유를 알아보세요.
- VPC 서비스 제어를 사용하여 보안 경계를 만들어 공개 인터넷을 통해 벡터 검색 색인 엔드포인트에서 Vertex AI 및 기타 Google API에 대한 액세스를 허용하거나 거부하는 방법을 알아보세요.
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항을 살펴봅니다. Cloud 아키텍처 센터를 살펴보세요.