온라인 예측에 Private Service Connect 사용

Private Service Connect를 사용하면 공개 IP 주소, 공개 인터넷 액세스 또는 명시적으로 피어링된 내부 IP 주소 범위를 사용하지 않고 여러 소비자 프로젝트와 VPC 네트워크에서 Vertex AI 온라인 예측에 안전하게 액세스할 수 있습니다.

다음 요구사항이 있는 온라인 예측 사용 사례에 Private Service Connect를 사용하는 것이 좋습니다.

  • 비공개 및 보안 연결 필요
  • 짧은 지연 시간 필요
  • 공개적으로 액세스할 필요 없음

Private Service Connect는 VPC 네트워크에서 전달 규칙을 사용하여 트래픽을 단방향으로 Vertex AI 온라인 예측 서비스에 전송합니다. 전달 규칙은 Vertex AI 서비스를 VPC 네트워크에 노출하는 서비스 연결에 연결됩니다. 자세한 내용은 Private Service Connect를 통해 Vertex AI 서비스 액세스를 참조하세요. Private Service Connect 설정에 대한 자세한 내용은 Virtual Private Cloud(VPC) 문서의 Private Service Connect 개요를 참조하세요.

온라인 예측 엔드포인트 만들기

다음 방법 중 하나를 사용하여 Private Service Connect가 사용 설정된 온라인 예측 엔드포인트를 만듭니다.

콘솔

  1. Google Cloud 콘솔의 Vertex AI에서 온라인 예측 페이지로 이동합니다.

    온라인 예측으로 이동

  2. 만들기를 클릭합니다.

  3. 엔드포인트 표시 이름을 제공합니다.

  4. 비공개를 선택합니다.

  5. Private Service Connect를 선택합니다.

  6. 프로젝트 ID 선택을 클릭합니다.

  7. 엔드포인트 허용 목록에 추가할 프로젝트를 선택합니다.

  8. 계속을 클릭합니다.

  9. 모델 사양을 선택합니다. 자세한 내용은 엔드포인트에 모델 배포를 참조하세요.

  10. 만들기를 클릭하여 엔드포인트를 만들고 모델을 배포합니다.

  11. 응답의 엔드포인트 ID를 기록해 둡니다.

API

REST

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

  • VERTEX_AI_PROJECT_ID: 온라인 예측 엔드포인트를 만드는 Google Cloud 프로젝트의 ID입니다.
  • REGION: Vertex AI를 사용하는 리전입니다.
  • VERTEX_AI_ENDPOINT_NAME: 온라인 예측 엔드포인트의 표시 이름입니다.
  • ALLOWED_PROJECTS: Google Cloud 프로젝트 ID를 쉼표로 구분한 목록이며 각각 따옴표로 묶습니다(예: ["PROJECTID1", "PROJECTID2"]). 프로젝트가 이 목록에 없으면 해당 프로젝트에서 Vertex AI 엔드포인트로 예측 요청을 보낼 수 없습니다. 같은 프로젝트에서 엔드포인트를 호출할 수 있도록 이 목록에 VERTEX_AI_PROJECT_ID를 포함해야 합니다.

HTTP 메서드 및 URL:

POST https://REGION-aiplatform.googleapis.com/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints

JSON 요청 본문:

{
  "displayName": "VERTEX_AI_ENDPOINT_NAME",
  "privateServiceConnectConfig": {
    "enablePrivateServiceConnect": true,
    "projectAllowlist": ["ALLOWED_PROJECTS"]
  }
}

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

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

{
  "name": "projects/VERTEX_AI_PROJECT_NUMBER/locations/REGION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateEndpointOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-11-05T17:45:42.812656Z",
      "updateTime": "2020-11-05T17:45:42.812656Z"
    }
  }
}
ENDPOINT_ID를 기록해 둡니다.

Python

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Python 설정 안내를 따르세요. 자세한 내용은 Vertex AI Python API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

PROJECT_ID = "VERTEX_AI_PROJECT_ID"
REGION = "REGION"
VERTEX_AI_ENDPOINT_NAME = "VERTEX_AI_ENDPOINT_NAME"

from google.cloud import aiplatform

aiplatform.init(project=PROJECT_ID, location=REGION)

# Create the forwarding rule in the consumer project
psc_endpoint = aiplatform.PrivateEndpoint.create(
display_name=VERTEX_AI_ENDPOINT_NAME,
project=PROJECT_ID,
location=REGION,
private_service_connect_config=aiplatform.PrivateEndpoint.PrivateServiceConnectConfig(
    project_allowlist=["ALLOWED_PROJECTS"],
    ),
)

다음을 바꿉니다.

  • VERTEX_AI_PROJECT_ID: 온라인 예측 엔드포인트를 만드는 Google Cloud 프로젝트의 ID입니다.
  • REGION: Vertex AI를 사용하는 리전입니다.
  • VERTEX_AI_ENDPOINT_NAME: 온라인 예측 엔드포인트의 표시 이름입니다.
  • ALLOWED_PROJECTS: 각각 따옴표로 묶인 쉼표로 구분된 Google Cloud 프로젝트 ID 목록입니다. 예를 들면 ["PROJECTID1", "PROJECTID2"]입니다. 프로젝트가 이 목록에 없으면 해당 프로젝트에서 Vertex AI 엔드포인트로 예측 요청을 보낼 수 없습니다. 엔드포인트가 속한 동일한 프로젝트에서 엔드포인트를 호출할 수 있도록 이 목록에 VERTEX_AI_PROJECT_ID를 포함해야 합니다.

반환된 엔드포인트 URI 끝에 있는 ENDPOINT_ID를 기록해 둡니다.

INFO:google.cloud.aiplatform.models:To use this PrivateEndpoint in another session:
INFO:google.cloud.aiplatform.models:endpoint = aiplatform.PrivateEndpoint('projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID')

모델 배포

Private Service Connect를 사용 설정한 온라인 예측 엔드포인트를 만든 후 엔드포인트에 모델 배포에 설명된 단계를 수행하여 모델을 배포합니다.

서비스 연결 URI 가져오기

모델을 배포하면 온라인 예측 엔드포인트에 서비스 연결이 생성됩니다. 이 서비스 연결은 VPC 네트워크에 노출되는 Vertex AI 온라인 예측 서비스를 나타냅니다. gcloud ai endpoints describe 명령어를 실행하여 서비스 연결 URI를 가져옵니다.

  1. 엔드포인트 세부정보에서 serviceAttachment 값만 나열합니다.

    gcloud ai endpoints describe ENDPOINT_ID \
    --project=VERTEX_AI_PROJECT_ID \
    --region=REGION \
    | grep -i serviceAttachment
    

    다음을 바꿉니다.

    • ENDPOINT_ID: 온라인 예측 엔드포인트의 ID
    • VERTEX_AI_PROJECT_ID: 온라인 예측 엔드포인트를 만든 Google Cloud 프로젝트의 ID
    • REGION: 이 요청의 리전

    출력은 다음과 비슷합니다.

    serviceAttachment: projects/ac74a9f84c2e5f2a1-tp/regions/us-central1/serviceAttachments/gkedpm-c6e6a854a634dc99472bb802f503c1
    
  2. serviceAttachment 필드의 전체 문자열을 기록해 둡니다. 서비스 연결 URI입니다.

전달 규칙 만들기

내부 IP 주소를 예약하고 이 주소로 전달 규칙을 생성할 수 있습니다. 전달 규칙을 만들려면 이전 단계의 서비스 연결 URI가 필요합니다.

  1. 전달 규칙의 내부 IP 주소를 예약하려면 gcloud compute addresses create 명령어를 사용합니다.

    gcloud compute addresses create ADDRESS_NAME \
    --project=VPC_PROJECT_ID \
    --region=REGION \
    --subnet=SUBNETWORK \
    --addresses=INTERNAL_IP_ADDRESS
    

    다음을 바꿉니다.

    • ADDRESS_NAME: 내부 IP 주소 이름
    • VPC_PROJECT_ID: VPC 네트워크를 호스팅하는 Google Cloud 프로젝트의 ID입니다. 온라인 예측 엔드포인트와 Private Service Connect 전달 규칙이 같은 프로젝트에서 호스팅되면 이 매개변수의 VERTEX_AI_PROJECT_ID를 사용합니다.
    • REGION: Private Service Connect 전달 규칙을 만들 Google Cloud 리전입니다.
    • SUBNETWORK: IP 주소가 포함된 VPC 서브넷의 이름입니다.
    • INTERNAL_IP_ADDRESS: 예약할 내부 IP 주소. 이 매개변수는 선택사항입니다.

      • 이 매개변수를 지정하면 IP 주소가 서브넷의 기본 IP 주소 범위에 속해야 합니다. IP 주소는 RFC 1918 주소이거나 비 RFC 범위가 있는 서브넷일 수 있습니다.
      • 이 매개변수를 생략하면 내부 IP 주소가 자동으로 할당됩니다.
      • 자세한 내용은 새 고정 내부 IPv4 또는 IPv6 주소 예약을 참조하세요.
  2. IP 주소가 예약되어 있는지 확인하려면 gcloud compute addresses list 명령어를 사용합니다.

    gcloud compute addresses list --filter="name=(ADDRESS_NAME)" \
    --project=VPC_PROJECT_ID
    

    응답에서 IP 주소에 대해 RESERVED 상태가 표시되는지 확인합니다.

  3. 전달 규칙을 만들고 온라인 예측 서비스 연결을 가리키게 하려면 gcloud compute forwarding-rules create 명령어를 사용합니다.

    gcloud compute forwarding-rules create PSC_FORWARDING_RULE_NAME \
        --address=ADDRESS_NAME \
        --project=VPC_PROJECT_ID \
        --region=REGION \
        --network=VPC_NETWORK_NAME \
        --target-service-attachment=SERVICE_ATTACHMENT_URI
    

    다음을 바꿉니다.

    • PSC_FORWARDING_RULE_NAME: 전달 규칙의 이름입니다.
    • VPC_NETWORK_NAME: 엔드포인트를 만들 VPC 네트워크의 이름입니다.
    • SERVICE_ATTACHMENT_URI: 앞에서 기록한 서비스 연결
  4. 서비스 연결에서 엔드포인트를 수락하는지 확인하려면 gcloud compute forwarding-rules describe 명령어를 사용합니다.

    gcloud compute forwarding-rules describe PSC_FORWARDING_RULE_NAME \
    --project=VPC_PROJECT_ID \
    --region=REGION
    

    응답의 pscConnectionStatus 필드에 ACCEPTED 상태가 표시되는지 확인합니다.

선택사항: 내부 IP 주소 가져오기

전달 규칙을 만들 때 INTERNAL_IP_ADDRESS 값을 지정하지 않았으면 gcloud compute forwarding-rules describe 명령어를 통해 자동으로 할당된 주소를 가져올 수 있습니다.

gcloud compute forwarding-rules describe PSC_FORWARDING_RULE_NAME \
--project=VERTEX_AI_PROJECT_ID \
--region=REGION \
| grep -i IPAddress

다음을 바꿉니다.

  • VERTEX_AI_PROJECT_ID: 프로젝트 ID
  • REGION: 이 요청의 리전 이름

온라인 예측 수행

Private Service Connect를 사용하여 엔드포인트에서 온라인 예측 수행하기는 다음 고려사항을 제외하고 공개 엔드포인트에서 온라인 예측 수행하기와 비슷합니다.

  • 온라인 예측 엔드포인트를 만들 때 projectAllowlist에 지정한 프로젝트에서 요청을 보내야 합니다.
  • 전역 액세스가 사용 설정되지 않은 경우에는 같은 리전에서 요청을 보내야 합니다.
  • 내부 IP 주소의 DNS 레코드를 만들지 않은 경우에 REST를 사용하여 예측을 수행하려면 엔드포인트의 고정 IP 주소를 사용하여 연결해야 합니다. 예를 들어 predict 요청을 다음 엔드포인트에 보내야 합니다.

    https://INTERNAL_IP_ADDRESS/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict
    

    INTERNAL_IP_ADDRESS를 앞에서 예약한 내부 IP 주소로 바꿉니다.

  • 다음은 Python을 사용하여 예측 요청을 전송하는 방법의 예시입니다.

    REQUEST_FILE = "PATH_TO_INPUT_FILE"
    import json
    
    import urllib3
    
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    
    with open(REQUEST_FILE) as json_file:
        data = json.load(json_file)
        response = psc_endpoint.predict(
            instances=data["instances"], endpoint_override=INTERNAL_IP_ADDRESS
        )
    print(response)
    

    PATH_TO_INPUT_FILE을 요청 입력이 포함된 JSON 파일의 경로로 바꿉니다.

선택사항: 내부 IP 주소의 DNS 레코드 만들기

내부 IP 주소를 지정할 필요 없이 엔드포인트에서 온라인 예측을 수행할 수 있도록 DNS 레코드를 만드는 것이 좋습니다.

자세한 내용은 DNS를 구성하는 다른 방법을 참조하세요.

  1. gcloud dns managed-zones create 명령어를 사용하여 비공개 DNS 영역을 만듭니다. 이 영역은 전달 규칙이 생성된 VPC 네트워크와 연결됩니다.

    DNS_NAME_SUFFIX="prediction.p.vertexai.goog."  # DNS names have "." at the end.
    gcloud dns managed-zones create ZONE_NAME \
    --project=VPC_PROJECT_ID \
    --dns-name=$DNS_NAME_SUFFIX \
    --networks=VPC_NETWORK_NAME \
    --visibility=private \
    --description="A DNS zone for Vertex AI endpoints using Private Service Connect."
    
    

    다음을 바꿉니다.

    • ZONE_NAME: DNS 영역의 이름
  2. 영역에 DNS 레코드를 만들려면 gcloud dns record-sets create 명령어를 사용합니다.

    DNS_NAME=ENDPOINT_ID.REGION-VERTEX_AI_PROJECT_NUMBER.$DNS_NAME_SUFFIX
    gcloud dns record-sets create $DNS_NAME \
    --rrdatas=INTERNAL_IP_ADDRESS \
    --zone=ZONE_NAME \
    --type=A \
    --ttl=60 \
    --project=VPC_PROJECT_ID
    

    다음을 바꿉니다.

    • VERTEX_AI_PROJECT_NUMBER: 프로젝트의 VERTEX_AI_PROJECT_ID프로젝트 번호. Google Cloud 콘솔에서 이 프로젝트 번호를 찾을 수 있습니다. 자세한 내용은 프로젝트 식별을 참조하세요.
    • INTERNAL_IP_ADDRESS: 온라인 예측 엔드포인트의 내부 IP 주소입니다.

    이제 predict 요청을 다음으로 보낼 수 있습니다.

    https://ENDPOINT_ID.REGION-VERTEX_AI_PROJECT_NUMBER.prediction.p.vertexai.goog/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict
    

다음은 Python을 사용하여 DNS 영역에 예측 요청을 보내는 방법의 예시입니다.

REQUEST_FILE = "PATH_TO_INPUT_FILE"
import json

import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

with open(REQUEST_FILE) as json_file:
    data = json.load(json_file)
    response = psc_endpoint.predict(
        instances=data["instances"], endpoint_override=DNS_NAME
    )
print(response)

DNS_NAMEgcloud dns record-sets create 명령어에서 지정한 DNS 이름으로 바꿉니다.

제한사항

Private Service Connect가 포함된 Vertex AI 엔드포인트에는 다음과 같은 제한사항이 적용됩니다.

  • 엔드포인트 내에서의 비공개 이그레스는 지원되지 않습니다. Private Service Connect 전달 규칙은 단방향이므로 다른 비공개 Google Cloud 워크로드는 컨테이너 내에서 액세스할 수 없습니다.
  • 엔드포인트의 projectAllowlist 구성을 변경할 수 없습니다.
  • 액세스 로깅은 지원되지 않습니다.
  • 요청 및 응답 로깅은 지원되지 않습니다.
  • Vertex Explainable AI는 지원되지 않습니다.

제한사항 미리보기

미리보기에는 다음과 같은 추가 제한사항이 적용됩니다.

  • 모든 Private Service Connect 모델을 배포 취소하고 다시 배포하는 경우 서비스 연결 이름이 동일하더라도 전달 규칙을 다시 만들어야 합니다.
  • 모든 엔드포인트에는 동일한 projectAllowlist 구성이 있어야 합니다.

다음 단계