将数据 API 生成器部署到Azure 应用服务

本指南介绍如何使用基于代码的部署模型(DAB)将数据 API 生成器(DAB)部署到Azure 应用服务,而无需生成或管理容器映像。 应用服务为 TLS、自定义域、缩放、监视和Microsoft Entra身份验证提供内置支持。

部署到 Azure 应用服务 后的总体体系结构的Diagram 已完成。

提示

如果环境使用容器,请参阅 部署到 Azure 容器应用或者 部署到 Azure Kubernetes 服务

先决条件

生成配置文件

生成 DAB 配置文件以连接到现有数据库。

  1. 在本地计算机上创建一个空目录来存储配置文件和部署项目。

  2. 使用 dab init.. 初始化新的基本配置文件。 使用 @env() 函数引用 DATABASE_CONNECTION_STRING 环境变量,以便凭据不会存储在配置文件中。

    dab init --database-type "<database-type>" --connection-string "@env('DATABASE_CONNECTION_STRING')"
    

    重要

    替换为<database-type>受支持的数据库类型,例如mssqlpostgresqlmysqlcosmosdb_nosql。 某些数据库类型需要在初始化时设置额外的配置设置。

  3. 将至少一个数据库实体添加到配置中。 使用dab add命令来配置实体。 根据需要对dab add进行多次重复,从而适用于您的实体。

    dab add "<entity-name>" --source "<schema>.<table>" --permissions "anonymous:*"
    
  4. 打开并查看 dab-config.json 文件的内容。 验证:

    • data-source.connection-string 使用 @env('DATABASE_CONNECTION_STRING')
    • 您的实体和权限是正确的

    重要

    不要在 dab-config.json 中嵌入明文连接字符串或敏感信息。 使用函数 @env() ,以便从运行时的环境变量解析值。

创建本地工具清单

使用本地.NET工具清单,以便部署包包含 DAB 作为项目依赖项。 此方法避免依赖应用服务内的全局安装工具。

  1. 在项目目录中创建.NET本地工具清单。

    dotnet new tool-manifest
    
  2. 将数据 API 生成器安装为本地工具。

    dotnet tool install microsoft.dataapibuilder --prerelease
    
  3. 验证清单是否存在于 .config/dotnet-tools.json.

    注释

    --prerelease 标志安装最新的数据 API 生成器预发行版。 请删除标志以安装最新的稳定版本。

在本地测试

在部署到 Azure 之前,请确保运行时已启动,终结点正常工作。

  1. 将连接字符串设置为本地环境变量。

    $env:DATABASE_CONNECTION_STRING = "<your-connection-string>"
    
  2. 在本地启动 DAB 运行时。

    dab start
    
  3. 通过导航到 Swagger UI 或者向/api/<entity-name>发送请求来测试 REST 终结点。

  4. 请在/graphql测试 GraphQL 终结点。

  5. 验证所有终结点后停止运行时。

创建应用服务资源

创建在应用服务上托管 DAB 所需的Azure资源。

  1. 创建新的资源组。 在本指南中,使用此资源组处理所有新资源。

    az group create \
      --name <resource-group-name> \
      --location <location>
    

    提示

    请考虑命名资源组 msdocs-dab-appservice

  2. 创建应用服务计划。

    az appservice plan create \
      --name <plan-name> \
      --resource-group <resource-group-name> \
      --sku B1 \
      --is-linux
    

    注释

    本指南使用 Linux 上的 B1 (基本)层。

  3. 使用 .NET 8 运行时创建 Web 应用。

    az webapp create \
      --name <app-name> \
      --resource-group <resource-group-name> \
      --plan <plan-name> \
      --runtime "DOTNETCORE:8.0"
    

    提示

    使用 az webapp list-runtimes --os linux.. 验证计划的可用运行时。

配置应用服务设置

配置应用服务需要运行 DAB 的环境变量和启动命令。

  1. 为 App Service 配置身份验证提供程序。 此设置告知 DAB 信任应用服务的内置身份验证(简易身份验证)来获取标识信息。

    dab configure --runtime.host.authentication.provider AppService
    
  2. 将数据库连接字符串设置为应用服务的应用程序设置。

    az webapp config appsettings set \
      --name <app-name> \
      --resource-group <resource-group-name> \
      --settings DATABASE_CONNECTION_STRING="<your-connection-string>"
    

    提示

    使用不包含机密信息的连接字符串。 请改用托管标识和Microsoft Entra身份验证来管理数据库和应用服务之间的访问。 有关详细信息,请参阅 使用托管标识的 Azure 服务

  3. 创建一个启动脚本,用于还原本地工具清单并启动 DAB。 在项目目录中创建一个名为 startup.sh 的文件。

    #!/bin/sh
    dotnet tool restore
    dotnet tool run dab start
    

    重要

    确保 startup.sh 使用 LF (Unix) 行尾,而不是 CRLF。 默认情况下,Windows编辑器可能会随 CRLF 一起保存,这会导致脚本在 Linux 应用服务主机上失败。

  4. 在应用服务中设置启动命令。

    az webapp config set \
      --name <app-name> \
      --resource-group <resource-group-name> \
      --startup-file "startup.sh"
    

部署到应用服务

打包项目文件,并使用 ZIP 部署将其部署到应用服务。

  1. 创建包含项目文件的部署包。 至少包括:

    • dab-config.json
    • .config/dotnet-tools.json
    • startup.sh
    Compress-Archive -Path dab-config.json, .config, startup.sh -DestinationPath deploy.zip -Force
    

    重要

    ZIP 必须包含根级别的文件。 不要压缩包含文件的父文件夹。 存档根目录应直接包含dab-config.json.config/startup.sh

  2. 将 ZIP 包部署到应用服务。

    az webapp deploy \
      --resource-group <resource-group-name> \
      --name <app-name> \
      --src-path deploy.zip \
      --type zip
    

验证部署

部署后,确认 DAB 在应用服务上成功启动。

  1. 打开应用服务 URL。

    https://<app-name>.azurewebsites.net
    
  2. 检查运行状况终结点。

    https://<app-name>.azurewebsites.net/health
    
  3. 使用在本地测试的相同实体路径测试 REST 和 GraphQL 终结点。 部署的应用使用相同的dab-config.json,因此端点行为应与本地运行时匹配。

  4. 如果任何终结点返回意外错误,请启用应用日志并查看日志。

    az webapp log config \
      --name <app-name> \
      --resource-group <resource-group-name> \
      --application-logging filesystem \
      --level information
    
    az webapp log tail \
      --name <app-name> \
      --resource-group <resource-group-name>
    

配置身份验证(可选)

使用Microsoft Entra ID保护应用服务终结点以供生产使用。

有关详细步骤,请参阅 “配置应用服务身份验证”。

重要

dab-config.json身份验证提供程序信任AppService应用服务身份验证注入的标头。 确保在生产环境中使用此提供程序时启用应用服务身份验证。 有关详细信息,请参阅 Easy Auth(应用服务)。

注释

应用服务身份验证可以保护对终结点的访问。 DAB 实体权限仍控制运行时允许的操作。 如果想要基于角色的访问,请更新实体权限以使用特定角色,而不是使用anonymous:*

清理资源

不再需要示例应用程序或资源时,请删除相应的部署和所有资源。

az group delete \
  --name <resource-group-name> \
  --yes \
  --no-wait