オンライン推論に 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 の概要をご覧ください。

専用プライベート エンドポイントは、HTTP と gRPC の両方の通信プロトコルをサポートしています。gRPC リクエストの場合、エンドポイントを適切に識別するには、x-vertex-ai-endpoint-id ヘッダーを含める必要があります。次の API がサポートされています。

  • Predict
  • RawPredict
  • StreamRawPredict
  • Chat Completion(Model Garden のみ)

Vertex AI SDK for Python を使用して、専用のプライベート エンドポイントにオンライン推論リクエストを送信できます。詳細については、オンライン推論を取得するをご覧ください。

必要なロール

Private Service Connect エンドポイントの作成に必要な権限を取得するには、プロジェクトに対する Vertex AI ユーザー roles/aiplatform.user)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、Private Service Connect エンドポイントを作成するために必要な aiplatform.endpoints.create 権限が含まれています。

カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

Vertex AI のロールと権限の詳細については、IAM による Vertex AI のアクセス制御Vertex AI IAM 権限をご覧ください。

オンライン推論のエンドポイントを作成する

Private Service Connect が有効なオンライン推論のエンドポイントを作成するには、次のいずれかの方法を使用します。

Private Service Connect エンドポイントのデフォルトのリクエスト タイムアウトは 10 分です。Vertex AI SDK for Python では、次の例に示すように、必要に応じて新しい inference_timeout 値を指定して、別のリクエスト タイムアウトを指定できます。タイムアウトの最大値は 3,600 秒(1 時間)です。

コンソール

  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 のカンマ区切りリスト。各 ID は引用符で囲みます(例: ["PROJECTID1", "PROJECTID2"])。プロジェクトがこのリストに含まれていない場合、そのプロジェクトから Vertex AI エンドポイントに予測リクエストを送信することはできません。このリストに VERTEX_AI_PROJECT_ID を含めて、同じプロジェクトからエンドポイントを呼び出せるようにします。
  • INFERENCE_TIMEOUT_SECS: (省略可)省略可能な inferenceTimeout フィールドの秒数。

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"],
    "clientConnectionConfig": {
      "inferenceTimeout": {
        "seconds": INFERENCE_TIMEOUT_SECS
      }
    }
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような 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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

次のように置き換えます。

  • VERTEX_AI_PROJECT_ID: オンライン推論のエンドポイントを作成する Google Cloud プロジェクトの ID。
  • REGION: Vertex AI を使用するリージョン。
  • VERTEX_AI_ENDPOINT_NAME: オンライン推論のエンドポイントの表示名。
  • ALLOWED_PROJECTS: Google Cloudプロジェクト ID のカンマ区切りリスト。各プロジェクト ID は引用符で囲みます。たとえば、["PROJECTID1", "PROJECTID2"] のようにします。プロジェクトがこのリストに含まれていない場合、そのプロジェクトから Vertex AI エンドポイントに推論リクエストを送信することはできません。このリストに VERTEX_AI_PROJECT_ID を追加して、同じプロジェクトからエンドポイントを呼び出せるようにします。
  • INFERENCE_TIMEOUT_SECS:(省略可)省略可能な inference_timeout 値の秒数。
PROJECT_ID = "VERTEX_AI_PROJECT_ID"
REGION = "REGION"
VERTEX_AI_ENDPOINT_NAME = "VERTEX_AI_ENDPOINT_NAME"
INFERENCE_TIMEOUT_SECS = "INFERENCE_TIMEOUT_SECS"

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"],
    ),
inference_timeout=INFERENCE_TIMEOUT_SECS,
)

返されたエンドポイント 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')

PSC 自動化を使用してオンライン推論のエンドポイントを作成する(プレビュー)

オンライン推論は サービス接続の自動化と統合されているため、PSC の自動化を使用して推論エンドポイントを構成できます。これにより PSC エンドポイントが自動的に作成されるため、プロセスが簡素化されます。これは、プロジェクト内で転送ルールなどのネットワーク リソースを作成する権限がない ML デベロッパーにとって特に便利です。

まず、ネットワーク管理者がサービス接続ポリシーを確立する必要があります。このポリシーは、プロジェクトとネットワークごとに 1 回だけ使う構成です。これにより、Vertex AI(サービスクラス gcp-vertexai)はプロジェクトとネットワーク内で PSC エンドポイントを生成できます。

次に、PSC 自動化の構成を使用してエンドポイントを作成し、モデルをデプロイします。デプロイが完了すると、関連する PSC エンドポイント情報がエンドポイント内でアクセス可能になります。

制限事項

  • VPC Service Controls はサポートされていません。
  • PSC 自動化の構成には、リージョンあたり 500 個のエンドポイントの上限が適用されます。
  • モデルがデプロイされていない場合、またはエンドポイントにデプロイ中の場合は、PSC 自動化の結果は削除されます。クリーンアップとそれに続くモデルによって、新しい自動化の結果に個別の IP アドレスと転送ルールが含まれます。

サービス接続ポリシーを作成する

サービス接続ポリシーを作成するには、ネットワーク管理者である必要があります。Vertex AI がネットワークに PSC エンドポイントを作成できるようにするには、サービス接続ポリシーが必要です。有効なポリシーがない場合、自動化は CONNECTION_POLICY_MISSING エラーで失敗します。

  1. サービス接続ポリシーを作成します。

    • POLICY_NAME: ユーザーが指定したポリシーの名前。
    • PROJECT_ID: Vertex AI リソースを作成するサービス プロジェクトの ID。

    • VPC_PROJECT: クライアント VPC が配置されているプロジェクト ID。単一 VPC 設定の場合、これは $PROJECT と同じです。共有 VPC 設定の場合、これは VPC ホスト プロジェクトです。

    • NETWORK_NAME: デプロイ先のネットワークの名前。

    • REGION: ネットワークのリージョン。

    • PSC_SUBNETS: 使用する Private Service Connect サブネット。

    gcloud network-connectivity service-connection-policies create POLICY_NAME \
        --project=VPC_PROJECT \
        --network=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

    単一 VPC 設定の場合、サンプルは次のようになります。

        gcloud network-connectivity service-connection-policies create test-policy \
            --network=default \
            --project=YOUR_PROJECT_ID \
            --region=us-central1 \
            --service-class=gcp-vertexai \
            --subnets=default \
            --psc-connection-limit=500 \
            --description=test

PSC 自動化の構成を使用してオンライン推論のエンドポイントを作成する

PSCAutomationConfig で、projectId が許可リストに含まれていることを確認します。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • REGION: Vertex AI を使用するリージョン。
  • VERTEX_AI_PROJECT_ID: オンライン推論のエンドポイントを作成する Google Cloud プロジェクトの ID。
  • VERTEX_AI_ENDPOINT_NAME: オンライン予測エンドポイントの表示名。
  • NETWORK_NAME: プロジェクト番号ではなく、プロジェクト 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: ["VERTEX_AI_PROJECT_ID"],
      pscAutomationConfigs: [
        { "project_id": "VERTEX_AI_PROJECT_ID", "network": "projects/VERTEX_AI_PROJECT_ID/global/networks/NETWORK_NAME" },
      ],
    },
  },

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような 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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

次のように置き換えます。

  • VERTEX_AI_PROJECT_ID: オンライン推論のエンドポイントを作成する Google Cloud プロジェクトの ID。
  • REGION: Vertex AI を使用するリージョン。
  • VERTEX_AI_ENDPOINT_NAME: オンライン推論のエンドポイントの表示名。
  • NETWORK_NAME: プロジェクト番号ではなく、プロジェクト ID を含む完全なリソース名。
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)

config =
aiplatform.compat.types.service_networking.PrivateServiceConnectConfig(
        enable_private_service_connect=True,
        project_allowlist="VERTEX_AI_PROJECT_ID"
        psc_automation_configs=[
            aiplatform.compat.types.service_networking.PSCAutomationConfig(
                project_id="VERTEX_AI_PROJECT_ID"
network=projects/"VERTEX_AI_PROJECT_ID"/global/networks/"NETWORK_NAME",
            )
        ]
    )
psc_endpoint = aiplatform.PrivateEndpoint.create(
     display_name="VERTEX_AI_ENDPOINT_NAME"
     private_service_connect_config=config,
)

モデルをデプロイする

Private Service Connect を有効にしてオンライン推論のエンドポイントを作成した後は、エンドポイントにモデルをデプロイするの手順に沿って、モデルをデプロイします。

PSC のエンドポイントを手動で作成する

サービス アタッチメントの 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: このリクエストのリージョン名

省略可: PSC 自動化の結果から PSC のエンドポイントを取得する

生成された IP アドレスと転送ルールは、推論エンドポイントから取得できます。次に例を示します。

"privateServiceConnectConfig": {
  "enablePrivateServiceConnect": true,
  "projectAllowlist": [
    "your-project-id",
  ],
  "pscAutomationConfigs": [
    {
      "projectId": "your-project-id",
      "network": "projects/your-project-id/global/networks/default",
      "ipAddress": "10.128.15.209",
      "forwardingRule": "https://www.googleapis.com/compute/v1/projects/your-project-id/regions/us-central1/forwardingRules/sca-auto-fr-47b0d6a4-eaff-444b-95e6-e4dc1d10101e",
      "state": "PSC_AUTOMATION_STATE_SUCCESSFUL"
    },
  ]
}

エラー処理の詳細を以下に示します。

  • 自動化の失敗は、モデルのデプロイの結果に影響しません。
  • オペレーションの成功または失敗は、状態に表示されます。
    • 成功すると、IP アドレスと転送ルールが表示されます。
    • 成功しなかった場合は、エラー メッセージが表示されます。
  • モデルがデプロイされていない場合、またはエンドポイントにデプロイ中の場合、自動化の構成は削除されます。これにより、モデルが後でデプロイされると IP アドレスと転送ルールが変更されます。
  • 失敗した自動化は復元されません。失敗した場合は、PSC エンドポイントを手動で作成できます。PSC エンドポイントを手動で作成するをご覧ください。

オンライン推論を取得する

Private Service Connect を使用してエンドポイントからオンライン推論を取得する方法は、公開エンドポイントからオンライン推論を取得する方法と似ていますが、次の点に注意してください。

  • リクエストは、オンライン推論のエンドポイントの作成時に projectAllowlist で指定されたプロジェクトから送信する必要があります。
  • グローバル アクセスが有効になっていない場合は、同じリージョンからリクエストを送信する必要があります。
  • ポート 443(自己署名証明書を使用した TLS)とポート 80(TLS なし)の 2 つのポートが開いています。どちらのポートも HTTP と GRPC をサポートしています。すべてのトラフィックはプライベート ネットワークに属し、公共のインターネットを経由しません。
  • 推論を取得するには、内部 IP アドレスの DNS レコードが作成されていない限り、エンドポイントの静的 IP アドレスを使用して接続を確立する必要があります。たとえば、predict リクエストを次のエンドポイントに送信します。

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

    INTERNAL_IP_ADDRESS は、前に予約した内部 IP アドレスに置き換えます。

  • gRPC リクエストの場合: gRPC リクエストのエンドポイントを適切に識別するには、ヘッダー x-vertex-ai-endpoint-id を含める必要があります。これが必要な理由は、gRPC 通信のリクエストパス内でエンドポイント情報が伝達されないためです。

  • 安全な接続(ポート 443): ポート 443 を使用して安全な接続を確立する場合、サーバーは自己署名証明書を使用します。接続を続行するには、次のいずれかの方法をおすすめします。

    • オプション 1: 証明書検証のバイパス: 証明書検証を無視するようにクライアントを構成し、サーバーの IP アドレスまたは優先 DNS 解決方法を使用して接続を確立します。
    • オプション 2: トラストストアの統合: サーバーの自己署名証明書を取得し、クライアント システムのローカル トラストストアに追加して、*.prediction.p.vertexai.goog 形式の DNS 名を使用して接続を確立します。このメソッドは、証明書の検証を通じて安全な通信を保証します。サーバーの証明書は、次のコマンドで PSC_CERTIFICATE_FILE.pem に書き込むことができます。
    openssl s_client -showcerts -connect INTERNAL_IP_ADDRESS:443 \
      -servername *.prediction.p.vertexai.goog \
      </dev/null 2>/dev/null | sed -n \
      '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' >  PSC_CERTIFICATE_FILE.pem
    

以降のセクションでは、Python を使用して predict リクエストを送信する方法の例について説明します。

1 つ目の例

psc_endpoint = aiplatform.PrivateEndpoint("projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID")
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 ファイルのパスに置き換えます。

2 つ目の例

import json
import requests
import urllib3
import google.auth.transport.requests

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

REQUEST_FILE = "PATH_TO_INPUT_FILE"

# Programmatically get credentials and generate an access token
creds, project = google.auth.default()
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
access_token = creds.token
# Note: the credential lives for 1 hour by default
# After expiration, it must be refreshed
# See https://cloud.google.com/docs/authentication/token-types#access-tokens
# for token lifetimes.

with open(REQUEST_FILE) as json_file:
    data = json.load(json_file)
    url = "https://INTERNAL_IP_ADDRESS/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict"
    headers = {
      "Content-Type": "application/json",
      "Authorization": f"Bearer {access_token}"  # Add access token to headers
    }
    payload = {
      "instances": data["instances"],
    }

response = requests.post(url, headers=headers, json=payload, verify=False)

print(response.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 ゾーンに predict リクエストを送信する方法の例を以下に示します。

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_NAME は、gcloud dns record-sets create コマンドで指定した DNS 名に置き換えます。

制限事項

Private Service Connect を使用する Vertex AI エンドポイントには、次の制限があります。

  • チューニング済みの Gemini モデルのデプロイはサポートされていません。
  • エンドポイント内からのプライベート下り(外向き)はサポートされていません。Private Service Connect の転送ルールは単方向のルールであるため、他のプライベートGoogle Cloud ワークロードはコンテナ内からアクセスできません。
  • エンドポイントの projectAllowlist 構成は変更できません。
  • Vertex Explainable AI はサポートされていません。
  • エンドポイントを削除する前に、そのエンドポイントからモデルのデプロイを解除する必要があります。
  • すべてのモデルが 10 分以上デプロイ解除されている場合、サービス アタッチメントが削除される可能性があります。Private Service Connect の接続ステータスを確認します。ステータスが CLOSED の場合は、転送ルールを再作成します。
  • エンドポイントの削除後、最大 7 日間はそのエンドポイント名を再利用することができません。
  • プロジェクトの Private Service Connect 構成には、最大 10 個の異なる projectAllowlist 値を設定できます。

次のステップ