Tutoriel : Déployer une application ASP.NET Core et Azure SQL Database sur Azure App Service

Dans ce tutoriel, vous allez apprendre comment déployer une application ASP.NET Core pilotée par les données sur Azure App Service et vous connecter à une base de données Azure SQL Database. Vous allez également déployer un Azure Cache pour Redis pour activer le code de mise en cache dans votre application. Azure App Service est un service d’hébergement web hautement évolutif, appliquant des mises à jour correctives automatiques, qui peut déployer facilement des applications sur Windows ou Linux. Bien que ce tutoriel utilise une application ASP.NET Core 7.0, le processus est le même pour les autres versions d’ASP.NET Core et d’ASP.NET Framework.

Ce didacticiel requiert les éléments suivants :

Exemple d’application

Pour explorer l’exemple d’application utilisé dans ce tutoriel, téléchargez-le à partir du dépôt https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore ou clonez-le en utilisant la commande Git suivante :

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

1. Créer l’App Service, la base de données et le cache

Dans cette étape, vous créez les ressources Azure. Les étapes utilisées dans ce tutoriel créent un ensemble de ressources sécurisées par défaut qui comprennent App Service, Azure SQL Database et Azure Cache. Pour le processus de création, vous devez spécifier :

  • Le nom de l’application web. Il s’agit du nom utilisé dans le cadre du nom DNS de votre application web sous la forme https://<app-name>.azurewebsites.net.
  • La Région du monde où l’application sera physiquement exécutée.
  • La Pile du runtime de l’application. C’est là que vous sélectionnez la version .NET à utiliser pour votre application.
  • Le Plan d’hébergement de l’application. Il s’agit du niveau tarifaire qui inclut l’ensemble des fonctionnalités et la scalabilité de l’application.
  • Le groupe de ressources pour l’application. Un groupe de ressources vous permet de regrouper (dans un conteneur logique) toutes les ressources Azure nécessaires à l’application.

Connectez-vous au portail Azure et procédez comme suit pour créer vos ressources Azure App Service.

Étape 1 : Dans le Portail Azure :

  1. Entrez « base de données d’application web » dans la barre de recherche située en haut du portail Azure.
  2. Sélectionnez l’élément intitulé Application web + Base de données sous le titre Place de marché. Vous pouvez également accéder directement à l’Assistant de création.

A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.

Étape 2 : Dans la page Créer une application web + base de données, remplissez le formulaire comme suit.

  1. Groupe de ressources → Sélectionnez Créer nouveau et utilisez le nom msdocs-core-sql-tutorial.
  2. Région → Toute région Azure près de chez vous.
  3. Nommsdocs-core-sql-XYZ, où XYZ représente trois caractères aléatoires. Ce nom doit être unique au sein d’Azure.
  4. Pile d’exécution.NET 7 (STS).
  5. Ajouter Azure Cache pour Redis ?Oui.
  6. Plan d’hébergementDe base. Vous pourrez ultérieurement effectuer un scale-up vers un niveau tarifaire de production.
  7. SQLAzure est sélectionné par défaut comme moteur de base de données. Azure SQL Database est un moteur de base de données PaaS (Platform as a Service) complètement managé qui s’exécute toujours sur la dernière version stable de SQL Server.
  8. Sélectionnez Revoir + créer.
  9. Une fois la validation terminée, sélectionnez Créer.

A screenshot showing how to configure a new app and database in the Web App + Database wizard.

Étape 3 : Le déploiement prend quelques minutes. Une fois le déploiement terminé, sélectionnez le bouton Accéder à la ressource. L’application App Service s’ouvre automatiquement, mais les ressources suivantes sont créées :

  • Groupe de ressources → Conteneur pour toutes les ressources créées.
  • Plan App Service → Définit les ressources de calcul pour App Service. Un plan Linux est créé sur le niveau De base.
  • App Service → Représente votre application et s’exécute dans le plan App Service.
  • Réseau virtuel → Intégré à l’application App Service, isole le trafic réseau principal.
  • Points de terminaison privés → Accéder aux points de terminaison pour le serveur de base de données et le cache Redis dans le réseau virtuel.
  • Interfaces réseau → Représente les adresses IP privées, une pour chacun des points de terminaison privés.
  • Serveur Azure SQL Database → Accessible uniquement de derrière son point de terminaison privé.
  • Azure SQL Database → Une base de données et un utilisateur sont créés pour vous sur le serveur.
  • Azure Cache pour Redis → Accessible uniquement de derrière son point de terminaison privé.
  • Zones DNS privées → Activer la résolution DNS du serveur de base de données et du cache Redis dans le réseau virtuel.

A screenshot showing the deployment process completed.

2. Vérifier les chaînes de connexion

L’Assistant de création a déjà généré des chaînes de connexion pour la base de données SQL et le cache Redis. Dans cette étape, recherchez les chaînes de connexion générées pour plus tard.

Étape 1 : Dans le menu de gauche, dans la page App Service, sélectionnez Configuration.

A screenshot showing how to open the configuration page in App Service.

Étape 2 :

  1. Faites défiler jusqu’au bas de la page et recherchez AZURE_SQL_CONNECTIONSTRING dans la section Chaînes de connexion. Cette chaîne a été générée à partir de la nouvelle base de données SQL par l’assistant de création. Pour configurer votre application, ce nom est tout ce dont vous avez besoin.
  2. Recherchez également AZURE_REDIS_CONNECTIONSTRING dans la section Paramètres de l’application. Cette chaîne a été générée à partir du nouveau cache Redis par l’assistant de création. Pour configurer votre application, ce nom est tout ce dont vous avez besoin.
  3. Si vous le souhaitez, vous pouvez sélectionner le bouton Modifier à droite de chaque paramètre et afficher ou copier sa valeur. Plus tard, vous modifierez votre application pour utiliser AZURE_SQL_CONNECTIONSTRING et AZURE_REDIS_CONNECTIONSTRING.

A screenshot showing how to create an app setting.

3. Déployer l’exemple de code

Dans cette étape, vous allez configurer le déploiement GitHub avec GitHub Actions. Cette méthode fait partie des nombreuses façons de déployer sur App Service, mais elle permet également de bénéficier d’une intégration continue dans votre processus de déploiement. Par défaut, chaque git push dans votre dépôt GitHub lance l’action de build et de déploiement.

Étape 1 : Dans une nouvelle fenêtre de navigateur :

  1. Connectez-vous à votre compte GitHub.
  2. Accédez à https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.
  3. Sélectionnez Fork.
  4. Sélectionnez Créer la duplication.

A screenshot showing how to create a fork of the sample GitHub repository.

Étape 2 : Dans la page App Service, sélectionnez Centre de déploiement dans le menu de gauche.

A screenshot showing how to open the deployment center in App Service.

Étape 3 : Dans la page Centre de déploiement :

  1. Dans Source, sélectionnez GitHub. Par défaut, GitHub Actions est sélectionné en tant que fournisseur de build.
  2. Connectez-vous à votre compte GitHub et suivez l’invite pour autoriser Azure.
  3. Dans Organisation, sélectionnez votre compte.
  4. Dans Dépôt, sélectionnez msdocs-app-service-sqldb-dotnetcore.
  5. Dans Branche, sélectionnez principal.
  6. Dans le menu principal, sélectionnez Enregistrer. App Service valide un fichier de flux de travail dans le référentiel GitHub choisi, au sein du répertoire .github/workflows.

A screenshot showing how to configure CI/CD using GitHub Actions.

Étape 4 : Une fois sur la page GitHub de l’échantillon dupliqué, ouvrez Visual Studio Code dans le navigateur en appuyant sur la touche ..

A screenshot showing how to open the Visual Studio Code browser experience in GitHub.

Étape 5 : Dans Visual Studio Code, dans le navigateur :

  1. Ouvrez DotNetCoreSqlDb/appsettings.json dans l’explorateur.
  2. Remplacez le nom de la chaîne de connexion MyDbConnection par AZURE_SQL_CONNECTIONSTRING, qui correspond à la chaîne de connexion créée dans App Service précédemment.

A screenshot showing connection string name changed in appsettings.json.

Étape 6 :

  1. Ouvrez DotNetCoreSqlDb/Program.cs dans l’explorateur.
  2. Dans la méthode options.UseSqlServer, remplacez le nom de la chaîne de connexion MyDbConnection par AZURE_SQL_CONNECTIONSTRING. C’est là que la chaîne de connexion est utilisée par l’exemple d’application.
  3. Supprimez la méthode builder.Services.AddDistributedMemoryCache(); et remplacez-la par le code suivant. Il change votre code de l’utilisation d’un cache en mémoire au cache Redis dans Azure, et il le fait en utilisant la AZURE_REDIS_CONNECTIONSTRING vue précédemment.
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"];
options.InstanceName = "SampleInstance";
});

A screenshot showing connection string name changed in Program.cs.

Étape 7 :

  1. Ouvrez .github/workflows/main_msdocs-core-sql-XYZ dans l’explorateur. Ce fichier a été créé par l’Assistant Création App Service.
  2. Sous l’étape dotnet publish, ajoutez une étape pour installer l’outil Entity Framework Core avec la commande dotnet tool install -g dotnet-ef --version 7.0.14.
  3. Sous la nouvelle étape, ajoutez une autre étape pour générer un bundle de migration de base de données dans le package de déploiement : dotnet ef migrations bundle --runtime linux-x64 -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate. Le bundle de migration est un exécutable autonome que vous pouvez exécuter dans l’environnement de production sans avoir besoin du SDK .NET. Le conteneur linux App Service a uniquement le runtime .NET, et non le SDK .NET.

A screenshot showing steps added to the GitHub workflow file for database migration bundle.

Étape 8 :

  1. Sélectionnez l’extension Contrôle de code source.
  2. Dans la zone de texte, tapez un message de commit comme Configure DB & Redis & add migration bundle.
  3. Sélectionnez Commiter et pousser.

A screenshot showing the changes being committed and pushed to GitHub.

Étape 9 : De retour dans la page Centre de déploiement du portail Azure :

  1. Sélectionnez Journaux d’activité. Une nouvelle exécution de déploiement a déjà démarré à partir de vos modifications commitées.
  2. Dans l’élément de journal de l’exécution du déploiement, sélectionnez l’entrée Générer/déployer des journaux avec l’horodatage le plus récent.

A screenshot showing how to open deployment logs in the deployment center.

Étape 10 : Vous êtes dirigé vers votre référentiel GitHub où vous voyez que l’action GitHub est en cours d’exécution. Le fichier de workflow définit deux étapes distinctes : la build et le déploiement. Attendez que l’exécution de GitHub affiche l’état Terminé. Cela prend quelques minutes.

A screenshot showing a GitHub run in progress.

4. Générer le schéma de la base de données

La base de données SQL étant protégée par le réseau virtuel, le moyen le plus simple d’exécuter les migrations de base de données dotnet est d’utiliser une session SSH avec le conteneur App Service.

Étape 1 : De retour dans la page App Service, dans le menu de gauche, sélectionnez SSH.

A screenshot showing how to open the SSH shell for your app from the Azure portal.

Étape 2 : Dans le terminal SSH :

  1. Exécutez cd /home/site/wwwroot. Voici tous vos fichiers déployés.
  2. Exécutez le bundle de migration généré par le workflow GitHub avec ./migrate. Si l’opération réussit, App Service se connecte avec succès à la base de données SQL. Seules les modifications apportées aux fichiers dans /home peuvent être conservées au-delà des redémarrages d’application. Les modifications effectuées en dehors de /home ne sont pas conservées.

A screenshot showing the commands to run in the SSH shell and their output.

5. Accéder à l’application

Étape 1 : Dans la page App Service :

  1. Dans le menu de gauche, sélectionnez Vue d’ensemble.
  2. Sélectionnez l’URL de votre application. Vous pouvez également naviguer directement vers https://<app-name>.azurewebsites.net.

A screenshot showing how to launch an App Service from the Azure portal.

Étape 2 : Ajoutez quelques tâches à la liste. Félicitations ! Vous exécutez une application ASP.NET Core pilotée par les données sécurisée dans Azure App Service.

A screenshot of the .NET Core app running in App Service.

Conseil

L’exemple d’application implémente le modèle cache-aside. Lorsque vous consultez un affichage de données pour la deuxième fois ou que vous rechargez la même page après avoir apporté des modifications aux données, le temps de traitement dans la page web affiche un temps beaucoup plus rapide, car il charge les données à partir du cache au lieu de la base de données.

6. Diffuser les journaux de diagnostic

Azure App Service capture tous les messages consignés dans la console pour vous aider à diagnostiquer les problèmes liés à votre application. L’exemple d’application sort les messages du journal de la console dans chacun de ses points de terminaison pour illustrer cette capacité.

Étape 1 : Dans la page App Service :

  1. Dans le menu de gauche, sélectionnez Journaux App Service.
  2. Sous Application Logging, sélectionnez Système de fichiers.

A screenshot showing how to enable native logs in App Service in the Azure portal.

Étape 2 : Dans le menu de gauche, sélectionnez Flux de journaux. Les journaux de votre application (notamment les journaux de plateforme et ceux issus de l’intérieur du conteneur) apparaissent.

A screenshot showing how to view the log stream in the Azure portal.

7. Nettoyer les ressources

Lorsque vous avez terminé, vous pouvez supprimer toutes les ressources de votre abonnement Azure en supprimant le groupe de ressources.

Étape 1 : Dans la barre de recherche située en haut du Portail Microsoft Azure :

  1. Entrez le nom du groupe de ressources.
  2. Sélectionnez le groupe de ressources.

A screenshot showing how to search for and navigate to a resource group in the Azure portal.

Étape 2 : Sur la page Groupe de ressources, sélectionnez Supprimer un groupe de ressources.

A screenshot showing the location of the Delete Resource Group button in the Azure portal.

Étape 3 :

  1. Entrer le nom du groupe de ressources pour confirmer la suppression.
  2. Sélectionnez Supprimer.

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal. :

Forum aux questions

Quel est le coût de cette configuration ?

Le prix des ressources de création est calculé comme suit :

  • Le plan App Service est créé au niveau De base. Il peut faire l’objet d’un scale-up ou d’un scale-down. Consultez la tarification App Service.
  • La base de données Azure SQL est créée au niveau serverless à usage général sur du matériel de série Standard avec le nombre minimal de cœurs. Il engendre un faible coût et peut être distribué dans d’autres régions. Vous pouvez baisser encore plus les coûts en réduisant sa taille maximale, ou vous pouvez lui appliquer un scale-up en ajustant le niveau de service, le niveau de calcul, la configuration matérielle, le nombre de cœurs, la taille de la base de données et la redondance de zone. Consultez Tarification Azure SQL Database.
  • L’Azure Cache pour Redis est créé au niveau De base avec la taille minimale du cache. Ce niveau a un faible coût. Vous pouvez le mettre à l’échelle vers des niveaux de performances plus élevés pour une disponibilité, un clustering et d’autres fonctionnalités plus avancés. Consultez Prix Azure Cache pour Redis.
  • Le réseau virtuel n’entraîne pas de frais, sauf si vous configurez des fonctionnalités supplémentaires, telles que le peering. Consultez Tarification du réseau virtuel Azure.
  • La zone DNS privée entraîne des frais minimes. Consultez la tarification d’Azure DNS.

Comment me connecter au serveur Azure SQL Database qui est sécurisé derrière le réseau virtuel avec d’autres outils ?

  • Pour un accès de base à partir d’un outil en ligne de commande, vous pouvez exécuter sqlcmd à partir du terminal SSH de l’application. Le conteneur de l’application n’est pas équipé de sqlcmd. Vous devez donc l’installer manuellement. N’oubliez pas que le client installé ne persiste pas après redémarrage de l’application.
  • Pour vous connecter à partir d’un client SQL Server Management Studio ou de Visual Studio, votre machine doit se trouver dans le réseau virtuel. Par exemple, il peut s’agir d’une machine virtuelle Azure connectée à l’un des sous-réseaux ou d’une machine dans un réseau local disposant d’une connexion VPN de site à site avec le réseau virtuel Azure.

Comment le développement d’applications locales fonctionne-t-il avec GitHub Actions ?

Prenez le fichier de workflow généré automatiquement à partir d’App Service comme exemple, chaque git push lance une nouvelle exécution de build et de déploiement. À partir d’un clone local du dépôt GitHub, vous faites en sorte que les mises à jour souhaitées le poussent vers GitHub. Par exemple :

git add .
git commit -m "<some-message>"
git push origin main

Comment déboguer des erreurs pendant le déploiement de GitHub Actions ?

Si une étape échoue dans le fichier de flux de travail GitHub généré automatiquement, essayez de modifier la commande ayant échoué pour générer une sortie plus détaillée. Par exemple, vous pouvez obtenir plus de sorties à partir de l’une des commandes dotnet en ajoutant l’option -v. Validez et envoyez vos modifications pour déclencher un autre déploiement à App Service.

Étapes suivantes

Passez au tutoriel suivant pour apprendre à sécuriser votre application avec un domaine personnalisé et un certificat.

Ou consultez les autres ressources :