Private Service Connect로 벡터 검색 설정

Private Service Connect를 사용하면 다른 그룹, 팀, 프로젝트, 조직에 속하는 VPC 네트워크 간에 서비스의 비공개 소비가 가능합니다. 벡터 검색 엔드포인트가 벡터 유사성 검색을 수행할 수 있도록 사용자가 정의하고 VPC 네트워크 내부에 있는 IP 주소를 사용하여 서비스를 게시 및 소비할 수 있습니다.

벡터 검색 엔드포인트에서 Private Service Connect를 사용 설정하는 것은 다음 사용 사례에 적합합니다.

  1. 짧은 지연 시간과 벡터 검색 제공 백엔드에 대한 보안 연결이 필요합니다.
  2. 배타적 VPC 피어링 예약을 위한 IP 공간이 제한됩니다.
  3. 여러 사용자 VPC 네트워크에서 제공 백엔드에 액세스해야 합니다.

Private Service Connect 설정에 대한 자세한 내용은 Virtual Private Cloud(VPC) 문서의 Private Service Connect 개요를 참조하세요.

색인 엔드포인트 만들기

Private Service Connect가 사용 설정된 엔드포인트를 만들려면 엔드포인트를 만들 때 이를 정의해야 합니다. 이는 Vertex AI에서 다른 엔드포인트를 만드는 것과 유사합니다.

  • PROJECT: Vertex AI 리소스를 만드는 서비스 프로젝트입니다.
  • VPC_PROJECT: 클라이언트 VPC가 있는 프로젝트입니다. 독립형 VPC 설정의 경우 $PROJECT와 동일합니다. 공유 VPC 설정의 경우 VPC 호스트 프로젝트입니다.
  • PROJECT=<your-service-project>
    VPC_PROJECT=<your-vpc-project>
    REGION=us-central1
    VERTEX_ENDPOINT=$REGION-aiplatform.googleapis.com
    curl -H "Content-Type: application/json" \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      https://$VERTEX_ENDPOINT/v1/projects/$PROJECT/locations/$REGION/indexEndpoints \
      -d '{displayName: "<your-index-endpoint-name>", privateServiceConnectConfig:
      { enablePrivateServiceConnect: true, projectAllowlist: ["'$VPC_PROJECT'", "'$PROJECT'"] }}'
    

    색인 배포 옵션 정보

    자동 또는 수동 서비스 연결을 사용하여 색인을 배포할 수 있습니다.

    • Private Service Connect 자동화를 사용하여 배포(미리보기): 서비스 연결 정책을 설정하고 색인을 배포합니다. 서비스 연결 정책을 설정하면 매번 컴퓨팅 주소와 전달 규칙을 만들지 않고도 특정 네트워크에 배포할 수 있습니다.
    • 수동 연결을 사용하여 배포: 색인을 배포하고 컴퓨팅 주소와 전달 규칙을 수동으로 만듭니다. 여러 IP 주소를 사용해야 하는 경우 이 옵션을 선택할 수 있습니다.

    Private Service Connect 자동화로 배포

    각 색인 배포 후 컴퓨팅 주소와 전달 규칙을 수동으로 만들지 않아도 되도록 서비스 연결 정책을 설정할 수 있습니다.

    1. 먼저 색인을 배포할 네트워크, 서비스 클래스, 리전을 지정하는 서비스 연결 정책을 만듭니다. 이렇게 한 번만 설정합니다. 이미 이 작업을 완료했다면 다음 절차로 건너뜁니다.
    2. 색인을 배포합니다.

    제한사항

    자동화는 네트워크당 프로젝트당 IP 주소를 하나만 허용합니다. 여러 IP 주소를 사용해야 하는 경우 색인 수동 배포를 참조하세요.

    서비스 연결 정책 만들기

    색인 배포 자동화를 위한 서비스 연결 정책을 만들려면 네트워크 관리자여야 합니다.

    색인 배포를 자동화하려면 다음 단계를 따르세요.

    1. 서비스 연결 정책을 만듭니다.

      • PROJECT: Vertex AI 리소스를 만드는 서비스 프로젝트입니다.
      • VPC_PROJECT: 클라이언트 VPC가 있는 프로젝트입니다. 간단한 VPC 설정의 경우 $PROJECT와 동일합니다. 공유 VPC 설정의 경우 VPC 호스트 프로젝트입니다.
      • NETWORK_NAME: 배포할 네트워크의 이름으로, projects//global/networks/ 형식입니다.
      • REGION: 네트워크 리전입니다.
      • PSC_SUBNETS: 사용할 Private Service Connect 서브넷입니다.
      gcloud network-connectivity service-connection-policies create <policy_name> \
      --project=<vpc_project> --network=<network_name> # in the format projects/<project_id>/global/networks/<network_name> \
      --service-class=gcp-vertexai --region=<region> --subnets=<psc subnets>
      
    2. 서비스 연결 정책을 확인합니다.

      gcloud network-connectivity service-connection-policies list --project=<vpc_project> -–region=<region>
      

    색인 배포

    1. 색인을 배포합니다.

      • PROJECT: Vertex AI 리소스를 만드는 서비스 프로젝트입니다.
      • VPC_PROJECT: 클라이언트 VPC가 있는 프로젝트입니다. 독립형 VPC 설정의 경우 $PROJECT과 동일합니다. 공유 VPC 설정의 경우 VPC 호스트 프로젝트입니다.
      • NETWORK_NAME: 배포할 네트워크의 이름으로, projects//global/networks/ 형식입니다.
      • REGION: 네트워크 리전입니다.
      • PSC_SUBNETS: 사용할 Private Service Connect 서브넷입니다.
      INDEX_ENDPOINT_ID=<>
      curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://REGIONAL_ENDPOINT.googleapis.com/v1/projects/PROJECT_NUMBER/locations/REGION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex" -d '{
        "deployedIndex": {
          "id": "DEPLOYED_INDEX_ID",
          "index": "projects/PROJECT_NUMBER/locations/us-central1/indexes/INDEX_ID",
          "displayName": "DISPLAY_NAME",
          "psc_automation_configs": [
            {"project_id": "PROJECT_ID_1", "network": "NETWORK_1"},
            {"project_id": "PROJECT_ID_2", "network": "NETWORK_2" }]
        }
      }'
      

    서비스 연결 정책 삭제

    서비스 연결 정책을 삭제해야 하는 경우 다음 명령어를 실행합니다.

    gcloud network-connectivity service-connection-policies delete --project=<vpc_project> –-region=<region> <policy_name>
    

    수동 연결을 사용하여 배포

    색인을 배포하고 VPC 프로젝트에서 전달 규칙을 만듭니다.

    색인 배포

    이제 색인이 준비되었으므로, 이 단계에서는 Private Service Connect가 사용 설정된 상태로 사용자가 만든 엔드포인트에 색인을 배포합니다.

    gcloud

    이 예시에서는 gcloud ai index-endpoints deploy-index 명령어를 사용합니다.

    아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

    • INDEX_ENDPOINT_ID: 색인 엔드포인트 ID
    • DEPLOYED_INDEX_ID: 배포된 색인을 고유하게 식별하기 위해 사용자가 지정한 문자열. 문자로 시작해야 하며 문자, 숫자, 밑줄만 포함할 수 있습니다. 형식 가이드라인은 DeployedIndex.id를 참조하세요.
    • DEPLOYED_INDEX_ENDPOINT_NAME: 배포된 색인 엔드포인트의 표시 이름
    • INDEX_ID: 색인 ID
    • LOCATION: Vertex AI를 사용하는 리전
    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.

    다음 명령어를 실행합니다.

    Linux, macOS 또는 Cloud Shell

    gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID \
        --deployed-index-id=DEPLOYED_INDEX_ID \
        --display-name=DEPLOYED_INDEX_ENDPOINT_NAME \
        --index=INDEX_ID \
        --region=LOCATION \
        --project=PROJECT_ID

    Windows(PowerShell)

    gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID `
        --deployed-index-id=DEPLOYED_INDEX_ID `
        --display-name=DEPLOYED_INDEX_ENDPOINT_NAME `
        --index=INDEX_ID `
        --region=LOCATION `
        --project=PROJECT_ID

    Windows(cmd.exe)

    gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID ^
        --deployed-index-id=DEPLOYED_INDEX_ID ^
        --display-name=DEPLOYED_INDEX_ENDPOINT_NAME ^
        --index=INDEX_ID ^
        --region=LOCATION ^
        --project=PROJECT_ID

    REST

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • INDEX_ENDPOINT_ID: 색인 엔드포인트 ID
    • DEPLOYED_INDEX_ID: 배포된 색인을 고유하게 식별하기 위해 사용자가 지정한 문자열. 문자로 시작해야 하며 문자, 숫자, 밑줄만 포함할 수 있습니다. 형식 가이드라인은 DeployedIndex.id를 참조하세요.
    • DEPLOYED_INDEX_ENDPOINT_NAME: 배포된 색인 엔드포인트의 표시 이름
    • INDEX_ID: 색인 ID
    • LOCATION: Vertex AI를 사용하는 리전
    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • PROJECT_NUMBER: 프로젝트의 자동으로 생성된 프로젝트 번호

    HTTP 메서드 및 URL:

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex

    JSON 요청 본문:

    {
     "deployedIndex": {
       "id": "DEPLOYED_INDEX_ID",
       "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
       "displayName": "DEPLOYED_INDEX_ENDPOINT_NAME"
     }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 비슷한 JSON 응답이 표시됩니다.

    {
     "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
     "metadata": {
       "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployIndexOperationMetadata",
       "genericMetadata": {
         "createTime": "2022-10-19T17:53:16.502088Z",
         "updateTime": "2022-10-19T17:53:16.502088Z"
       },
       "deployedIndexId": "DEPLOYED_INDEX_ID"
     }
    }
    

    Console

    다음 안내를 따라 색인을 배포합니다.

    1. Google Cloud 콘솔의 Vertex AI 섹션에서 배포 및 사용 섹션으로 이동합니다. 벡터 검색을 선택합니다.

      벡터 검색으로 이동

    2. 활성 색인 목록이 표시됩니다.
    3. 배포하려는 색인의 이름을 선택합니다. 색인 세부정보 페이지가 열립니다.
    4. 색인 세부정보 페이지에서 엔드포인트에 배포를 클릭합니다. 색인 배포 패널이 열립니다.
    5. 표시 이름을 입력합니다. 이 이름은 ID 역할을 하며 업데이트될 수 없습니다.
    6. 엔드포인트 드롭다운에서 이 색인을 배포할 엔드포인트를 선택합니다. 참고: 색인이 이미 엔드포인트에 배포된 경우 엔드포인트를 사용할 수 없습니다.
    7. (선택사항): 머신 유형 필드에서 표준 또는 높은 메모리를 선택합니다.
    8. 선택사항. 자동 확장 사용 설정을 선택하여 워크로드 수요에 따라 노드 수를 자동으로 조절합니다. 자동 확장이 사용 중지된 경우 기본 복제본 수는 2개입니다.
    9. 배포를 클릭하여 색인을 엔드포인트에 배포합니다. 참고: 배포되는 데 약 30분 정도 소요됩니다.

    VPC 프로젝트에서 전달 규칙 만들기

    색인 배포가 완료되면 색인 엔드포인트가 IP 주소 대신 서비스 연결 URI를 반환합니다. 생성된 컴퓨팅 주소를 사용하여 서비스 연결을 타겟팅하는 VPC 프로젝트에 컴퓨팅 주소와 전달 규칙을 만들어야 합니다. 컴퓨팅 주소를 만들려면 다음 예시를 사용합니다.

    gcloud compute addresses create ${ADDRESS_NAME:?} \
        --region=${REGION:?} \
        --subnet=${SUBNET_NAME:?} \
        --project=${VPC_PROJECT:?}
    

    생성된 컴퓨팅 주소를 사용하여 서비스 연결 URI를 타겟팅하는 전달 규칙을 만들려면 다음 예시를 사용합니다.

    SERVICE_ATTACHMENT_URI=`gcloud ai index-endpoints describe {INDEX_ENDPOINT_ID}
    --format="value(deployedIndexes.privateEndpoints.serviceAttachment)"`
    
    gcloud compute forwarding-rules create ${ENDPOINT_NAME:?} \
        --network=${NETWORK_NAME:?} \
        --address=${ADDRESS_NAME:?} \
        --target-service-attachment=${SERVICE_ATTACHMENT_URI:?} \
        --project=${VPC_PROJECT:?} \
        --region=${REGION:?}
    

    (선택사항) IP 주소에 대해 DNS 레코드 만들기

    실제 IP 주소를 기억하지 않고 연결하여 로드하려면 DNS 레코드를 만들면 됩니다. 이 단계는 선택사항입니다.

    DNS_NAME_SUFFIX=matchingengine.vertexai.goog. # Don't forget the "." in the end.
    DNS_NAME=${INDEX_ENDPOINT_ID:?}.${REGION:?}.${DNS_NAME_SUFFIX:?}
    
    gcloud dns managed-zones create ${DNS_ZONE_NAME:?} \
        --dns-name=${DNS_NAME_SUFFIX:?} \
        --visibility=private \
        --project=${VPC_PROJECT:?} \
        --region=${REGION:?}
    
    gcloud dns record-sets create ${DNS_NAME:?} \
        --rrdatas=${IP_ADDRESS:?} \
        --type=A --ttl=60 \
        --zone=${DNS_ZONE_NAME:?} \
        --project=${VPC_PROJECT:?} \
        --region=${REGION:?}
    

    색인 엔드포인트에 쿼리 전송

    이제 Private Service Connect에 엔드포인트를 만들었으므로 쿼리 실행을 시작할 수 있습니다.

    색인을 쿼리하려면 색인 쿼리하여 최근접 이웃 가져오기를 참조하세요.

    다음 단계