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 :
- Compte Azure avec un abonnement actif. Si vous ne possédez pas de compte Azure, vous pouvez créer un compte gratuit.
- Un compte GitHub. Vous pouvez aussi en obtenir un gratuitement.
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 :
- Entrez « base de données d’application web » dans la barre de recherche située en haut du portail Azure.
- 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.
Étape 2 : Dans la page Créer une application web + base de données, remplissez le formulaire comme suit.
- Groupe de ressources → Sélectionnez Créer nouveau et utilisez le nom msdocs-core-sql-tutorial.
- Région → Toute région Azure près de chez vous.
- Nom → msdocs-core-sql-XYZ, où XYZ représente trois caractères aléatoires. Ce nom doit être unique au sein d’Azure.
- Pile d’exécution → .NET 7 (STS).
- Ajouter Azure Cache pour Redis ? → Oui.
- Plan d’hébergement → De base. Vous pourrez ultérieurement effectuer un scale-up vers un niveau tarifaire de production.
- Sélectionnez SQLAzure 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.
- Sélectionnez Revoir + créer.
- Une fois la validation terminée, sélectionnez Créer.
É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.
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.
Étape 2 :
- 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.
- 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.
- 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
etAZURE_REDIS_CONNECTIONSTRING
.
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 :
- Connectez-vous à votre compte GitHub.
- Accédez à https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.
- Sélectionnez Fork.
- Sélectionnez Créer la duplication.
Étape 2 : Dans la page App Service, sélectionnez Centre de déploiement dans le menu de gauche.
Étape 3 : Dans la page Centre de déploiement :
- Dans Source, sélectionnez GitHub. Par défaut, GitHub Actions est sélectionné en tant que fournisseur de build.
- Connectez-vous à votre compte GitHub et suivez l’invite pour autoriser Azure.
- Dans Organisation, sélectionnez votre compte.
- Dans Dépôt, sélectionnez msdocs-app-service-sqldb-dotnetcore.
- Dans Branche, sélectionnez principal.
- 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
.
Étape 4 : Une fois sur la page GitHub de l’échantillon dupliqué, ouvrez Visual Studio Code dans le navigateur en appuyant sur la touche .
.
Étape 5 : Dans Visual Studio Code, dans le navigateur :
- Ouvrez DotNetCoreSqlDb/appsettings.json dans l’explorateur.
- Remplacez le nom de la chaîne de connexion
MyDbConnection
parAZURE_SQL_CONNECTIONSTRING
, qui correspond à la chaîne de connexion créée dans App Service précédemment.
Étape 6 :
- Ouvrez DotNetCoreSqlDb/Program.cs dans l’explorateur.
- Dans la méthode
options.UseSqlServer
, remplacez le nom de la chaîne de connexionMyDbConnection
parAZURE_SQL_CONNECTIONSTRING
. C’est là que la chaîne de connexion est utilisée par l’exemple d’application. - 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 laAZURE_REDIS_CONNECTIONSTRING
vue précédemment.
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"];
options.InstanceName = "SampleInstance";
});
Étape 7 :
- Ouvrez .github/workflows/main_msdocs-core-sql-XYZ dans l’explorateur. Ce fichier a été créé par l’Assistant Création App Service.
- Sous l’étape
dotnet publish
, ajoutez une étape pour installer l’outil Entity Framework Core avec la commandedotnet tool install -g dotnet-ef --version 7.0.14
. - 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.
Étape 8 :
- Sélectionnez l’extension Contrôle de code source.
- Dans la zone de texte, tapez un message de commit comme
Configure DB & Redis & add migration bundle
. - Sélectionnez Commiter et pousser.
Étape 9 : De retour dans la page Centre de déploiement du portail Azure :
- Sélectionnez Journaux d’activité. Une nouvelle exécution de déploiement a déjà démarré à partir de vos modifications commitées.
- 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.
É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.
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.
Étape 2 : Dans le terminal SSH :
- Exécutez
cd /home/site/wwwroot
. Voici tous vos fichiers déployés. - 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.
5. Accéder à l’application
Étape 1 : Dans la page App Service :
- Dans le menu de gauche, sélectionnez Vue d’ensemble.
- Sélectionnez l’URL de votre application. Vous pouvez également naviguer directement vers
https://<app-name>.azurewebsites.net
.
É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.
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 :
- Dans le menu de gauche, sélectionnez Journaux App Service.
- Sous Application Logging, sélectionnez Système de fichiers.
É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.
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 :
- Entrez le nom du groupe de ressources.
- Sélectionnez le groupe de ressources.
Étape 2 : Sur la page Groupe de ressources, sélectionnez Supprimer un groupe de ressources.
Étape 3 :
- Entrer le nom du groupe de ressources pour confirmer la suppression.
- Sélectionnez Supprimer.
Forum aux questions
- Quel est le coût de cette configuration ?
- Comment me connecter au serveur Azure SQL Database qui est sécurisé derrière le réseau virtuel avec d’autres outils ?
- Comment le développement d’applications locales fonctionne-t-il avec GitHub Actions ?
- Comment déboguer des erreurs pendant le déploiement de GitHub Actions ?
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é desqlcmd
. 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 :