こちらのもくもく会で実施いただく流れを説明します。
イントロダクション
データアプリの構築と本番運用は困難でした
- 複雑 アプリは特殊なリソースに起因したボトルネックを引き起こし、開発のペースをスローにし、長期にわたる維持管理を困難なものにします。
- 時間の浪費 アプリはレビューや試行錯誤によってデプロイに時間を要し、多くの場合、市場への投入を遅延させます。迅速にデプロイするには、インフラストラクチャは複雑すぎます。
- 脆弱 背後のデータと個別にアプリを管理することは、面倒でエラーの影響を受けやすいものであり、貧弱なガバナンスやセキュアでないアプリにつながります。
Databricks Appsのご紹介
- シンプル 他の技術を学ぶのではなく、開発者がすでに知っている技術を用いたシンプルなアプリ開発によって構築を容易にします。
- プロダクションレディ ITは開発者が構築しているアプリのプロダクションの準備状況に高い自信を持ち、それらをより迅速にデプロイし、クイックに市場に投入します。サーバレスによってインフラの管理は不要です。
- ビルトインのガバナンス Unity Catalog統合によりデータアプリケーションは本質的にセキュアで、適切に管理され、より優れたセキュリティを提供します。
シンプル
- Dash、Gradio、Streamlitのような馴染みのあるPythonフレームワークを使用
- Databricks環境で直接実行し、データやAIモデルへのシームレスなアクセスを実現
- アプリのディレクトリで検索やフィルタリングを用いることで内部アプリを発見
プロダクションレディ
- アプリは自動で配備されるサーバレスコンピュートで実行され、簡単なデプロイメントを実現
- Gitバージョン管理とCI/CDパイプラインのビルトインサポート
- 開発者が特定ユーザーに共有可能なデプロイメント固有のURLを生成
ビルトインのガバナンス
- 正確なデータ権限を保証するきめ細かいアクセスコントロール
- セキュアなアプリ間通信のための自動管理のサービスプリンシパル
- シームレスでセキュアなユーザーアクセスのためにOIDC/OAuth 2.0やSSOを活用した自動ユーザー認証
主要コンセプト
Databricks Appsのペルソナ
以下のようなケースにDatabricks Apps…
- ダッシュボードやノートブックでは不十分な時
- Databricksを離れることなしにお客様データの完全な価値を解放するために
- Databricksネイティブサービスの上でアプリケーションを構築するために
- カスタムの機能でDatabricksワークスペースを拡張するために
アプリとは?
(主に)非技術ユーザー向けにデータとカスタムのツールを提供するインタラクティブなプログラムです。
ノートブックやダッシュボードがあるのになぜアプリ?
ノートブック: 技術ユーザーにとっては素晴らしいですが、非技術ユーザーにとってはそれほどでもありません
ダッシュボード: ビジュアライゼーションは素晴らしいですが、データのインタラクションは限定的で、柔軟性に欠けます
以下のようなアプリを構築したいならDatabricks Appsを使いましょう…
Databricks Appsユースケース例
アーキテクチャ
アプリのタイプ
フレームワーク | 特徴 | 適用シーン |
---|---|---|
Streamlit | Pythonネイティブ、簡単 | データアプリ、プロトタイプ |
Dash | 高度なカスタマイズ可能 | 複雑なダッシュボード |
Gradio | ML特化、デモ向け | MLモデルのUI |
Flask/FastAPI | 完全カスタム | API、複雑なアプリ |
リソース
アクセス許可をシンプルにします。
- 指定したリソースへのアクセスを自動で許可
- アプリをデプロイするユーザーがアクセスを許可する権限を持っている場合
- サービスプリンシパルに手動で権限を割り当てることも可能
- リソースはアプリの新環境への移行を容易にします
シークレットの管理
外部サービスへのアクセスにDatabricksシークレット管理を活用します。
- シークレットへのアクセスを自動で許可
- アプリをデプロイするユーザーがアクセスを許可する権限を持っている場合
- サービスプリンシパルに手動で権限を割り当てることも可能
テンプレート
GitHub repoでも利用可能です。
典型的なコードフロー
ログ
pipとアプリの両方から確認できます。
- 標準出力、標準エラーのログ
- コンピュートが停止すると削除
- シークレットは検閲
- デプロイメントタブも見ましょう
ベストプラクティス
問題をデバッグするには? 🪲
コードの失敗
- Databricks Appsは(まだ)あなたのコード内の論理的な問題を修正することはできません
- Copilot等のコーディングアシスタントを使用してください
- アプリはデプロイ前にローカルでテストできます
- デバッグには標準的なローカルIDEを使用してください
- 特定の動作をキャッチするために詳細ログを追加ください
環境の設定ミス
- 起動時に環境変数の利用可能性を確認してください
- [JS/TSアプリ] CORSが適切に設定されていることを確認してください
- PATは不要です。 WorkspaceClientを使用すれば、魔法のようにに動作します。
スタートアップコマンドの問題
- これをローカルのDockerコンテナで実行してください
- すべての関連ファイルがアップロードされていることを確認してください
- コマンドが正しいフォルダで実行されることを確認してください
- 相対パスを確認してください
その他のベストプラクティス
ほとんどのDatabricksベストプラクティスが適用されますが、追加があります。
Databricks
- 重いデータ処理は、アプリではなく、SQLウェアハウス、ジョブ、モデルサービングで行いましょう。
- dev、staging、productionを分離するために異なるワークスペースを使いましょう
- アウトバウンドトラフィックを制限するためにサーバレスエグレスコントロールを使いましょう
ID
- アプリのCan Manage権限を制限しましょう
- アプリのサービスプリンシパルに権限を割り当てる際には、最小権限の原則に従いましょう
- アプリの作成者が退社した場合には、アプリのサービスプリンシパルの資格情報をローテーションしましょう
- 資格情報を格納、参照するにはシークレットを使いましょう
- 疑わしいアクティビティのサインの監査ログを監視しましょう
SDLC
- 異なる環境間でコード & アセットのプロモートにCI/CDを使いましょう
- クエリーをパラメータ化し、SQLインジェクションに注意しましょう
- コードの脆弱性を特定するために、regular static application security testing (SAST)を実施しましょう
- 依存関係における脆弱性を特定し、必要に応じてパッチを当てるために定期的な静的解析を行いましょう
- お使いのアプリフレームワーク(Gradio, Streamlit, Flask, Dash)に関係するベストプラクティスに従いましょう
参考資料
- Databricks Apps | Databricks on AWS
- Introduction | Databricks Apps Cookbook
- databricks/app-templates
Databricks Appsのデプロイメント
シンプルにするために、今回はローカルIDEでの開発は割愛します。
ワークスペースでのコード作成からアプリのデプロイまでをメインとします。
Databricks Appsのファイル構造
それぞれのファイルの役割を理解して(バイブ)コーディングしましょう。
my-databricks-app/
│
├── app.py # 💜 ビジネスロジック(メインアプリケーション)
│ # - 環境変数を読み込んで実行
│ # - ローカル/本番で同じコード
│
├── databricks.yml # 💙 リソース宣言(何を使うか)
│ # - SQLウェアハウス、シークレット等を定義
│ # - デプロイ時の設計図
│
├── app.yaml # 💚 実行設定(どう動かすか)
│ # - 起動コマンド
│ # - 環境変数の設定(リソース参照)
│
└── requirements.txt # 📦 Python依存関係
# - 必要なライブラリ
コードでのプラットフォームリソースへのアクセス
SQLウェアハウスのリソースキーを用いて、 app.yaml
設定ファイルでリソースのエントリーを追加します。これは、実際の値ではなくパラメータ値のソースの参照なので、value
ではなく valueFrom
を使います。
env:
- name: "DATABRICKS_WAREHOUSE_ID"
valueFrom: "sql-warehouse"
あなたのアプリのコードでリソースを参照するには、設定されたキー値を参照するためにnameフィールドの値(この例ではDATABRICKS_WAREHOUSE_ID)を使います。
import os
os.getenv('DATABRICKS_WAREHOUSE_ID')
まとめると、
- app.py: (バイブコーディングの際)アプリケーションロジック、GUIの変更はapp.pyを明示的に編集するようにガイドした方がいいです。
- databricks.yml: SQLウェアハウスやエンドポイントなどのリソースはこちら。アプリ
作成時に定義しておく方がいいです。 - app.yaml: 環境変数はこちら。
- requirements.txt: ライブラリはこちら。
もくもく会
アプリを作りましょう!
streamlitでいきましょう(他のが慣れている場合にはそちらでも)。
Lakebaseは日本で動かないので以下の順でアプリを作成、デプロイしてみましょう:
- Hello World
- Data app
- Chatbot
Free Editionをお使いの場合はアプリの個数に1個という制限があるので都度削除してください。停止ではだめです。
まずは、サイドメニューのコンピュートにアクセスし、アプリタブを開きます。アプリを作成をクリックします。
テンプレートからStreamlitを選択し、Hello worldをクリックします。
必要に応じて名前や説明文を変更して、インストールをクリックします。
デプロイが完了するとアプリにアクセスできるようになります。実行中の右のURLにアクセスしましょう。
しかし、これだけでは物足りないですよね。せっかくなので機能を変更していきましょう。アプリの画面のデプロイメントのソースをクリックします。上で説明したアプリのコードにアクセスすることができます。app.py
を開くとGUIのコードを確認できます。
import streamlit as st
import pandas as pd
st.set_page_config(layout="wide")
st.header("Hello world!!!")
apps = st.slider("Number of apps", max_value=60, value=10)
chart_data = pd.DataFrame({'y':[2 ** x for x in range(apps)]})
st.bar_chart(chart_data, height=500, width=min(100+50*apps, 1000),
use_container_width=False, x_label="Apps", y_label="Fun with data")
普通であれば、ここから直接Pythonを編集して機能を変更することになります。しかし、今はバイブコーディングが流行りなので、その流れに乗りましょう。
コードを開いた際に右上に4頂点の星のマークと編集があります。これは、Databricksアシスタントを活用できることを意味しています。
クリックするとプロンプトの入力ボックスが表示されます。例えば、
日本語表記にして
というプロンプトを入力することで、タイトルなどが日本語に翻訳されます。承認をクリックして提案を確定させます。
コードを変更した際には、再度のデプロイが必要となります。アプリの画面にアクセスしてデプロイをクリックします。これによって、変更されたコードがアプリに反映されます。
プロンプト集
バイブコーディングする際には、app.py
にフォーカスすることをお勧めします。
全般
日本語表記にして
Hello World
irisデータセットを読み込んでstreamlitで可視化
このままではエラーになるはずなのでrequirements.txt
にscikit-learn
を追加してください。
Data app
workspace.default.sales_dataという売上データがあるので売上ダッシュボードにして
アプリのサービスプリンシパルのテーブルやSQLウェアハウスに対するアクセス権を確認下さい。
売上データのテーブルを作りたいなら、ノートブックやSQLエディタでworkspace.default.sales_dataというテーブルを作成。date, category, product, sales_amount, quantityという列を持ち100行のダミーデータを格納
というプロンプトを指示しましょう。以下のようなクエリーが生成されるはずです。
Chatbot
過去のやり取りを参照できるようにメモリーを搭載してください
まとめ
本記事では、Databricks Free Edition(無料版)でDatabricks Appsを実際に構築・デプロイする手順を解説しました。
Databricks Appsが無料で試せることで、以下のような活用が期待できます:
- 個人学習: エンタープライズ機能を自己学習で習得
- プロトタイピング: アイデアを素早く形にして検証
- 技術評価: 本格導入前の技術検証をリスクなく実施
- コミュニティ貢献: 作成したアプリを他の学習者と共有
Databricks Appsの一般提供開始により、データアプリケーション開発の敷居が大きく下がりました。Databricks Free Editionという無料の入口があることで、より多くの開発者がDatabricksエコシステムに参加し、データとAIを活用したアプリケーション開発の裾野が広がることが期待されます。
ぜひ皆さんも、まずはFree Editionで気軽にDatabricks Appsを試してみてください!