このページでは、 Databricks CLI を認証し、Azure Databricks への API 呼び出しを行うために Azure DevOps パイプラインを構成する方法について説明します。
開始する前に
Azure DevOps 認証を構成する前に、次の手順を実行します。
Azure でサービス プリンシパルを作成し、適切なアクセス許可を持つ Azure Databricks ワークスペースに追加します。 この手順がないと、パイプラインが正しく構成されている場合でも認証は失敗します。
Microsoft Entra ID マネージド サービス プリンシパルの場合は、Azure で Microsoft Entra ID アプリケーションを作成し、ワークスペースに追加します。 サービス プリンシパルとサービス プリンシパルの管理に関するページを参照してください。
パイプラインにステップを追加して、エージェントに Databricks CLI をインストールします。
- script: | curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh displayName: 'Install Databricks CLI'ヒント
CLI のインストールを最新バージョンではなく特定のバージョンにピン留めするには、
mainをバージョン タグ (v0.224.0など) に置き換えます。
認証方法を選択する
Azure DevOps は、 サービス接続を介して認証を管理します。 Azure DevOps ポータルの プロジェクト設定>Service 接続でアクセスします。
Databricks CLI を認証するには、次のいずれかの方法で Azure Resource Manager サービス接続の種類を使用します。
| メソッド | Description | 最適な用途 |
|---|---|---|
| ワークロード ID フェデレーション (推奨) | OpenID Connect (OIDC) を使用してトークンを取得します。 サービス プリンシパルで、Azure DevOps で生成された発行者識別子とサブジェクト識別子を構成する必要があります。 | セキュリティで保護されたシークレットなしの認証 |
| クライアント シークレット付きのサービス プリンシパル | クライアント ID とシークレットを使用して、有効期間の短い OAuth トークンを生成します。 サービス プリンシパルのシークレットを生成する必要があります。 | タスク間で共有資格情報を必要とするシナリオ |
| マネージド ID | パイプラインを実行している VM またはコンテナーに割り当てられた ID を使用します。 セルフホステッド ランナーにのみ適用されます。 Azure の ドキュメントを参照してください。 | ID が割り当てられたセルフホステッド ランナー |
注
可能な場合は、ワークロード ID フェデレーションを使用します。 シークレットに依存しないため、他の方法よりも安全です。 手動で構成しなくても、 AzureCLI@2 タスクで自動的に動作します。
ワークロード ID フェデレーションを使用するサービス接続の作成を参照してください。
Azure CLI 認証を構成する
Databricks CLI では、既定で認証に Azure CLI が使用されます。 すべての Databricks CLI コマンドは、 AzureCLI@2 タスク内で実行する必要があります。つまり、各タスクは個別に認証されます。 これにより、待機時間が発生しますが、最小限の構成が必要です。
- task: AzureCLI@2
inputs:
azureSubscription: <your-service-connection-name>
useGlobalConfig: true
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
databricks bundle deploy
次の値を更新します。
-
azureSubscription: Azure Resource Manager サービス接続の名前。 -
useGlobalConfig:必須。databricks bundleコマンドによって生成されたサブプロセスが、認証されたセッションにアクセスできることを確認します。 -
DATABRICKS_HOST: バンドル構成または前の手順でまだ定義されていない場合は、これを設定します。
クライアント シークレット認証を構成する
複数のタスク間で資格情報を共有する必要がある場合、または Azure CLI 認証で待機時間が長すぎる場合は、クライアント シークレットを使用します。
この方法では、1 つのタスクでサービス接続から認証の詳細を取得し、後続のタスクのジョブ スコープ環境変数としてエクスポートします。
- task: AzureCLI@2
inputs:
azureSubscription: <your-service-connection-name>
addSpnToEnvironment: true
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
echo "##vso[task.setvariable variable=ARM_CLIENT_ID]${servicePrincipalId}"
echo "##vso[task.setvariable variable=ARM_CLIENT_SECRET]${servicePrincipalKey}"
echo "##vso[task.setvariable variable=ARM_TENANT_ID]${tenantId}"
- script: |
export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
databricks bundle deploy
手記:
-
addSpnToEnvironmentキーは、servicePrincipalId、servicePrincipalKey、およびtenantIdをインライン スクリプトに公開します。 -
##vsoコマンドは、タスク スコープ変数を、Databricks CLI が自動的に認識するジョブ スコープ変数に昇格させます。 - 既定では、以降のすべての手順で
ARM_CLIENT_SECRETにアクセスできます。 アクセスを制限するには、変数定義にissecret=trueを追加し、それを必要とする各ステップに明示的に渡します。 この設定に関係なく、シークレットはログでマスクされます。
完全な例については、「 Git フォルダーにアクセスするための Microsoft Entra サービス プリンシパルの承認」を参照してください。
マネージド ID 認証を構成する
マネージド ID 認証は、パイプライン タスクではなく、VM またはコンテナーの構成に依存します。 このメソッドでは、 AzureCLI@2 タスクは必要ありません。
- script: |
export DATABRICKS_AZURE_RESOURCE_ID=/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Databricks/workspaces/<workspace-name>
export ARM_CLIENT_ID=<managed-identity-client-id>
export ARM_USE_MSI=true
export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
databricks current-user me
次の値を更新します。
-
DATABRICKS_AZURE_RESOURCE_ID: この値は、Azure portal のワークスペースの [プロパティ ] で見つけます。 -
ARM_CLIENT_ID: マネージド ID のクライアント ID。 -
DATABRICKS_HOST: 省略可能。 設定されていない場合、値はDATABRICKS_AZURE_RESOURCE_IDから推論されます。
マネージド ID には、Azure Databricks ワークスペースの 共同作成者 ロールが必要です。