Private Service Connect를 사용하여 온프레미스에서 벡터 검색 색인에 액세스


온프레미스 호스트는 벡터 검색 색인 엔드포인트에 공개 인터넷을 통해 도달하거나 Cloud VPN 또는 Cloud Interconnect를 이용해 Private Service Connect를 사용하는 하이브리드 네트워킹 아키텍처를 통해 비공개로 도달할 수 있습니다. 두 옵션 모두 SSL/TLS 암호화를 제공합니다. 그러나 비공개 옵션이 훨씬 더 우수한 성능을 제공하므로 중요한 애플리케이션에는 비공개 옵션이 권장됩니다.

이 튜토리얼에서는 고가용성 VPN(HA VPN)을 사용하여 멀티 클라우드 및 온프레미스 비공개 연결의 기반이 되는 두 Virtual Private Cloud(VPC) 네트워크 사이에서 비공개로 벡터 검색 색인 엔드포인트에 액세스할 수 있습니다.

이 튜토리얼은 Vertex AI, 가상 프라이빗 클라우드, Google Cloud 콘솔, Cloud Shell에 익숙한 엔터프라이즈 네트워크 관리자, 데이터 과학자, 연구원을 대상으로 합니다. 벡터 검색에 익숙하면 도움이 되지만 필수 사항은 아닙니다.

Private Service Connect를 사용하여 온프레미스에서 벡터 검색 색인에 액세스하는 아키텍처 다이어그램

목표

  • 앞선 다이어그램과 같이 VPC 네트워크 2개를 만듭니다.
    • 하나(onprem-vpc)는 온프레미스 네트워크를 나타냅니다.
    • 다른 하나(vertex-networking-vpc)는 벡터 검색 색인 엔드포인트를 위한 것입니다.
  • vertex-networking-vpconprem-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 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. In the Google Cloud console, go to the project selector page.

    Go to project selector

  2. Select or create a Google Cloud project.

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Cloud Shell을 열고 이 튜토리얼에 나열된 명령어를 실행합니다. Cloud Shell은 웹브라우저에서 프로젝트와 리소스를 관리할 수 있는 Google Cloud의 대화형 셸 환경입니다.
  5. Cloud Shell에서 현재 프로젝트를 Google Cloud 프로젝트 ID로 설정한 후 동일한 프로젝트 ID를 projectid 셸 변수에 저장합니다.
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    PROJECT_ID를 프로젝트 ID로 바꿉니다. 필요한 경우 Google Cloud 콘솔에서 프로젝트 ID를 찾을 수 있습니다. 자세한 내용은 프로젝트 ID 찾기를 참조하세요.
  6. 프로젝트 소유자가 아니라면 프로젝트 소유자에게 프로젝트 IAM 관리자(roles/resourcemanager.projectIamAdmin) 역할을 부여해 달라고 요청합니다. 다음 단계에서 IAM 역할을 부여하려면 이 역할이 있어야 합니다.
  7. 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을 각 개별 역할로 바꿉니다.
  8. 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)

  1. 색인 엔드포인트의 VPC 네트워크를 만듭니다.

    gcloud compute networks create vertex-networking-vpc --project=$projectid --subnet-mode custom
    
  2. 기본 IPv4 범위가 172.16.20.0/28workbench-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
    
  3. 기본 IPv4 범위가 172.16.30.0/28psc-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)

  1. 온프레미스 네트워크(onprem-vpc)를 시뮬레이션하도록 VPC 네트워크를 만듭니다.

    gcloud compute networks create onprem-vpc \
      --subnet-mode custom
    
  2. onprem-vpc 네트워크에서 기본 IPv4 범위가 172.16.10.0/29onprem-vpc-subnet1이라는 서브넷을 만듭니다.

    gcloud compute networks subnets create onprem-vpc-subnet1 \
      --network onprem-vpc \
      --range 172.16.10.0/29 \
      --region us-central1
    

VPC 네트워크가 올바르게 구성되었는지 확인

  1. Google Cloud 콘솔의 VPC 네트워크 페이지에서 현재 프로젝트의 네트워크 탭으로 이동합니다.

    VPC 네트워크로 이동

  2. VPC 네트워크 목록에서 네트워크 2개(vertex-networking-vpconprem-vpc)가 생성되었는지 확인합니다.

  3. 현재 프로젝트의 서브넷 탭을 클릭합니다.

  4. VPC 서브넷 목록에서 workbench-subnet, psc-forwarding-rule-subnet, onprem-vpc-subnet1 서브넷이 생성되었는지 확인합니다.

on-prem-client VM 인스턴스 만들기

이 섹션에서는 HA VPN을 통해 벡터 검색 색인 엔드포인트에 요청을 전송하는 클라이언트 애플리케이션을 나타내는 VM 인스턴스를 만듭니다.

  1. 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 게이트웨이 만들기

  1. Cloud Shell에서 vertex-networking-vpc VPC 네트워크의 HA VPN 게이트웨이를 만듭니다.

    gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \
       --network vertex-networking-vpc \
       --region us-central1
    
  2. onprem-vpc VPC 네트워크의 HA VPN 게이트웨이를 만듭니다.

    gcloud compute vpn-gateways create onprem-vpn-gw1 \
       --network onprem-vpc \
       --region us-central1
    
  3. Google Cloud 콘솔에서 VPN 페이지의 Cloud VPN 게이트웨이 탭으로 이동합니다.

    VPN으로 이동

  4. 2개의 게이트웨이(vertex-networking-vpn-gw1onprem-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) 인스턴스에 대한 발신 연결을 제공합니다.

  1. 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
    
  2. onprem-vpc VPC 네트워크의 Cloud Router를 만듭니다.

    gcloud compute routers create onprem-vpc-router1 \
       --region us-central1\
       --network onprem-vpc\
       --asn 65002
    
  3. vertex-networking-vpc VPC 네트워크의 리전 Cloud Router를 만듭니다.

    gcloud compute routers create cloud-router-us-central1-vertex-nat \
      --network vertex-networking-vpc \
      --region us-central1
    
  4. 리전 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
    
  5. onprem-vpc VPC 네트워크의 리전 Cloud Router를 만듭니다.

    gcloud compute routers create cloud-router-us-central1-onprem-nat \
      --network onprem-vpc \
      --region us-central1
    
  6. 리전 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
    
  7. Google Cloud 콘솔에서 Cloud Router 페이지로 이동합니다.

    Cloud Router로 이동

  8. Cloud Router 목록에서 다음 라우터가 생성되었는지 확인합니다.

    • cloud-router-us-central1-onprem-nat
    • cloud-router-us-central1-vertex-nat
    • onprem-vpc-router1
    • vertex-networking-vpc-router1

    새 값을 보려면 Google Cloud 콘솔 브라우저 탭을 새로고침해야 할 수 있습니다.

  9. Cloud Router 목록에서 cloud-router-us-central1-vertex-nat를 클릭합니다.

  10. 라우터 세부정보 페이지에서 cloud-nat-us-central1 Cloud NAT 게이트웨이가 생성되었는지 확인합니다.

  11. 뒤로 화살표를 클릭하여 Cloud Router 페이지로 돌아갑니다.

  12. 라우터 목록에서 cloud-router-us-central1-onprem-nat를 클릭합니다.

  13. 라우터 세부정보 페이지에서 cloud-nat-us-central1-on-prem Cloud NAT 게이트웨이가 생성되었는지 확인합니다.

VPN 터널 만들기

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. Google Cloud 콘솔에서 VPN 페이지로 이동합니다.

    VPN으로 이동

  6. 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 세션 설정

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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 세션 설정

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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 세션 생성 검증

  1. Google Cloud 콘솔에서 VPN 페이지로 이동합니다.

    VPN으로 이동

  2. VPN 터널 목록에서 각 터널의 BGP 세션 상태 열 값이 BGP 세션 구성에서 BGP 설정됨으로 변경되었는지 확인합니다. 새 값을 보려면 Google Cloud 콘솔 브라우저 탭을 새로고침해야 할 수 있습니다.

vertex-networking-vpc로 학습된 경로 검증

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. VPC 네트워크 목록에서 vertex-networking-vpc를 클릭합니다.

  3. 경로 탭을 클릭합니다.

  4. 리전 목록에서 us-central1(아이오와)을 선택하고 보기를 클릭합니다.

  5. 대상 IP 범위 열에서 onprem-vpc-subnet1 서브넷의 IP 범위(172.16.10.0/29)가 두 번 표시되는지 확인합니다.

학습된 경로 on-prem-vpc 검증

  1. 뒤로 화살표를 클릭하여 VPC 네트워크 페이지로 돌아갑니다.

  2. VPC 네트워크 목록에서 on-prem-vpc를 클릭합니다.

  3. 경로 탭을 클릭합니다.

  4. 리전 목록에서 us-central1(아이오와)을 선택하고 보기를 클릭합니다.

  5. 대상 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 권장사항에 따라 사용자 관리 서비스 계정을 만듭니다.

  1. Cloud Shell에서 workbench-sa라는 이름의 서비스 계정을 만듭니다.

    gcloud iam service-accounts create workbench-sa \
       --display-name="workbench-sa"
    
  2. 서비스 계정에 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"
    
  3. 서비스 계정에 스토리지 관리자(roles/storage.admin) IAM 역할을 할당합니다.

    gcloud projects add-iam-policy-binding $projectid \
      --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
      --role="roles/storage.admin"
    
  4. 서비스 계정에 서비스 사용량 관리자(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

벡터 검색 색인 만들기 및 배포

개발 환경 준비

  1. Google Cloud 콘솔의 Vertex AI Workbench 페이지에서 인스턴스 탭으로 이동합니다.

    Vertex AI Workbench로 이동

  2. Vertex AI Workbench 인스턴스 이름(workbench-tutorial) 옆에 있는 JupyterLab 열기를 클릭합니다.

    Vertex AI Workbench 인스턴스가 JupyterLab을 엽니다.

  3. 파일 > 새로 만들기 > 노트북을 선택합니다.

  4. 커널 선택 메뉴에서 Python 3(로컬)를 선택하고 선택을 클릭합니다.

  5. 새 노트북이 열리면 코드를 입력할 수 있는 기본 코드 셀이 있습니다. 텍스트 필드 뒤에 [ ]:가 표시되어 있습니다. 텍스트 필드에 코드를 붙여넣습니다.

    Vertex AI SDK for Python을 설치하려면 다음 코드를 셀에 붙여넣고  선택한 셀 실행 및 진행을 클릭합니다.

    !pip install --upgrade --user google-cloud-aiplatform google-cloud-storage
    
  6. 이 단계와 이어지는 각 단계에서 필요한 경우 아래에 셀 삽입을 클릭하여 새 코드 셀을 추가하고 셀에 코드를 붙여넣은 후  선택한 셀 실행 및 진행을 클릭합니다.

    이 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)
    
  7. 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 버킷을 만들어 데이터 세트의 임베딩 파일을 배치합니다. 이후 단계에서 이 파일을 사용하여 색인을 빌드합니다.

  1. Jupyterlab 노트북에서 Cloud Storage 버킷을 만듭니다.

    BUCKET_URI = f"gs://{PROJECT_ID}-vs-quickstart-{UID}"
    ! gcloud storage buckets create $BUCKET_URI --location=$LOCATION --project=$PROJECT_ID
    
  2. 예시 파일을 Cloud Storage 버킷에 복사합니다.

    ! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
    
  3. 또한 벡터 검색을 사용하여 쿼리를 실행하려면 임베딩 파일을 로컬 디렉터리에 복사해야 합니다.

    ! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" . # for query tests
    

벡터 검색 색인 만들기

  1. Jupyterlab 노트북에서 임베딩을 벡터 검색에 로드합니다.

    # init the aiplatform package
    from google.cloud import aiplatform
    aiplatform.init(project=PROJECT_ID, location=LOCATION)
    
  2. 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분 정도 걸립니다.

  3. Google Cloud 콘솔의 벡터 검색 페이지에서 색인 탭으로 이동합니다.

    색인으로 이동

  4. 이름이 "vs-quickstart-index-"로 시작하는 색인이 있고 올바른 타임스탬프를 포함하는지 확인합니다.

  5. 색인 ID를 기록해 둡니다. 이후 단계에서 색인을 배포할 때 이 ID가 필요합니다.

색인 엔드포인트 만들기

  1. 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
    
  2. 색인 엔드포인트 만들기

    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'"] }}'
    
  3. 색인 엔드포인트가 생성되었는지 확인합니다.

    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'
    
  4. 색인 엔드포인트 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분 정도 걸립니다. 색인을 배포할 때 서비스 연결이 생성됩니다.

색인이 색인 엔드포인트에 배포되었는지 확인

  1. Google Cloud 콘솔의 벡터 검색 페이지에서 색인 엔드포인트 탭으로 이동합니다.

    색인 엔드포인트로 이동

  2. 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). 다음 단계에서 전달 규칙을 만들 때 필요합니다.

전달 규칙 만들기

  1. Cloud Shell에서 전달 규칙에서 벡터 검색 색인을 쿼리할 때 사용할 IP 주소를 예약합니다.

    gcloud compute addresses create vector-search-forwarding-rule \
      --region=us-central1 \
      --subnet=psc-forwarding-rule-subnet
    
  2. 예약된 IP 주소를 찾습니다.

    gcloud compute addresses list --filter="name=vector-search-forwarding-rule"
    
  3. SERVICE_ATTACHMENT_URIserviceAttachment 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
    
  4. Google Cloud 콘솔의 Private Service Connect 페이지에서 연결된 엔드포인트 탭으로 이동합니다.

    연결된 엔드포인트로 이동

  5. vector-search-forwarding-rule의 상태가 Accepted인지 확인합니다.

  6. 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 설치

  1. Cloud Shell에서 다음 명령어를 실행하고 PROJECT_ID를 프로젝트 ID로 바꿉니다.

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. 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
    
  3. on-prem-client VM 인스턴스에 로그인합니다.

    gcloud compute ssh on-prem-client \
      --project=$projectid \
      --zone=us-central1-a \
      --tunnel-through-iap
    
  4. 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 가져오기

  1. Google Cloud 콘솔의 Vertex AI Workbench 페이지에서 인스턴스 탭으로 이동합니다.

    Vertex AI Workbench로 이동

  2. Vertex AI Workbench 인스턴스 이름 옆에 있는 JupyterLab 열기를 클릭합니다.

    Vertex AI Workbench 인스턴스가 JupyterLab을 엽니다.

  3. File(파일) > New(새로 만들기) > Terminal(터미널)을 선택합니다.

  4. JupyterLab 터미널(Cloud Shell 아님)에서 색인의 마지막 항목을 확인합니다.

    tail -1 product-embs.json
    
  5. 다음 예시와 같이 항목의 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 콘솔에서 개별 리소스를 삭제할 수 있습니다.

  1. 다음과 같이 벡터 검색 색인을 배포 취소하고 삭제합니다.

    1. Google Cloud 콘솔의 벡터 검색 페이지에서 색인 탭으로 이동합니다.

      색인으로 이동

    2. 이름이 "vs-quickstart-index-"로 시작하고 올바른 타임스탬프가 포함된 색인을 찾습니다.

    3. 색인 이름을 클릭합니다.

    4. 색인 정보 페이지의 배포된 색인 목록에서 색인 이름 옆에 있는 작업 클릭한 다음 배포 취소 클릭합니다.

      색인 배포를 취소하는 데 몇 분 정도 걸립니다. 색인 이름 옆에 회전하는 파란색 원이 표시되거나 색인 상태가 Undeploying으로 나열되는 경우 색인은 아직 배포 취소 중인 것입니다. 색인이 더 이상 배포되지 않는지 확인하려면 Google Cloud 콘솔 브라우저 탭을 새로고침해야 할 수 있습니다.

    5. 뒤로 화살표를 클릭하여 색인 탭으로 돌아갑니다.

    6. 색인 목록에서 색인 이름 옆에 있는 작업을 클릭한 다음 삭제를 클릭하여 색인을 삭제합니다.

  2. 다음과 같이 색인 엔드포인트를 삭제합니다.

    1. Google Cloud 콘솔의 벡터 검색 페이지에서 색인 엔드포인트 탭으로 이동합니다.

      색인 엔드포인트로 이동

    2. 색인 엔드포인트 목록에서 엔드포인트 이름 옆에 있는 작업을 클릭한 다음 삭제를 클릭하여 색인 엔드포인트를 삭제합니다.

  3. 다음과 같이 Vertex AI Workbench 인스턴스를 삭제합니다.

    1. Google Cloud 콘솔의 Vertex AI 섹션에서 Workbench 페이지에 있는 인스턴스 탭으로 이동합니다.

      Vertex AI Workbench로 이동

    2. workbench-tutorial Vertex AI Workbench 인스턴스를 선택하고 삭제를 클릭합니다.

  4. 다음과 같이 Compute Engine VM 인스턴스를 삭제합니다.

    1. Google Cloud 콘솔에서 Compute Engine 페이지로 이동합니다.

      Compute Engine으로 이동

    2. on-prem-client VM 선택하고 삭제를 클릭합니다.

  5. 다음과 같이 VPN 터널을 삭제합니다.

    1. Google Cloud 콘솔에서 VPN 페이지로 이동합니다.

      VPN으로 이동

    2. VPN 페이지에서 Cloud VPN 터널 탭을 클릭합니다.

    3. VPN 터널 목록에서 이 튜토리얼에서 만든 4개의 VPN 터널을 선택하고 삭제를 클릭합니다.

  6. 다음과 같이 HA VPN 게이트웨이를 삭제합니다.

    1. VPN 페이지에서 Cloud VPN 게이트웨이 탭을 클릭합니다.

      Cloud VPN 게이트웨이로 이동

    2. VPN 게이트웨이 목록에서 onprem-vpn-gw1을 클릭합니다.

    3. Cloud VPN 게이트웨이 세부정보 페이지에서 VPN 게이트웨이 삭제를 클릭합니다.

    4. 필요한 경우 뒤로 화살표를 클릭하여 VPN 게이트웨이 목록으로 돌아가서 vertex-networking-vpn-gw1을 클릭합니다.

    5. Cloud VPN 게이트웨이 세부정보 페이지에서 VPN 게이트웨이 삭제를 클릭합니다.

  7. 다음과 같이 Cloud Router를 삭제합니다.

    1. Cloud Router 페이지로 이동합니다.

      Cloud Router로 이동

    2. Cloud Router 목록에서 이 튜토리얼에서 만든 라우터 4개를 선택합니다.

    3. 라우터를 삭제하려면 삭제를 클릭합니다.

      Cloud Router에 연결된 2개의 Cloud NAT 게이트웨이도 삭제됩니다.

  8. 다음과 같이 vertex-networking-vpc VPC 네트워크의 vector-search-forwarding-rule 전달 규칙을 삭제합니다.

    1. 부하 분산 페이지의 프런트엔드 탭으로 이동합니다.

      프런트엔드로 이동

    2. 전달 규칙 목록에서 vector-search-forwarding-rule를 클릭합니다.

    3. 전달 규칙 세부정보 페이지에서 삭제를 클릭합니다.

  9. 다음과 같이 VPC 네트워크를 삭제합니다.

    1. VPC 네트워크 페이지로 이동합니다.

      VPC 네트워크로 이동

    2. VPC 네트워크 목록에서 onprem-vpc를 클릭합니다.

    3. VPC 네트워크 세부정보 페이지에서 VPC 네트워크 삭제를 클릭합니다.

      각 네트워크를 삭제하면 하위 네트워크, 경로 및 방화벽 규칙도 삭제됩니다.

    4. VPC 네트워크 목록으로 돌아가서 vertex-networking-vpc를 클릭합니다.

    5. VPC 네트워크 세부정보 페이지에서 VPC 네트워크 삭제를 클릭합니다.

  10. 다음과 같이 스토리지 버킷을 삭제합니다.

    1. Google Cloud 콘솔에서 Cloud Storage 페이지로 이동합니다.

      Cloud Storage로 이동

    2. 스토리지 버킷을 선택하고 삭제를 클릭합니다.

  11. 다음과 같이 workbench-sa 서비스 계정을 삭제합니다.

    1. 서비스 계정페이지로 이동합니다.

      서비스 계정으로 이동

    2. workbench-sa 서비스 계정을 선택하고 삭제를 클릭합니다.

다음 단계