メインコンテンツまでスキップ

API を使用して外部アプリを Lakebase に接続する

備考

Lakebase オートスケールは次のリージョンで利用できます: us-east-1us-east-2us-west-2eu-central-1eu-west-1ap-south-1ap-southeast-1ap-southeast-2

Lakebase オートスケールは、オートスケール コンピュート、ゼロへのスケール、分岐、即時復元を備えた Lakebase の最新バージョンです。 Lakebase プロビジョニングとの機能の比較については、 「バージョン間の選択」を参照してください。

このガイドでは、直接REST API呼び出しを使用して外部アプリケーションを Lakebase オートスケールに接続する方法を説明します。 Databricks SDKがあなたの言語で利用できない場合(Node.js、Ruby、PHP、Elixir、Rust など)。

ご使用の言語で SDK がサポートされている場合 (Python、Java、または Go)、代わりにSDK を使用して外部アプリを Lakebase に接続することで、トークン管理を簡素化できます。

OAuth トークンのローテーションを使用してデータベース資格情報を取得するには、2 つの API 呼び出しを行います。curl と Node.js の例が提供されています。

注記

2 段階認証: このアプローチでは、データベース資格情報ごとに 2 つのAPI呼び出しが必要です。(1) サービス プリンシパル シークレットをワークスペースOAuthトークンに交換し、(2) OAuthトークンをデータベース資格情報に交換します。 両方のトークンは 60 分後に期限切れになります。SDK はステップ 1 を自動的に処理します。

前提条件

SDKアプローチと同じ設定 (サービスプリンシパル、Postgres ロール、接続の詳細) が必要です。

前提条件

重要な詳細

詳細情報

サービスプリンシパル

最大有効期間が 730 日 のOAuthシークレット。 ワークスペースへのアクセス を有効にします。 Postgres ロールと環境変数の クライアント ID (UUID) をメモします。

サービスプリンシパルを作成

Postgresの役割

Lakebase SQL エディターで OAuth ロールを作成します: databricks_create_role('{client-id}', 'SERVICE_PRINCIPAL') 、CONNECT、USAGE、SELECT/INSERT/UPDATE/DELETE を付与します。ステップ 1 のクライアント ID を使用します。

Postgresロールを作成する

接続の詳細

Lakebase Console Connect から: エンドポイント名 ( projects/.../branches/.../endpoints/... )、 ホストデータベース (通常はdatabricks_postgres )。

接続の詳細を取得する

仕組み

手動 API アプローチでは、2 つのトークン交換が必要です。

手動API交換フロー

トークンの有効期間:

  • サービスプリンシパルシークレット: 最大 730 日間 (作成時に設定)
  • ワークスペースOAuthオフライン: 60 分 (ステップ 1)
  • データベース認証情報: 60 分 (ステップ 2)

トークンのスコープ: データベース資格情報はワークスペース スコープです。endpoint問題が必要である間、返されたノートは、サービスプリンシパルが権限を持つワークスペース内の任意のデータベースまたはプロジェクトにアクセスできます。

環境変数を設定する

アプリケーションを実行する前に、次の環境変数を設定します。

Bash
# Databricks workspace authentication
export DATABRICKS_HOST="https://your-workspace.databricks.com"
export DATABRICKS_CLIENT_ID="<service-principal-client-id>"
export DATABRICKS_CLIENT_SECRET="<your-oauth-secret>"

# Lakebase connection details (from prerequisites)
export ENDPOINT_NAME="projects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>"
export PGHOST="<endpoint-id>.database.<region>.databricks.com"
export PGDATABASE="databricks_postgres"
export PGUSER="<service-principal-client-id>" # Same UUID as client ID
export PGPORT="5432"

接続コードを追加する

この例では、生の API 呼び出しを示します。本番運用アプリケーションの場合は、内部キャッシュと更新ロジックを実装します。

Bash
# Step 1: Get workspace OAuth token
OAUTH_TOKEN=$(curl -s -X POST "${DATABRICKS_HOST}/oidc/v1/token" \
-u "${DATABRICKS_CLIENT_ID}:${DATABRICKS_CLIENT_SECRET}" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&scope=all-apis" \
| jq -r '.access_token')

echo "Got workspace OAuth token (60-min lifetime)"

# Step 2: Get database credential
PG_TOKEN=$(curl -s -X POST "${DATABRICKS_HOST}/api/2.0/postgres/credentials" \
-H "Authorization: Bearer ${OAUTH_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"endpoint\": \"${ENDPOINT_NAME}\"}" \
| jq -r '.token')

echo "Got database credential (60-min lifetime)"

# Step 3: Connect to Postgres
PGPASSWORD="${PG_TOKEN}" psql \
-h "${PGHOST}" \
-p "${PGPORT}" \
-U "${PGUSER}" \
-d "${PGDATABASE}" \
-c "SELECT current_user, current_database()"

実行して接続を確認する

環境変数がロードされた状態で bash スクリプトを実行します。

Bash
export $(cat .env | xargs)
bash connect.sh

期待される出力:

Got workspace OAuth token (60-min lifetime)
Got database credential (60-min lifetime)
current_user | current_database
-----------------------+------------------
c00f575e-d706-4f6b... | databricks_postgres

current_userサービスプリンシパル クライアント ID と一致する場合、 OAuth正しく機能しています。

注: Lakebase オートスケールはゼロからコンピュートを開始するため、アイドル後の最初の接続には時間がかかる場合があります。

トラブルシューティング

エラー

修正

「invalid_client」または「クライアント認証がありません」

DATABRICKS_CLIENT_IDDATABRICKS_CLIENT_SECRETが正しいことを確認してください。基本認証(base64 エンコード)を使用します。

「ワークスペースへのアクセス権限のないユーザーに対しては API が無効になっています」

サービスプリンシパルの「ワークスペースアクセス」を有効にします(前提条件)。

"INVALID_PARAMETER_VALUE" / "フィールド 'endpoint' は必須です"

endpoint projects/<id>/branches/<id>/endpoints/<id>の形式でステップ 2 POST 本文に含まれていることを確認してください。

「ロールが存在しません」または認証に失敗しました

SQL 経由で OAuth ロールを作成します (前提条件)。

「接続が拒否されました」またはタイムアウト

スケール トゥ ゼロ後の最初の接続には時間がかかる場合があります。再試行ロジックを実装します。

トークンの有効期限が切れました / 「パスワード認証に失敗しました」

ワークスペース トークンとデータベース トークンはどちらも 60 分後に期限切れになります。有効期限チェック付きのキャッシュを実装します。