Databricks アプリの開発
重要
Databricks Apps は Public Preview 段階です。
Note
Databricks ワークスペースにアプリをデプロイして実行するには、ファイアウォールがドメインの *.databricksapps.com
をブロックしないようにする必要があります。
この記事では、Databricks Apps を使用してデータと AI アプリを作成する方法について詳しく説明します。これには、UI でアプリを作成および編集する方法、SQL ウェアハウス、シークレット、Databricks ジョブなどの Databricks プラットフォーム機能の使用方法、アプリ開発のベスト プラクティス、サポートされているフレームワークを使用してアプリを開発するための重要な情報が含まれます。
Databricks Apps UI でアプリを作成操作方法。
サイドバーで [ New をクリックし、メニューから App を選択します。
事前に構築された完全なサンプル アプリから始めるか、ソース コードと成果物を使用できます。
- サンプル アプリから開始するには、 Template を選択し、目的のフレームワークのタブをクリックして、アプリの一覧から選択します。
- コードを使用してアプリを作成するには、 Custom を選択します。
次へ をクリックします。
[ App name フィールドにアプリの名前を入力し、必要に応じて説明を入力します。
Note
- アプリの作成後に Databricks アプリに割り当てられた名前は変更できません。また、Azure Databricks ワークスペースにアクセスできるユーザーは、ワークスペース内のすべての Databricks アプリの名前とデプロイ履歴を確認できます。 さらに、アプリ名は、システム テーブルに書き込まれたレコードに含まれます。 この可視性のため、Databricks アプリに名前を付けるときに機密情報を含めないようにしてください。
- この名前は、アプリをホストする Azure Databricks ワークスペースで一意である必要があり、小文字、数字、ハイフンのみを含む必要があります。
Custom を選択した場合は、[アプリの作成] をクリック。 Templateを選択した場合は、必要なリソースを構成し、[アプリの作成とデプロイ]をクリック。 Databricks アプリへの Databricks プラットフォーム機能の割り当てを参照してください。
[アプリの作成とデプロイ] クリックするか、アプリの作成 または 作成をクリックすると、アプリの詳細ページが表示されます。 Template を選択した場合、Databricks Apps によってアプリが作成され、テンプレートのコード例やアプリに必要な構成など、アプリがデプロイされます。 アプリの詳細ページには、次の情報が表示されます。
- アプリの作成とデプロイの状態。
- アプリ成果物をローカル環境にコピーし、ローカルの変更を Azure Databricks ワークスペースに同期するなど、アプリの開発をローカルで続行するために使用できる手順。
Custom を選択した場合、Databricks Apps によってアプリが作成されます。 アプリのコードと成果物を追加する必要があるため、アプリを別の手順としてデプロイする必要があります。 アプリの詳細ページには、次の情報が表示されます。
- アプリの作成の状態。
- ローカル開発環境から Azure Databricks ワークスペースにアプリのコードと成果物を同期し、アプリをデプロイするために使用できる手順。
ローカル開発環境を設定する方法、アプリのコードと構成をローカルで作成または更新する方法、アプリを同期して Azure Databricks ワークスペースにデプロイする方法については、「 Databricks Apps の概要を参照してください。
Templateを選択し、ワークスペースからローカル開発環境にアプリ成果物をコピーする場合は、Databricks CLI を使用できます。
databricks workspace export-dir <workspace-path> <target-path>
置換前のコード:
<workspace-path>
アプリ コードと成果物を含むワークスペース ファイル ディレクトリへのパスを指定します。<target-path>
ファイルのコピー先となるローカル環境のパスを指定します。
Databricks プラットフォーム機能を Databricks アプリに割り当てる
Note
Databricks SQL を使用するには、サービス プリンシパルが SQL ウェアハウスとクエリによってアクセスされるすべてのテーブルにアクセスする必要があります。
Databricks SQL、Databricks ジョブ、モザイク AI モデル サービス、Databricks シークレットなどの Databricks プラットフォームの機能を使用するには、これらの機能をリソースとしてアプリに追加します。 アプリの作成編集をするときにリソースを追加できます。
[新しいアプリの作成またはアプリの編集] カードで、[Advanced 設定>+ リソースの追加] をクリックし、リソースの種類を選択します。
リソースの種類に応じて、リソースの構成に必要なフィールド ( Resource キー フィールドを含む) に入力します。 このキーは、後でリソースを参照するために使用されます。
[保存] をクリックします。
SQL Warehouse リソース キーを使用して、
app.yaml
構成ファイルにリソースのエントリを追加します。 これは、実際の値ではなくパラメーター値のソースを参照しているため、value
の代わりにvalueFrom
を使用します。env: - name: "DATABRICKS_WAREHOUSE_ID" valueFrom: "sql-warehouse"
アプリ コードでリソースを参照するには、
name
フィールドの値 (この例のDATABRICKS_WAREHOUSE_ID
) を使用して、構成されたキー値を参照します。import os os.getenv('DATABRICKS_WAREHOUSE_ID')
SQL ウェアハウスやモデル サービス エンドポイントなど、アプリでリソースを使用する例については、アプリを作成 テンプレートの例を参照してください ベスト プラクティス: シークレットを使用して Databricks アプリの機密情報を格納する。
Databricks アプリの詳細を表示する
Databricks アプリの詳細ページを表示するには:
- サイドバーにある [コンピューティング] をクリックします。
- Apps タブに移動します。
- [ Name 列で、アプリ名をクリックします。
- Overview タブに、アプリの状態、デプロイ場所、関連するリソースなど、アプリの詳細が表示されます。
- アプリのデプロイ履歴にアクセスするには、 Deployments タブに移動します。
- アプリのログを表示するには、 Logs タブに移動します。
- 環境変数やインストールされているパッケージなど、アプリのランタイム環境を表示するには、 Environment タブに移動します。
Databricks アプリのアクセス許可を構成する
アプリのアクセス許可を管理するには、 CAN MANAGE
または IS OWNER
アクセス許可が必要です。
- アプリの詳細ページで、 Permissions をクリックします。
- Permissions 設定で、ユーザー、グループ、またはサービス プリンシパルの選択... ドロップダウン メニューを選択し、ユーザー、グループ、サービス プリンシパル、またはすべてのワークスペース ユーザーを選択します。
- [アクセス許可] ドロップダウン メニューからアクセス許可を選択します。
- [追加] をクリックし保存] をクリック。
Databricks アプリの状態の維持
アプリがメモリ内で保持する状態は、再起動すると失われます。 アプリで再起動の間に状態を維持する必要がある場合は、状態を外部に格納します。 たとえば、アプリでは、 Databricks SQL、 workspace ファイル、または Unity カタログ ボリューム を使用して状態を保持できます。
Databricks アプリからのログ記録
Note
Databricks Apps UI またはアプリの URL でログを表示するには、アプリが stdout
と stderr
にログを記録する必要があります。
アプリの標準出力と標準エラーを表示するには、アプリの詳細ページで [ Logs タブをクリックします。 Databricks アプリの詳細を確認するを参照してください。
<appurl>/logz
リンクで標準出力と標準エラー ログを表示することもできます。 たとえば、アプリの URL が https://my-app-1234567890.my-instance.databricksapps.com
されている場合は、 https://my-app-1234567890.my-instance.databricksapps.com/logz
でログを表示できます。 アプリの URL を見つけるには、アプリの詳細ページに移動します。
Databricks アプリのライブラリ依存関係の指定
アプリで、デプロイと共に自動的にインストールされるパッケージ以外の Python ライブラリが必要な場合は、 requirements.txt
ファイルを使用してそれらのライブラリを定義します。 requirements.txt
ファイル内のパッケージが自動的にインストールされたパッケージの 1 つを複製する場合、requirements.txt
のバージョンによって、自動的にインストールされるパッケージがオーバーライドされます。
アプリのデプロイの一部としてインストールされるパッケージとバージョンの一覧については、「 インストールされている Python ライブラリを参照してください。
Databricks アプリに渡される HTTP ヘッダーは何ですか?
次の X-Forwarded-*
ヘッダーは、Databricks Apps リバース プロキシからアプリに渡されます。
Header | 説明 |
---|---|
X-Forwarded-Host |
クライアントによって要求された元のホストまたはドメイン。 |
X-Forwarded-Preferred-Username |
IdP によって提供されるユーザー名。 |
X-Forwarded-User |
IdP によって提供されるユーザー識別子。 |
X-Forwarded-Email |
IdP によって提供されるユーザー電子メール。 |
X-Real-Ip |
元の要求を行ったクライアントの IP アドレス。 |
X-Request-Id |
要求の UUID。 |
Databricks Apps でサポートされているフレームワークは何ですか?
ほとんどの Python フレームワークを使用してアプリを開発できます。 Dash、Gradio、Streamlit などの特定のフレームワークの使用例を確認するには、UI で新しいアプリを作成するときにテンプレート アプリのライブラリから選択します。 Databricks Apps UI でアプリ操作方法作成する方法に関するを参照してください。
Databricks Apps ランタイム環境で設定される Streamlit 固有の変数については、「Streamlit の既定の環境変数を参照してください。
ベスト プラクティス: シークレットを使用して Databricks アプリの機密情報を格納する
Databricks では、シークレットを使用して、認証資格情報などの機密情報を格納することをお勧めします。 シークレットの使用の詳細については、「 Manage シークレット」を参照してください。
アプリでシークレットを使用するには:
シークレットを app リソースとして構成。
アプリの
app.yaml
構成ファイルにシークレットのエントリを追加します。env: - name: "API_TOKEN" valueFrom: "api-token-value"
アプリ コードでシークレットを参照するには、
name
フィールドの値 (この例のAPI_TOKEN
) を使用して、構成されたキー値を参照します。
token = os.getenv('API_TOKEN')
ベスト プラクティス: データ処理に Azure Databricks 機能を使用する
Databricks Apps コンピューティングは、UI を提供するために設計されています。 アプリで複数のユーザーを効率的にサポートできるようにするには、Databricks の機能を使用して、単純なデータ処理以外の処理を実行する必要があります。 たとえば、データセットのクエリ処理と格納には Databricks SQL、データ処理用の Databricks ジョブ、AI モデルのクエリに使用するモデルを使用します。
ベスト プラクティス: 安全なコーディングのベスト プラクティスに従う
Databricks では、SQL インジェクション攻撃を回避するためのクエリのパラメーター化など、アプリの開発時にセキュリティで保護されたコーディングプラクティスに従うことをお勧めします。 ステートメント実行 APIを参照してください。
Databricks アプリを実装するための重要なガイドライン
- Databricks Apps は、
SIGTERM
の 15 秒後にSIGKILL
シグナルを送信するため、アプリはSIGTERM
信号を受信してから 15 秒以下で正常にシャットダウンする必要があります。 アプリが 15 秒後に終了しなかった場合は、プロセスとすべての子プロセスを終了するためにSIGKILL
シグナルが送信されます。 - Databricks Apps は特権のないシステム ユーザーとして実行されるため、ルート ユーザーのアクセス許可を必要とする操作など、特権セキュリティ コンテキストで実行する必要がある操作を実行することはできません。
- 要求はリバース プロキシから転送されるため、アプリは要求の配信元に依存しないようにする必要があります。 Databricks Apps 環境では、サポートされているフレームワークに必要な構成パラメーターを設定します。
- Databricks アプリ フレームワークはトランスポート層セキュリティ (TLS) 接続を管理するため、アプリは TLS 接続またはハンドシェイク操作を実行してはなりません。
- HTTP/2 クリア テキスト (H2C) 形式で要求を処理するには、アプリを実装する必要があります。
- Databricks アプリは、
0.0.0.0
で HTTP サーバーをホストし、DATABRICKS_APP_PORT
環境変数で指定されたポート番号を使用する必要があります。 環境変数を参照してください。