データ API ビルダーを Azure App Service にデプロイする

このガイドでは、コンテナー イメージを構築または管理せずに、コードベースのデプロイ モデルを使用してデータ API ビルダー (DAB) をAzure App Serviceにデプロイする方法について説明します。 App Service には、TLS、カスタム ドメイン、スケーリング、監視、およびMicrosoft Entra認証の組み込みサポートが用意されています。

Azure App Serviceへのデプロイ後の全体的なアーキテクチャのダイアグラムが完了しました。

Tip

環境でコンテナーを使用している場合は、「deploy to Azure Container Apps または Deploy to Azure Kubernetes Service を参照してください。

前提条件

構成ファイルをビルドする

既存のデータベースに接続する DAB 構成ファイルをビルドします。

  1. ローカル コンピューターに空のディレクトリを作成して、構成ファイルとデプロイ成果物を格納します。

  2. dab initを使用して、新しい基本構成ファイルを初期化します。 @env()関数を使用してDATABASE_CONNECTION_STRING環境変数を参照し、資格情報が構成ファイルに格納されないようにします。

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

    Important

    <database-type>をサポートされているデータベースの種類 (mssqlpostgresqlmysqlcosmosdb_nosqlなど) に置き換えます。 一部のデータベースの種類では、初期化時に追加の構成設定が必要です。

  3. 構成に少なくとも 1 つのデータベース エンティティを追加します。 エンティティを構成するには、 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')
    • エンティティとアクセス許可が正しい

    Important

    リテラル接続文字列やシークレットを dab-config.jsonに埋め込まない。 実行時に環境変数から値が解決されるように、 @env() 関数を使用します。

ローカル ツール マニフェストを作成する

ローカル .NET ツール マニフェストを使用して、配置パッケージにプロジェクトの依存関係として DAB を含めます。 この方法では、App Service 内にグローバルにインストールされたツールに依存することを回避できます。

  1. プロジェクト ディレクトリに.NETローカル ツール マニフェストを作成します。

    dotnet new tool-manifest
    
  2. データ API ビルダーをローカル ツールとしてインストールします。

    dotnet tool install microsoft.dataapibuilder --prerelease
    
  3. マニフェストが .config/dotnet-tools.jsonに存在するかどうかを確認します。

    Note

    --prerelease フラグは、最新の Data 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. すべてのエンドポイントを確認した後、ランタイムを停止します。

App Service リソースを作成する

App Service で DAB をホストするために必要なAzure リソースを作成します。

  1. 新しいリソース グループを作成する。 このガイドでは、このリソース グループをすべての新しいリソースに使用します。

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

    Tip

    リソース グループ に msdocs-dab-appservice という名前を付ける方法を検討してください。

  2. アプリサービスプランを作成する。

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

    Note

    このガイドでは、Linux 上の B1 (Basic) レベルを使用します。

  3. .NET 8 ランタイムを使用して Web アプリを作成します。

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

    Tip

    az webapp list-runtimes --os linuxを使用して、プランで使用可能なランタイムを検証します。

App Service の設定を構成する

App Service で DAB を実行するために必要な環境変数とスタートアップ コマンドを構成します。

  1. App Service の認証プロバイダーを構成します。 この設定は、ID 情報に対して App Service の組み込み認証 (Easy Auth) を信頼するように DAB に指示します。

    dab configure --runtime.host.authentication.provider AppService
    
  2. App Service アプリケーション設定としてデータベース接続文字列を設定します。

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

    Tip

    シークレットを含まない接続文字列を使用します。 代わりに、マネージド ID とMicrosoft Entra認証を使用して、データベースと App Service の間のアクセスを管理します。 詳細については、 マネージド ID を使用する Azure サービスに関するページを参照してください。

  3. ローカル ツール マニフェストを復元し、DAB を起動するスタートアップ スクリプトを作成します。 プロジェクト ディレクトリに startup.sh という名前のファイルを作成します。

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

    Important

    startup.shが CRLF ではなく LF (Unix) 行末を使用していることを確認します。 Windowsエディターは既定で CRLF で保存できます。これにより、Linux App Service ホストでスクリプトが失敗します。

  4. App Service でスタートアップ コマンドを設定します。

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

App Service にデプロイする

プロジェクト ファイルをパッケージ化し、ZIP デプロイを使用して App Service にデプロイします。

  1. プロジェクト ファイルを含む配置パッケージを作成します。 少なくとも、以下を含めます。

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

    Important

    ZIP には、ルート レベルのファイルが含まれている必要があります。 ファイルを含む親フォルダーを zip 圧縮しないでください。 アーカイブ ルートには、 dab-config.json.config/、および startup.sh を直接含める必要があります。

  2. APP Service に ZIP パッケージをデプロイします。

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

デプロイメントを確認する

デプロイ後、App Service で DAB が正常に開始されることを確認します。

  1. App Service 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を使用して App Service エンドポイントを保護します。

詳細な手順については、「 App Service 認証の構成」を参照してください。

Important

AppServicedab-config.json認証プロバイダーは、App Service 認証によって挿入されたヘッダーを信頼します。 運用環境でこのプロバイダーを使用する場合は、App Service 認証が有効になっていることを確認します。 詳細については、「 Easy Auth (App Service)」を参照してください。

Note

App Service 認証は、エンドポイントへのイングレスを保護します。 DAB エンティティのアクセス許可は、ランタイムが許可する操作を引き続き制御します。 ロールベースのアクセスが必要な場合は、 anonymous:*ではなく特定のロールを使用するようにエンティティのアクセス許可を更新します。

リソースをクリーンアップする

サンプル アプリケーションまたはリソースが不要になったら、対応するデプロイとすべてのリソースを削除します。

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