Databricks Appsの開発

プレビュー

Databricks Apps は パブリック プレビュー段階です。

注:

Databricks ワークスペースでアプリをデプロイして実行するには、ファイアウォールがドメイン *.databricksapps.comをブロックしていないことを確認する必要があります。

AIこの記事では、UI でアプリを作成および編集する方法、Databricks SQLウェアハウス、シークレット、 ジョブなどの プラットフォーム機能の使用方法、アプリ開発のベストDatabricks プラクティス、サポートされているフレームワークを使用してアプリを開発するための重要な情報など、データ アプリと アプリの作成について詳しく説明します。

Databricks Apps UI でアプリを作成するにはどうすればよいですか?

注:

  • Databricks アプリに割り当てられた名前は、アプリの作成後に変更することはできず、Databricks ワークスペースにアクセスできるすべてのユーザーは、ワークスペース内のすべての Databricks アプリの名前とデプロイ履歴を確認できます。 さらに、アプリ名はシステムテーブルに書き込まれるレコードに含まれます。 この可視性のため、Databricks アプリに名前を付けるときに機密情報を使用しないでください。

  • Databricks アプリの名前はデプロイされたアプリへのリンクを作成するために使用されるため、名前には URL で有効な文字のみを使用する必要があります。

  1. サイドバーで「新しいアイコン 新規 」をクリックし 、メニューから 「アプリ 」を選択します。

  2. 完全な事前構築済みのサンプル アプリから開始することも、ソース コードと成果物を使用することもできます。

    • サンプル アプリから開始するには、[ テンプレート] を選択し、優先するフレームワークのタブをクリックして、アプリの一覧から選択します。

    • コードを使用してアプリを作成するには、[ カスタム] を選択します。

  3. 次へ」をクリックします。

  4. [アプリ名] フィールドに、アプリの名前を入力します。

  5. (オプション)アプリの説明を入力します。

  6. [テンプレート] を選択した場合は、必要なリソースを構成し、[アプリの作成とデプロイ] をクリックします。「 Databricks プラットフォーム機能を Databricks アプリに割り当てる」を参照してください。 [カスタム] を選択した場合は、[アプリを作成] をクリックします。

[作成] をクリックすると、アプリの詳細ページが表示され、アプリの作成とデプロイの状態が表示されます。詳細ページには、ローカル コードを Databricks ワークスペースに同期するなど、アプリのローカル開発用のステップ も含まれています。

ワークスペースからローカル開発環境にアプリの成果物をコピーするには、Databricks CLI を使用できます。

workspace export-dir <workspace-path> <target-path>

以下のように置き換えてください。

  • <workspace-path> を、アプリのコードと成果物を含むワークスペース ファイル ディレクトリへのパスに置き換えます。

  • <target-path> を、ファイルのコピー先となるローカル環境内のパスに置き換えます。

Databricks プラットフォーム機能を Databricks アプリに割り当てる

注:

Databricks SQLを使用するには、サービスプリンシパルはSQLウェアハウスとクエリによってアクセスされるテーブルへのアクセスが必要です。

DatabricksDatabricks SQL、Databricks Jobs、Mosaic AI Model Serving 、Databricks シークレットなどの プラットフォームの機能を使用するには、これらの機能をリソースとしてアプリに追加します。リソースは、アプリ を作成 または編集するときに追加できます。

  1. [新しいアプリの作成] または [アプリの編集] カードで、[詳細設定] > [+ リソースの追加] をクリックし、リソースの種類を選択します。

    UI での SQLウェアハウスのアプリ リソースの追加
  2. リソースのタイプに応じて、リソースの設定に必要なフィールド ( リソースキー フィールドなど) を入力します。 このキーは、後でリソースを参照するために使用されます。

  3. [保存]をクリックします。

  4. アプリの「app.yaml」にリソースのエントリを追加します 設定ファイル。 この例では、 SQLウェアハウス リソース キーに次のようなエントリを使用します。 これは実際の値ではなくパラメーター値のソースを参照しているため、valueの代わりに valueFrom を使用します。

    env:
      - name: "DATABRICKS_WAREHOUSE_ID"
        valueFrom: "sql-warehouse"
    
  5. アプリ コードでリソースを参照するには、 name フィールドの値 (この例ではDATABRICKS_WAREHOUSE_ID ) を使用して、構成されたキー値を参照します。

    import os
    
    os.getenv('DATABRICKS_WAREHOUSE_ID')
    

SQLウェアハウス エンドポイントやモデル サービング エンドポイントなど、アプリでリソースを使用するその他の例については、アプリ作成時のテンプレートの例とベスト プラクティス: シークレットを使用してDatabricksアプリの機密情報を格納する方法をご覧ください。

Databricks アプリのアクセス許可を構成する

アプリの権限を管理するには、 CAN MANAGE または IS OWNER の権限が必要です。

  1. アプリの詳細ページで、[ 権限] をクリックします。

  2. [権限設定] で、[ユーザー、グループ、またはサービスプリンシパルの選択] ドロップダウンメニューを選択し、ユーザー、グループ、サービスプリンシパル、またはすべてのワークスペースユーザーを選択します。

  3. 権限のドロップダウンメニューから権限を選択します。

  4. [追加] をクリックします。

  5. [保存]をクリックします。

Databricks アプリの状態の維持

アプリがメモリに保持している状態は、再起動すると失われます。 アプリで再起動間で状態を維持する必要がある場合は、状態を外部に保存します。 たとえば、アプリでは Databricks SQLワークスペース ファイルまたは Unity Catalog ボリューム を使用して状態を保持できます。

Databricks アプリからのログ記録

注:

Databricks Apps UI またはアプリの URL でログを表示するには、アプリで stdoutstderrにログを記録する必要があります。

アプリの標準出力と標準エラーを表示するには、アプリの詳細ページで [ログ ] タブをクリックします。

<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 アプリのリバース プロキシからアプリに渡されます。

header

説明

X-Forwarded-Host

クライアントによって要求された元のホストまたはドメイン。

X-Forwarded-Preferred-Username

IdP によって提供されるユーザー名。

X-Forwarded-User

IdP によって提供されるユーザー識別子。

X-Forwarded-Email

IdPが提供するユーザーEメール。

X-Real-Ip

元の要求を行ったクライアントの IP アドレス。

X-Request-Id

要求の UUID。

Databricks Apps ではどのようなフレームワークがサポートされていますか?

ほとんどの Python フレームワークを使用してアプリを開発できます。 Dash、Gradio、Streamlitなどの特定のフレームワークの使用例を表示するには、UIで新しいアプリを作成するときにテンプレートアプリのライブラリから選択します。 「Databricks Apps UI でアプリを作成するにはどうすればよいですか?」を参照してください。

Databricks Apps ランタイム環境で設定される Streamlit 固有の変数については、Stream の デフォルト 環境変数 を参照してください。

ベスト プラクティス: シークレットを使用して Databricks アプリの機密情報を保存する

Databricks では、認証資格情報などの機密情報を格納するためにシークレットを使用することをお勧めします。 シークレットの使用の詳細については、「 シークレット」を参照してください

アプリでシークレットを使用するには:

  1. シークレットを アプリ リソースとして構成します。

    UI でのシークレットをアプリ リソースとして追加する
  2. シークレットのエントリをアプリの app.yaml 設定ファイルに追加します。

    env:
      - name: "API_TOKEN"
        valueFrom: "api-token-value"
    
  3. アプリ コードでシークレットを参照するには、 name フィールドの値 (この例ではAPI_TOKEN ) を使用して、構成されたキー値を参照します。

token = os.getenv('API_TOKEN')

ベスト プラクティス: Databricks の機能を使用してデータ処理を行う

Databricks Apps コンピュートは、UI を提供するために設計されています。 アプリが複数のユーザーを効率的にサポートできるようにするには、Databricks の機能を使用して、単純なデータ処理以外のことを行う必要があります。 たとえば、クエリ処理とデータセットの保存には a Databricks SQL 、データ処理には Databricks ジョブ、 AI モデルのクエリにはモデルサービングを使用します。

ベストプラクティス:安全なコーディングのベストプラクティスに従う

Databricks では、アプリを開発するときに、SQL インジェクション攻撃を回避するためのクエリのパラメーター化など、安全なコーディング プラクティスに従うことをお勧めします。 ステートメント実行 API を参照してください。

Databricks アプリの実装に関する重要なガイドライン

  • Databricks アプリはSIGTERMの 15 秒後にSIGKILLシグナルを送信するため、アプリはSIGTERMシグナルを受信してから 15 秒以内に正常にシャットダウンする必要があります。アプリが 15 秒経過しても終了しない場合は、 SIGKILL シグナルが送信され、プロセスとすべての子プロセスが終了します。

  • Databricks アプリは特権のないシステム ユーザーとして実行されるため、ルート ユーザーのアクセス許可を必要とする操作など、特権セキュリティ コンテキストで実行する必要がある操作は実行できません。

  • リクエストはリバースプロキシから転送されるため、アプリはリクエストのオリジンに依存してはなりません。 Databricks アプリ環境では、サポートされているフレームワークに必要な構成パラメーターが設定されます。

  • Databricks アプリ フレームワークはトランスポート層セキュリティ (TLS) 接続を管理するため、アプリで TLS 接続やハンドシェイク操作を実行してはなりません。

  • アプリは、HTTP/2 クリアテキスト (H2C) 形式の要求を処理するように実装する必要があります。

  • Databricks アプリは、 0.0.0.0 で HTTP サーバーをホストし、 DATABRICKS_APP_PORT 環境変数で指定されたポート番号を使用する必要があります。 環境変数を参照してください。