Freigeben über


Routenoptimierte Abfrageendpunkte

In diesem Artikel wird beschrieben, wie Sie die entsprechenden Authentifizierungsanmeldeinformationen und die entsprechende URL abrufen, damit Sie den Endpunkt für Ihr routenoptimiertes Modelldienen oder Feature-Dienst abfragen können.

Anforderungen

  • Ein Modellendpunkt oder ein Feature-Endpunkt, bei dem die Routenoptimierung aktiviert ist. Siehe Routenoptimierung bei der Bereitstellung von Endpunkten.
  • Das Abfragen routingoptimierter Endpunkte unterstützt nur die Verwendung von OAuth-Token. Persönliche Zugriffstokens werden nicht unterstützt.

Abrufen der routenoptimierten URL

Warnung

Ab dem 22. September 2025 müssen alle neu erstellten routenoptimierten Endpunkte ausschließlich über die routingoptimierte URL abgefragt werden. Endpunkte, die nach diesem Datum erstellt wurden, unterstützen keine Abfrage über die Arbeitsbereichs-URL.

Wenn Ihr routenoptimierter Endpunkt vor dem 22. September 2025 erstellt wurde:

  • Die Standardarbeitsbereichs-URL kann auch zum Abfragen des Endpunkts verwendet werden. Der Standard-Arbeitsbereichs-URL-Pfad bietet nicht die Vorteile der Routenoptimierung.

    https://<databricks-workspace>/serving-endpoints/<endpoint-name>/invocations

  • Routingoptimierte Endpunkte, die vor diesem Datum erstellt wurden, unterstützen weiterhin sowohl Aufruf-URLs: den routingoptimierten URL-Pfad und den Standard-Arbeitsbereich-URL-Pfad.

Wenn Sie einen routenoptimierten Endpunkt erstellen, wird die folgende routingoptimierte URL für den Endpunkt erstellt.

https://<unique-id>.<shard>.serving.azuredatabricks.net/<workspace-id>/serving-endpoints/<endpoint-name>/invocations

Sie können diese URL wie folgt abrufen:

Serving-Benutzeroberfläche

routingoptimierte Endpunkt-URL

REST-API

Verwenden Sie den GET /api/2.0/serving-endpoints/{name} API-Aufruf. Die URL ist im Antwortobjekt des Endpunkts vorhanden als endpoint_url. Dieses Feld wird nur ausgefüllt, wenn der Endpunkt routenoptimiert ist.

GET /api/2.0/serving-endpoints/my-endpoint
{
  "name": "my-endpoint"
}

Databricks SDK

Verwenden Sie den Serving Endpoints API get Aufruf. Die URL ist im Antwortobjekt des Endpunkts vorhanden als endpoint_url. Dieses Feld wird nur ausgefüllt, wenn der Endpunkt routenoptimiert ist.

from databricks.sdk import WorkspaceClient

workspace = WorkspaceClient()

workspace.serving_endpoints.get("my-endpoint")

Abrufen eines OAuth-Tokens und Abfragen des Endpunkts

Um Ihren routingoptimierten Endpunkt abzufragen, müssen Sie ein OAuth-Token verwenden. Databricks empfiehlt die verwendung von Dienstprinzipalen in Ihren Produktionsanwendungen, um OAuth-Token programmgesteuert abzurufen. In den folgenden Abschnitten werden empfohlene Anleitungen zum Abrufen eines OAuth-Tokens für Test- und Produktionsszenarien beschrieben.

Abrufen eines OAuth-Tokens mithilfe der Serving-Benutzeroberfläche

Die folgenden Schritte zeigen, wie Sie ein Token auf der Bereitstellungsbenutzeroberfläche abrufen. Diese Schritte werden für die Entwicklung und das Testen Ihres Endpunkts empfohlen.

Für den Produktionseinsatz, wie die Verwendung Ihres routingoptimierten Endpunkts in einer Anwendung, wird Ihr Token mithilfe eines Service Principals abgerufen. Unter " Programmgesteuertes Abrufen eines OAuth-Tokens " finden Sie empfohlene Anleitungen zum Abrufen Ihres OAuth-Tokens für Produktionsanwendungsfälle.

Über die Benutzeroberfläche für die Bereitstellung Ihres Arbeitsbereichs:

  1. Wählen Sie auf der Seite "Bereitstellungspunkte" Ihren routing-optimierten Endpunkt aus, um Endpunkt-Details anzuzeigen.
  2. Wählen Sie auf der Seite "Endpunktdetails" die Schaltfläche "Verwenden " aus.
  3. Wählen Sie die Registerkarte Token abfragen aus.
  4. Klicken Sie auf die Schaltfläche OAuth-Token abrufen. Dieses Token ist 1 Stunde lang gültig. Rufen Sie ein neues Token ab, wenn Ihr aktuelles Token abläuft.

Nachdem Sie das OAuth-Token abgerufen haben, fragen Sie Ihren Endpunkt mithilfe Der Endpunkt-URL und des OAuth-Tokens ab.

REST-API

Nachfolgend sehen Sie ein REST-API-Beispiel:


URL="<endpoint-url>"
OAUTH_TOKEN="<token>"

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  --data "@data.json" \
  "$URL"

Python

Es folgt ein Python-Beispiel:


import requests
import json

url = "<url>"
oauth_token = "<token>"

data = {
    "dataframe_split": {
        "columns": ["feature_1", "feature_2"],
        "data": [
            [0.12, 0.34],
            [0.56, 0.78],
            [0.90, 0.11]
        ]
    }
}

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {oauth_token}"
}

response = requests.post(url, headers=headers, json=data)

# Print the response
print("Status Code:", response.status_code)
print("Response Body:", response.text)

Programmgesteuertes Abrufen eines OAuth-Tokens

Für Produktionsszenarien empfiehlt Databricks, Dienstprinzipale einzurichten, um in Ihre Anwendung einzubetten, um OAuth-Token programmgesteuert abzurufen. Diese abgerufenen Token werden verwendet, um routingoptimierte Endpunkte abzufragen.

Führen Sie die Schritte unter Autorisieren des Dienstprinzipalzugriffs auf Azure Databricks mit OAuth durch Schritt 2 aus, um Ihren Dienstprinzipal zu erstellen, Berechtigungen zuzuweisen und einen OAuth-Geheimschlüssel für Ihren Dienstprinzipal zu erstellen. Nachdem Ihr Dienstprinzipal erstellt wurde, müssen Sie dem Dienstprinzipal mindestens die Abfrageberechtigung für den Endpunkt erteilen. Siehe Verwalten von Berechtigungen für ein Modell, das Endpunkt bedient.

Das Databricks Python SDK stellt eine API bereit, um einen routenoptimierten Endpunkt direkt abzufragen.

Hinweis

Das Databricks SDK ist auch in Go verfügbar, siehe Databricks SDK für Go.

Im nächsten Beispiel ist Folgendes erforderlich, um einen routingoptimierten Endpunkt mithilfe des Databricks SDK abzufragen:

  • Dienstendpunktname (das SDK ruft die richtige Endpunkt-URL basierend auf diesem Namen ab)
  • Client-ID des Dienstprinzipals
  • Geheimnis des Dienstprinzipals
  • Arbeitsbereichshostname
from databricks.sdk import WorkspaceClient
import databricks.sdk.core as client

endpoint_name = "<Serving-Endpoint-Name>" ## Insert the endpoint name here

# Initialize Databricks SDK
c = client.Config(
    host="<Workspace-Host>", ## For example, my-workspace.cloud.databricks.com
    client_id="<Client-Id>", ## Service principal ID
    client_secret="<Secret>"   ## Service principal secret
)
w = WorkspaceClient(
    config = c
)

response = w.serving_endpoints_data_plane.query(endpoint_name, dataframe_records = ....)

Manuelles Abrufen eines OAuth-Tokens

In Szenarien, in denen das Databricks SDK oder die Benutzeroberfläche zum Abrufen Ihres OAuth-Tokens nicht verwendet werden können, können Sie ein OAuth-Token manuell abrufen. Die Anleitung in diesem Abschnitt gilt hauptsächlich für Szenarien, in denen Benutzer über einen angepassten Client verfügen, den sie für die Abfrage des Endpunkts in der Produktion verwenden möchten.

Wenn Sie ein OAuth-Token manuell abrufen, müssen Sie in der Anforderung angeben authorization_details .

  • Konstruieren Sie das <token-endpoint-URL>, indem Sie https://<databricks-instance> durch die Arbeitsbereichs-URL Ihrer Databricks-Bereitstellung in https://<databricks-instance>/oidc/v1/token ersetzen. Beispiel: https://my-workspace.0.azuredatabricks.net/oidc/v1/token
  • Ersetzen Sie <client-id> durch die Client-ID des Dienstprinzipals, die auch als Anwendungs-ID bekannt ist.
  • Ersetzen Sie <client-secret> den von Ihnen erstellten OAuth-Schlüssel durch den OAuth-Schlüssel des Dienstprinzipals.
  • Ersetzen Sie durch <endpoint-id> die Endpunkt-ID des routingoptimierten Endpunkts. Dies ist die alphanumerische ID des Endpunkts, die Sie in der hostName Endpunkt-URL finden können. Wenn z. B. der Dienstendpunkt ist https://abcdefg.0.serving.azuredatabricks.net/9999999/serving-endpoints/test, lautet abcdefgdie Endpunkt-ID .
  • Ersetzen Sie <action> durch die Aktionsberechtigung, die dem Dienstprinzipal zugewiesen wurde. Die Aktion kann query_inference_endpoint oder manage_inference_endpoint sein.

REST-API

Nachfolgend sehen Sie ein REST-API-Beispiel:



export CLIENT_ID=<client-id>
export CLIENT_SECRET=<client-secret>
export ENDPOINT_ID=<endpoint-id>
export ACTION=<action>  # for example, 'query_inference_endpoint'

curl --request POST \
--url <token-endpoint-URL> \
--user "$CLIENT_ID:$CLIENT_SECRET" \
--data 'grant_type=client_credentials&scope=all-apis'
--data-urlencode 'authorization_details=[{"type":"workspace_permission","object_type":"serving-endpoints","object_path":"'"/serving-endpoints/$ENDPOINT_ID"'","actions": ["'"$ACTION"'"]}]'

Python

Es folgt ein Python-Beispiel:

import os
import requests

# Set your environment variables or replace them directly here
CLIENT_ID = os.getenv("CLIENT_ID")
CLIENT_SECRET = os.getenv("CLIENT_SECRET")
ENDPOINT_ID = os.getenv("ENDPOINT_ID")
ACTION = "query_inference_endpoint" # Can also be `manage_inference_endpoint`

# Token endpoint URL
TOKEN_URL = "<token-endpoint-URL>"

# Build the payload, note the creation of authorization_details
payload = { 'grant_type': 'client_credentials', 'scope': 'all-apis', 'authorization_details': f'''[{{"type":"workspace_permission","object_type":"serving-endpoints","object_path":"/serving-endpoints/{ENDPOINT_ID}","actions":["{ACTION}"]}}]''' }

# Make the POST request with basic auth
response = requests.post( TOKEN_URL, auth=(CLIENT_ID, CLIENT_SECRET), data=payload )

# Check the response
if response.ok:
  token_response = response.json()
  access_token = token_response.get("access_token")
  if access_token:
    print(f"Access Token: {access_token}")
  else:
    print("access_token not found in response.")
else: print(f"Failed to fetch token: {response.status_code} {response.text}")

Nachdem Sie das OAuth-Token abgerufen haben, fragen Sie Ihren Endpunkt mithilfe Der Endpunkt-URL und des OAuth-Tokens ab.

REST-API

Nachfolgend sehen Sie ein REST-API-Beispiel:


URL="<endpoint-url>"
OAUTH_TOKEN="<token>"

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  --data "@data.json" \
  "$URL"

Python

Es folgt ein Python-Beispiel:


import requests
import json

url = "<url>"
oauth_token = "<token>"

data = {
    "dataframe_split": {
        "columns": ["feature_1", "feature_2"],
        "data": [
            [0.12, 0.34],
            [0.56, 0.78],
            [0.90, 0.11]
        ]
    }
}

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {oauth_token}"
}

response = requests.post(url, headers=headers, json=data)

# Print the response
print("Status Code:", response.status_code)
print("Response Body:", response.text)