Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce guide vous montre comment déployer le générateur d’API de données (DAB) sur Azure App Service sans générer ou gérer des images conteneur. App Service fournit une prise en charge intégrée de TLS, de domaines personnalisés, de mise à l’échelle, de supervision et d’authentification Microsoft Entra.
Tip
Si votre environnement utilise des conteneurs, consultez Deploy to Azure Container Apps ou Deploy to Azure Kubernetes Service à la place.
Prerequisites
- Un compte Azure avec un abonnement actif. Créez un compte gratuitement.
- CLI du générateur d'API de données. Installez l’interface CLI.
- Azure CLI. Installez Azure CLI.
- .NET 8 SDK ou version ultérieure installée sur votre ordinateur de développement ou de build local.
- Une base de données existante prise en charge à laquelle Azure peut accéder.
Important
La pile App Service .NET intégrée contient l’environnement d’exécution .NET, mais n’inclut pas le SDK .NET. Restaurez DAB et assemblez le package de déploiement sur votre ordinateur de développement ou de build local. N’exécutez pas dotnet tool restore au démarrage d’App Service.
Générer le fichier de configuration
Créez un fichier de configuration DAB pour vous connecter à votre base de données existante.
Créez un répertoire vide sur votre ordinateur local pour stocker les artefacts de configuration et de déploiement.
Initialisez un nouveau fichier de configuration de base à l’aide
dab initde . Utilisez la@env()fonction pour référencer laDATABASE_CONNECTION_STRINGvariable d’environnement afin que les informations d’identification ne soient pas stockées dans le fichier de configuration.dab init --database-type "<database-type>" --connection-string "@env('DATABASE_CONNECTION_STRING')"Important
Remplacez par
<database-type>un type de base de données pris en charge, tel quemssql, ,postgresqlmysqloucosmosdb_nosql. Certains types de base de données nécessitent des paramètres de configuration supplémentaires lors de l’initialisation.Ajoutez au moins une entité de base de données à la configuration. Utilisez la
dab addcommande pour configurer une entité. Répétezdab addautant de fois que nécessaire pour vos entités.dab add "<entity-name>" --source "<schema>.<table>" --permissions "anonymous:*"Ouvrez et examinez le contenu du fichier dab-config.json . Vérifiez que :
-
data-source.connection-stringUtilise@env('DATABASE_CONNECTION_STRING') - Vos entités et autorisations sont correctes
Important
N’incorporez pas de chaînes de connexion littérales ou de secrets dans
dab-config.json. Utilisez la fonction@env()pour résoudre les valeurs depuis les variables d’environnement au moment de l’exécution.-
Épingler DAB pour la build
Utilisez un manifeste d’outil .NET local pour épingler la version DAB sur votre ordinateur de développement ou de build. Le manifeste rend reproductible les builds, mais ne contient pas les fichiers binaires DAB restaurés. Vous copiez ces fichiers binaires dans le package de déploiement plus loin dans ce guide.
Créez un manifeste d’outil local .NET dans votre répertoire de projet.
dotnet new tool-manifestInstallez une version spécifique du générateur d’API de données en tant qu’outil local. Remplacez
<dab-version>par la version que vous souhaitez déployer, par2.0.9exemple .dotnet tool install microsoft.dataapibuilder --version "<dab-version>"Vérifiez que le manifeste existe à
.config/dotnet-tools.json.Restaurez l'outil épinglé sur l'ordinateur de développement ou de compilation.
dotnet tool restoreNote
L’opération de restauration remplit le cache de package NuGet local. Le package de déploiement de l’App Service doit inclure le contenu d’exécution restauré ; le déploiement de
.config/dotnet-tools.jsonseul n’est pas suffisant.
Tester localement
Avant de déployer sur Azure, vérifiez que le runtime démarre et que vos points de terminaison fonctionnent.
Définissez la chaîne de connexion en tant que variable d’environnement locale.
$env:DATABASE_CONNECTION_STRING = "<your-connection-string>"Démarrez le runtime DAB localement.
dotnet tool run dab startTestez le point de terminaison REST en accédant au Swagger UI ou en effectuant une demande à
/api/<entity-name>.Testez le point de terminaison GraphQL à l’adresse
/graphql.Arrêtez le runtime après avoir vérifié tous les points de terminaison.
Créer les ressources App Service
Créez les ressources Azure requises pour héberger DAB sur App Service.
Créez un groupe de ressources. Vous utilisez ce groupe de ressources pour toutes les nouvelles ressources de ce guide.
az group create --name "<resource-group-name>" --location "<location>"Tip
Envisagez de nommer le groupe de ressources msdocs-dab-appservice.
Créez un plan App Service.
az appservice plan create --name "<plan-name>" --resource-group "<resource-group-name>" --sku B1 --is-linuxNote
Ce guide utilise le niveau B1 (De base) sur Linux.
Créez l’application web avec le runtime .NET 8 et une identité managée affectée par le système.
az webapp create --name "<app-name>" --resource-group "<resource-group-name>" --plan "<plan-name>" --runtime "DOTNETCORE:8.0" --assign-identity "[system]"Tip
Validez les runtimes disponibles pour votre plan avec
az webapp list-runtimes --os linux.
Configurer les paramètres App Service
Configurez les variables d’environnement et la commande de démarrage dont App Service a besoin pour exécuter DAB.
Définissez la chaîne de connexion de la base de données en tant que paramètre de l'application App Service.
az webapp config appsettings set --name "<app-name>" --resource-group "<resource-group-name>" --settings DATABASE_CONNECTION_STRING="<your-connection-string>"Tip
Utilisez un chaîne de connexion qui n'inclut pas de secrets. Utilisez plutôt des identités managées et Microsoft Entra l’authentification pour gérer l’accès entre votre base de données et App Service. Pour plus d’informations, consultez les services Azure qui utilisent des identités managées.
Configurez l’adresse sur laquelle DAB écoute. Le port
8080correspond au port utilisé par l’application pour la pile Linux App Service intégrée.az webapp config appsettings set --name "<app-name>" --resource-group "<resource-group-name>" --settings ASPNETCORE_URLS="http://0.0.0.0:8080"Activez Always On et la journalisation du système de fichiers avant le premier déploiement. Always On est disponible sur le niveau B1 utilisé dans ce guide.
az webapp config set --name "<app-name>" --resource-group "<resource-group-name>" --always-on true az webapp log config --name "<app-name>" --resource-group "<resource-group-name>" --application-logging filesystem --docker-container-logging filesystem --level informationCréez un script de démarrage qui démarre la charge utile du runtime DAB incluse dans le package de déploiement. Créez un fichier nommé
startup.shdans le répertoire de votre projet.#!/bin/sh set -eu exec dotnet ./dab/Microsoft.DataApiBuilder.dll start --config ./dab-config.jsonImportant
S'assurer que
startup.shutilise les terminaisons de ligne LF (Unix) au lieu de CRLF. Windows éditeurs peuvent enregistrer avec CRLF par défaut, ce qui entraîne l’échec du script sur l’hôte App Service Linux.Définissez la commande de démarrage dans App Service.
az webapp config set --name "<app-name>" --resource-group "<resource-group-name>" --startup-file "sh startup.sh"
Configurer l’identité managée pour Azure SQL
Si votre source de données est Azure SQL, autorisez l'identité managée affectée par le système de l'application web dans la base de données. Ignorez cette section si vous utilisez une autre base de données ou méthode d’authentification.
Connectez-vous à la base de données cible en tant qu’administrateur Microsoft Entra.
Créez un utilisateur de base de données autonome pour l’identité de l’application web et accordez uniquement les autorisations requises par vos entités DAB. L’exemple suivant prend en charge les opérations de lecture et d’écriture.
CREATE USER [<app-name>] FROM EXTERNAL PROVIDER; ALTER ROLE [db_datareader] ADD MEMBER [<app-name>]; ALTER ROLE [db_datawriter] ADD MEMBER [<app-name>];Note
La propagation de l’identité Microsoft Entra peut prendre quelques minutes après la création d’une application web. Si
CREATE USERne peut pas vérifier l’identité immédiatement, attendez, puis réessayez.Définissez
DATABASE_CONNECTION_STRINGsur une chaîne de connexion d’identité managée Azure SQL.az webapp config appsettings set --name "<app-name>" --resource-group "<resource-group-name>" --settings DATABASE_CONNECTION_STRING="Server=tcp:<sql-server-name>.database.windows.net,1433;Initial Catalog=<database-name>;Authentication=Active Directory Managed Identity;Encrypt=True;TrustServerCertificate=False;"
Déployer sur App Service
Copiez le runtime DAB restauré dans votre répertoire d’application, puis déployez le répertoire à l’aide du déploiement ZIP.
Créez un répertoire d’application qui contient la configuration DAB, le script de démarrage et la charge utile du runtime restaurée.
Les exemples utilisent la version
2.0.9DAB . Définissez la version sur la même que celle que vous avez épinglée dans.config/dotnet-tools.json.$dabVersion = "2.0.9" $globalPackages = (dotnet nuget locals global-packages --list) -replace '^global-packages:\s*', '' $dabPayload = Join-Path $globalPackages "microsoft.dataapibuilder/$dabVersion/tools/net8.0/any" $appDirectory = Join-Path (Get-Location) "app" Remove-Item $appDirectory -Recurse -Force -ErrorAction SilentlyContinue New-Item -ItemType Directory -Path (Join-Path $appDirectory "dab") -Force | Out-Null Copy-Item dab-config.json, startup.sh -Destination $appDirectory Copy-Item (Join-Path $dabPayload "*") -Destination (Join-Path $appDirectory "dab") -Recurse if (-not (Test-Path (Join-Path $appDirectory "dab/Microsoft.DataApiBuilder.dll"))) { throw "The restored DAB runtime payload wasn't found." }Important
Exécutez ces commandes sur la même machine que celle sur laquelle vous avez restauré l’outil DAB épinglé. Si votre environnement redéfinit le répertoire global des packages NuGet,
dotnet nuget localsen détermine l'emplacement.Créez un fichier ZIP avec des séparateurs d’entrée portables
/. La racine d’archivage doit contenirdab-config.json,startup.shet ledab/répertoire directement. Ne compressez pas le répertoire parentapp.Remove-Item deploy.zip -Force -ErrorAction SilentlyContinue tar.exe -a -c -f deploy.zip -C $appDirectory dab-config.json startup.sh dabAvertissement
Sous Windows,
Compress-Archivepeut stocker des entrées imbriquées avec\comme séparateurs. Le déploiement ZIP via Kudu peut rejeter cette archive avec le code HTTP 400. Utilisez un outil ZIP qui conserve les séparateurs/, et examinez les entrées de l’archive si le déploiement renvoie une erreur HTTP 400 sans plus de détails.Déployez le package ZIP sur App Service.
az webapp deploy --resource-group "<resource-group-name>" --name "<app-name>" --src-path deploy.zip --type zip --clean true --restart false --timeout 600000Redémarrez l’application web une fois le déploiement terminé.
az webapp restart --resource-group "<resource-group-name>" --name "<app-name>"
Vérifier le déploiement
Après le déploiement, vérifiez que DAB démarre correctement sur App Service.
Ouvrez l’URL de l’App Service. La réponse racine inclut l’état et la version de DAB.
https://<app-name>.azurewebsites.netTestez les points de terminaison REST et GraphQL à l’aide des mêmes chemins d’entité que ceux que vous avez testés localement. L’application déployée utilise le même
dab-config.json, donc le comportement du point de terminaison doit correspondre à votre environnement d'exécution local.https://<app-name>.azurewebsites.net/api/<entity-name> https://<app-name>.azurewebsites.net/graphqlNote
En mode de production,
/healthpeut renvoyer HTTP 403 lorsque l'appelant n'est pas autorisé à afficher le rapport d'intégrité complet. Si les points de terminaison racine et d'entité autorisée répondent correctement, une réponse 403 de la part de/healthn'indique pas un échec du démarrage.Si un point de terminaison retourne une erreur inattendue, examinez ou téléchargez les journaux d’activité de l’application. La journalisation a été activée avant le déploiement dans ce guide.
az webapp log tail --name "<app-name>" --resource-group "<resource-group-name>" az webapp log download --name "<app-name>" --resource-group "<resource-group-name>" --log-file appservice-logs.zip
Configurer l’authentification (facultatif)
Protégez votre point de terminaison App Service avec Microsoft Entra ID pour une utilisation en production.
Pour obtenir des instructions détaillées, consultez Configurer l’authentification App Service.
Après avoir activé l’authentification App Service, configurez DAB pour approuver les en-têtes d’identité injectés par App Service. Exécutez cette commande sur votre ordinateur de développement, puis régénérez et redéployez le package ZIP.
dab configure --runtime.host.authentication.provider AppService
Important
Le AppService fournisseur d’authentification dans dab-config.json fait confiance aux en-têtes injectés par l’authentification App Service. Vérifiez que l’authentification App Service est activée lors de l’utilisation de ce fournisseur en production. Pour plus d’informations, consultez Authentification simple (App Service).
Note
L’authentification de l'App Service protège l'accès à votre endpoint. Les autorisations d’entité DAB régissent toujours les opérations que le runtime autorise. Pour une démonstration anonyme, ne vous fiez pas aux en-têtes d’identité App Service. Pour l’accès en fonction du rôle, activez l’authentification App Service et mettez à jour les autorisations de votre entité pour utiliser des rôles authentifiés ou personnalisés au lieu de anonymous:*.
Résoudre les problèmes de déploiement
Utilisez les symptômes suivants pour identifier les problèmes de déploiement courants.
| Symptôme | Cause et résolution |
|---|---|
| Le déploiement ZIP retourne HTTP 400 sans détails | Vérifiez la racine du fichier ZIP et les séparateurs des entrées. Recréez l’archive ZIP en utilisant / comme séparateurs et assurez-vous qu’elle contient directement dab-config.json, startup.sh et dab/. |
L'application renvoie une erreur HTTP 503 et les journaux contiennent No .NET SDKs were found ou The application 'tool' does not exist |
La commande de démarrage tente d’exécuter dotnet tool. Régénérez le package avec la charge utile DAB restaurée et appelez Microsoft.DataApiBuilder.dll directement. |
| Le démarrage parvient à la commande de l’utilisateur, mais la phase de préchauffage d’App Service échoue | Vérifiez que le script de démarrage utilise des fins de ligne LF, utilisez sh startup.sh, confirmez les chemins des charges utiles DAB et vérifiez l'URL d'écoute ainsi que les erreurs liées à la base de données dans les journaux. |
| DAB démarre mais les demandes de base de données échouent | Vérifiez que l’identité managée de l’application web existe en tant qu’utilisateur de base de données et dispose des autorisations requises par les entités configurées. |
/health retourne HTTP 403 pendant que REST ou GraphQL fonctionne |
DAB est en cours d'exécution, mais l'appelant n'est pas autorisé à afficher le rapport d'état de santé complet. Validez plutôt la racine ou un point de terminaison d’entité autorisé. |
| Un déploiement ZIP plus volumineux retourne HTTP 502 | Vérifiez l’historique du déploiement avant de réessayer. Déployez de manière synchrone avec un délai d’expiration explicite, désactivez le redémarrage implicite et redémarrez une fois le déploiement terminé. |
Nettoyer les ressources
Lorsque vous n’avez plus besoin de l’application web et de ses ressources, supprimez le groupe de ressources.
az group delete --name "<resource-group-name>" --yes --no-wait