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

Databricks AppsエージェントのCI/CDを設定する

CI/CDパイプラインは、コード レビューと自動デプロイを通じてエージェントに対するすべての変更を実行するため、本番運用のロールアウトは 1 人の開発者のラップトップに依存しません。 パイプラインが設定されると、メインブランチへのマージのたびに、Databricks Apps 上のエージェントがデプロイされ、再起動されます。

このページでは、エージェント固有の要素について説明します。Databricks AppsのCI/CDとGitHub Actionsについては、コアとなるセットアップ (ワークロード ID フェデレーション、 GitHub環境、デプロイ YAML) について説明しています。 まずそのページを完了してから、エージェントアプリに適用される追加情報を確認するためにこちらに戻ってください。

要件

ステップ 1. スターターワークフローを使用する

databricks/app-templatesにあるいくつかのエージェント テンプレートには、すぐに使用できる.github/workflows/deploy.yml同梱されているため、ワークフローをゼロから記述する必要はありません。

  1. databricks/app-templatesからエージェントテンプレートを選択します。例えば、 agent-langgraphまたはagent-openai-agents-sdkなどです。
  2. クローンしたテンプレートディレクトリ内に、 .github/workflows/deploy.ymlが存在するかどうかを確認してください。
  3. ワークフローを設定する:
    • deploy.yml存在する場合 : それを開き、 databricks bundle runステップがdatabricks.ymlのバンドルのリソース キーを参照していることを確認し、ファイルのヘッダー コメントの前提条件に従います。
    • deploy.ymlが存在しない場合 : 存在するテンプレートから、またはステップ 4 からコピーします。デプロイ ワークフローを追加します。次に、バンドルのリソース キーと一致するようにdatabricks bundle run <key>ステップを更新します。

ステップ 2. MLflowエクスペリメント ID を事前に入力します

エージェントテンプレートでは、 databricks.ymlMLFLOW_EXPERIMENT_ID空のままになります。quickstartスクリプトは初回セットアップ時にローカルでそれを埋めますが、新規の CI ランナーでは埋めません。experiment_idが空の場合、 databricks bundle deploy Terraform型エラー( For input string: "" )で失敗します。

修正するには、入力した値をコミットしてください。

  1. エージェントを作成したマシン上で、 uv run quickstart --profile <your-profile>ローカルで実行してください。
  2. databricks.ymlエクスペリメント リソース ( resources.apps.<key>.resourcesの下にあるname: 'experiment'のエントリ) に数値experiment_idが設定されていることを確認します。
  3. 変更をコミットします。

エクスペリメントはワークスペースを対象とするため、そのワークスペースを対象とするすべての CI デプロイに対して同じ ID が有効です。 複数のワークスペースにデプロイする場合は、ターゲットごとのエクスペリメントをdatabricks.ymlで宣言するか ( targets.<env>ブロックごとに 1 つ)、バンドル変数を使用します。

Lakebaseメモリテンプレートに対するPostgresの権限を付与する

高度なエージェント テンプレート ( agent-langgraph-advancedagent-openai-advanced ) は、オートスケールLakebase Postgres リソースをdatabricks.ymlで直接宣言します。 Databricks CLI v0.295.0以降では、 databricks bundle deployアプリとともにリソースをプロビジョニングします。

DAB postgresリソースは、アプリのDatabricksプリンシパル ワークスペース レベルのLakebaseプロジェクトへのアクセスを許可しますが、 Lakebaseデータベース アクセス (スキーマ、テーブル、シーケンス) 用に別の Postgres ロール レイヤーを保持します。 Databricksサービス プリンシパルには、エージェントがメモリ テーブルの読み取りまたは書き込みを行う前に、適切な権限を持つ Postgres ロールが必要です。 2層モデルについては、認証アーキテクチャを参照してください。

これらのPostgresレベルの権限を付与するのは、 一度限りの設定 です。最初のbundle deploybundle runの間でローカルで実行してください。Databricksサービスプリンシパルの Postgres ロールはアプリの存続期間中存続するため、CI はその後、標準のdeploy 、次にrunパスを介して再デプロイされます。

  1. Lakebaseリソースをプロビジョニングするためにバンドルをデプロイします。

    Bash
    databricks bundle deploy --target prod
  2. Databricksサービスプリンシパルに必要なPostgresレベルの権限を付与します。

    Bash
    uv run python scripts/grant_lakebase_permissions.py \
    "$(databricks apps get <app-name> --output json | jq -r '.service_principal_client_id')" \
    --memory-type openai \
    --autoscaling-endpoint <endpoint>

    LangGraphテンプレートの場合は、 --memory-type langgraphを渡してください。このスクリプトは、オートスケールLakebaseの場合は--project <project> --branch <branch> 、またはLakebaseの場合は--instance-name <name>受け入れます。

  3. アプリを起動:

    Bash
    databricks bundle run <bundle-key> --target prod

ステップ 3. デプロイされたエージェントのスモークテスト

databricks bundle run ランナーがエージェントに起動を指示するとすぐに戻りますが、エージェントプロセスは起動中に失敗する可能性があります。ステップ 5 のヘルス チェックの後、アプリが正常になるまで待機し、カナリア リクエストを/invocationsにポストする次のスモークテスト ステップをdeploy.ymlに追加します。

YAML
- name: Smoke test invocations
env:
APP_NAME: my-agent
run: |
APP_URL=$(databricks apps get "$APP_NAME" --output json | jq -r '.url')
TOKEN=$(databricks auth token | jq -r '.access_token')
STATUS=$(curl -sS -o /tmp/canary.json -w "%{http_code}" \
-X POST "$APP_URL/invocations" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"input": [{"role": "user", "content": "ping"}], "stream": false}')
if [ "$STATUS" != "200" ]; then
echo "Smoke test failed with status $STATUS:" >&2
cat /tmp/canary.json >&2
exit 1
fi
echo "Smoke test passed."
注記

Databricks Apps 、呼び出しにOAuthトークンのみを受け入れます。 databricks auth tokenのワークスペースOAuthトークンを使用します。 Databricks Appsは他のトークンタイプを拒否します。

次のステップ