开发 Databricks 应用

重要

Databricks 应用以公共预览版提供

注意

若要在 Databricks 工作区中部署和运行应用,必须确保防火墙不会阻止域 *.databricksapps.com

本文详细介绍了如何使用 Databricks 应用创建数据和 AI 应用,包括如何在 UI 中创建和编辑应用、如何使用 SQL 仓库、机密和 Databricks 作业等 Databricks 平台功能、开发应用的最佳做法,以及有关使用受支持框架开发应用的重要信息。

如何实现在 Databricks 应用 UI 中创建应用?

  1. 在边栏中,单击“新建“新建”图标,然后从菜单中选择“应用”。

  2. 可以从完整的预生成示例应用开始,也可以使用源代码和项目。

    • 若要从示例应用开始,请选择“模板,单击首选框架的选项卡,然后从应用列表中选择。
    • 若要使用代码创建应用,请选择“ 自定义”。

    查看页面以创建新的 Databricks 应用

  3. 单击 “下一步”

  4. “应用名称 ”字段中,输入应用的名称,并根据需要输入说明。

    注意

    • 创建应用后,无法更改分配给 Databricks 应用的名称,任何有权访问 Azure Databricks 工作区的用户都可以查看工作区中所有 Databricks 应用的名称和部署历史记录。 此外,应用名称包含在写入系统表的记录中。 由于这种可见性,命名 Databricks 应用时不应包含敏感信息。
    • 该名称在托管应用的 Azure Databricks 工作区中必须唯一,并且必须仅包含小写字母、数字和连字符。

    查看页面以命名 Databricks 应用

    如果选择了“ 自定义”,请单击“ 创建应用”。 如果选择了 “模板”,请配置所需的资源,然后单击“ 创建并部署应用”。 请参阅 将 Databricks 平台功能分配给 Databricks 应用

    查看页面以命名 Databricks 应用并添加资源

    单击“创建并部署应用”或“创建应用后,将显示应用详细信息页。 如果选择了 模板,Databricks 应用会创建应用,然后部署应用,包括模板中的示例代码和应用的必需配置。 应用的详细信息页显示:

    • 应用的创建和部署的状态。
    • 可用于在本地继续开发应用的步骤,包括将应用项目复制到本地环境,并将本地更改同步回 Azure Databricks 工作区。

    查看模板化 Databricks 应用的详细信息

    如果选择“ 自定义”,Databricks Apps 将创建应用。 由于必须为应用添加代码和项目,因此必须将应用部署为单独的步骤。 应用的详细信息页显示:

    • 应用的创建状态。
    • 可用于将应用的代码和项目从本地开发环境同步到 Azure Databricks 工作区并部署应用的步骤。

    查看模板化 Databricks 应用的详细信息

    若要了解如何设置本地开发环境、在本地创建或更新应用的代码和配置,以及同步应用并将其部署到 Azure Databricks 工作区,请参阅 Databricks 应用入门。

  5. 如果选择了 模板 ,并且想要将应用项目从工作区复制到本地开发环境,则可以使用 Databricks CLI:

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

    将:

    • <workspace-path> 包含应用代码和项目的工作区文件目录的路径。
    • <target-path> 使用本地环境中的路径将文件复制到其中。

将 Databricks 平台功能分配给 Databricks 应用

注意

若要使用 Databricks SQL,服务主体需要访问 SQL 仓库和查询访问的任何表。

若要使用 Databricks 平台的功能(如 Databricks SQL、Databricks 作业、马赛克 AI 模型服务和 Databricks 机密),请将这些功能作为资源添加到应用。 创建或编辑应用时,可以添加资源。

  1. “创建新应用”或“编辑应用卡”中,单击“高级设置>+ 添加资源”,然后选择资源类型。

    在 UI 中将 SQL 仓库添加为应用资源

  2. 根据资源类型,完成配置资源所需的字段,包括 “资源密钥 ”字段。 此密钥稍后用于引用资源。

  3. 单击“ 保存”。

  4. 使用 SQL 仓库资源密钥在配置文件中添加 app.yaml 资源的条目。 由于这是引用参数值的源而不是实际值,因此请使用 valueFrom 而不是 value

    env:
      - name: "DATABRICKS_WAREHOUSE_ID"
        valueFrom: "sql-warehouse"
    
  5. 若要引用应用代码中的资源,请使用字段的值 nameDATABRICKS_WAREHOUSE_ID 在此示例中)引用配置的键值。

    import os
    
    os.getenv('DATABRICKS_WAREHOUSE_ID')
    

若要查看将资源用于应用(包括 SQL 仓库和模型服务终结点)的更多示例,请参阅创建应用最佳做法时的模板示例:使用机密存储 Databricks 应用的敏感信息。

查看 Databricks 应用的详细信息

若要查看 Databricks 应用的详细信息页,请执行以下操作:

  1. 单击侧栏中的““计算”图标 计算”
  2. 转到 “应用 ”选项卡。
  3. 在“ 名称 ”列中,单击应用名称。
  4. 此时 会显示“概述 ”选项卡,其中包含应用的详细信息,包括其状态、部署位置和任何关联的资源。
    • 若要访问应用的部署历史记录,请转到 “部署 ”选项卡。
    • 若要查看应用的日志,请转到 “日志 ”选项卡。
    • 若要查看应用的运行时环境(包括环境变量和已安装的包),请转到“ 环境 ”选项卡。

为 Databricks 应用配置权限

若要管理应用的权限,必须具有 CAN MANAGEIS OWNER 权限。

  1. 在应用详细信息页上,单击“ 权限”。
  2. “权限设置”,选择“选择用户、组或服务主体...” 下拉菜单,然后选择用户、组、服务主体或所有工作区用户。
  3. 从“权限”下拉菜单中选择权限。
  4. 单击“添加,然后单击“保存”。

维护 Databricks 应用的状态

当应用重启时,应用在内存中维护的任何状态都将丢失。 如果应用需要在重启之间保持状态,请在外部存储状态。 例如,应用可以使用 Databricks SQL工作区文件Unity 目录卷 来保留状态。

Databricks 应用中的日志记录

注意

若要在 Databricks 应用 UI 或应用 URL 中查看日志,应用必须登录和stderr登录stdout

若要查看应用的标准输出和标准错误,请在应用的详细信息页上单击“ 日志 ”选项卡。请参阅 查看 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 复制了其中一个自动安装的包,则包 requirements.txt 中的版本将替代自动安装的包。

有关作为应用部署的一部分安装的包和版本的列表,请参阅 已安装的 Python 库

哪些 HTTP 标头传递到 Databricks 应用?

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 应用 UI 中创建应用?

有关 Databricks Apps 运行时环境中设置的特定于 Streamlit 的变量,请参阅 Streamlit 的默认环境变量。

最佳做法:使用机密存储 Databricks 应用的敏感信息

Databricks 建议使用机密来存储敏感信息,例如身份验证凭据。 若要了解有关使用机密的详细信息,请参阅 “管理机密”。

若要对应用使用机密,请执行以下操作:

  1. 将机密配置为 应用资源

    在 UI 中将机密添加为应用资源

  2. 在应用的配置文件中添加机密的 app.yaml 条目。

    env:
      - name: "API_TOKEN"
        valueFrom: "api-token-value"
    
  3. 若要在应用代码中引用机密,请使用字段的值 nameAPI_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 端口号。 请参阅 环境变量