Skip to main content

cookbook-external-services

Connect Databricks Apps to external services using Unity Catalog HTTP connections and retrieve Databricks secrets. Use when the user needs to call external APIs (GitHub, Jira, Slack), set up MCP connections, or access secrets from Dash, Streamlit, or Reflex apps.

Quellinformationen

Repository
databricks-solutions/databricks-apps-cookbook
Letzte Quellaktivität
28. April 2026 um 11:17
Erkannte Sprache von SKILL.md
Englisch
Sterne
187
Forks
124

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
cookbook-external-services
description
Connect Databricks Apps to external services using Unity Catalog HTTP connections and retrieve Databricks secrets. Use when the user needs to call external APIs (GitHub, Jira, Slack), set up MCP connections, or access secrets from Dash, Streamlit, or Reflex apps.
# External Services Connect to external APIs using Unity Catalog [HTTP connections](https://docs.databricks.com/aws/en/query-federation/http) and retrieve [Databricks secrets](https://docs.databricks.com/en/security/secrets/index.html) for secure credential management. ## Recipes ### External HTTP connections Use UC-managed HTTP connections for governed access to external services (GitHub, Jira, Slack, or any MCP/non-MCP server). #### On-behalf-of-user (OAuth U2M) Uses the end user's identity to call the external service: **Dash:** ```python from databricks.sdk import WorkspaceClient from databricks.sdk.service.serving import ExternalFunctionRequestHttpMethod from flask import request token = request.headers.get("x-forwarded-access-token") w = WorkspaceClient(token=token, auth_type="pat") response = w.serving_endpoints.http_request( conn="github_u2m", method=ExternalFunctionRequestHttpMethod.GET, path="/user", headers={"Accept": "application/vnd.github+json"}, ) print(response.json()) ``` **Streamlit:** ```python import streamlit as st from databricks.sdk import WorkspaceClient from databricks.sdk.service.serving import ExternalFunctionRequestHttpMethod token = st.context.headers.get("X-Forwarded-Access-Token") w = WorkspaceClient(token=token, auth_type="pat") response = w.serving_endpoints.http_request( conn="github_u2m", method=ExternalFunctionRequestHttpMethod.GET, path="/user", headers={"Accept": "application/vnd.github+json"}, ) st.json(response.json()) ``` **Reflex:** ```python import reflex as rx from databricks.sdk import WorkspaceClient from databricks.sdk.service.serving import ExternalFunctionRequestHttpMethod class ExternalConnectionsState(rx.State): response_data: str = "" @rx.event async def run(self): headers = self.router.headers token = getattr(headers, "x_forwarded_access_token", "") w = WorkspaceClient(token=token, auth_type="pat") response = w.serving_endpoints.http_request( conn="github_u2m", method=ExternalFunctionRequestHttpMethod.GET, path="/user", headers={"Accept": "application/vnd.github+json"}, ) self.response_data = str(response.json()) ``` #### Bearer token (service principal) Uses the app's service principal identity: ```python from databricks.sdk import WorkspaceClient from databricks.sdk.service.serving import ExternalFunctionRequestHttpMethod w = WorkspaceClient() response = w.serving_endpoints.http_request( conn="github_connection", method=ExternalFunctionRequestHttpMethod.GET, path="/traffic/views", headers={"Accept": "application/vnd.github+json"}, ) ``` ### Retrieve a secret Access [Databricks secrets](https://docs.databricks.com/en/security/secrets/index.html) for API keys and credentials: ```python import base64 from databricks.sdk import WorkspaceClient w = WorkspaceClient() def get_secret(scope: str, key: str) -> str: secret_response = w.secrets.get_secret(scope=scope, key=key) return base64.b64decode(secret_response.value).decode("utf-8") api_key = get_secret("my_scope", "api_key") ``` ## Resources | Recipe | Resources | |--------|-----------| | HTTP connections | [Unity Catalog HTTP Connection](https://docs.databricks.com/aws/en/query-federation/http) | | Secrets | [Secret scope](https://docs.databricks.com/aws/en/security/secrets/) | ## Permissions | Recipe | Permissions | |--------|-----------| | HTTP connections | `USE CONNECTION` on the HTTP Connection | | HTTP connections (OBO) | Additionally configure [User authorization](https://docs.databricks.com/aws/en/dev-tools/databricks-apps/auth#user-authorization) scopes | | Secrets | `CAN READ` on the secret scope | ## Dependencies ``` databricks-sdk ``` Plus your framework package (`dash`, `streamlit`, or `reflex`). ## Common Pitfalls - OBO tokens (`x-forwarded-access-token`) are only available when deployed to Databricks Apps, not locally - Secret values are base64-encoded; always decode with `base64.b64decode()` - For MCP servers, initialize a session first to get a `mcp-session-id` header for subsequent requests
Auf GitHub ansehen