Événements
Créer des applications intelligentes
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
Dans ce tutoriel, vous allez découvrir comment déployer une application ASP.NET Core pilotée par les données sur Azure App Service, et comment vous connecter à une instance d’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 8.0, le processus est le même pour les autres versions d’ASP.NET Core.
Dans ce tutoriel, vous allez apprendre à :
Si vous souhaitez simplement voir l’exemple d’application dans ce tutoriel s’exécutant dans Azure, exécutez simplement les commandes suivantes dans Azure Cloud Shell, puis suivez l’invite :
dotnet tool install --global dotnet-ef
mkdir msdocs-app-service-sqldb-dotnetcore
cd msdocs-app-service-sqldb-dotnetcore
azd init --template msdocs-app-service-sqldb-dotnetcore
azd up
Tout d’abord, vous configurez un exemple d’application pilotée par les données comme point de départ. Pour plus de commodité, l’exemple de référentiel inclut une configuration de conteneur de développement. Le conteneur de développement dispose de tout ce dont vous avez besoin pour développer une application, notamment la base de données, le cache et toutes les variables d’environnement nécessaires par l’exemple d’application. Le conteneur de développement peut s’exécuter dans un codespace GitHub, ce qui signifie que vous pouvez exécuter l’exemple sur n’importe quel ordinateur avec un navigateur web.
Étape 1 : Dans une nouvelle fenêtre de navigateur :
Étape 2 : dans la fourche GitHub :
Étape 3 : Dans le terminal codespace :
dotnet ef database update
.dotnet run
.Your application running on port 5093 is available.
s’affiche, sélectionnez Ouvrir dans le navigateur.
Vous devez voir l’exemple d’application dans un nouvel onglet du navigateur. Pour arrêter l’application, tapez Ctrl
+C
.Conseil
Vous pouvez interroger GitHub Copilot à propos de ce référentiel. Par exemple :
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
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 :
https://<app-name>-<hash>.<region>.azurewebsites.net
.Connectez-vous au portail Azure et procédez comme suit pour créer vos ressources Azure App Service.
Étape 1 : Dans le Portail Azure :
Étape 2 : Dans la page Créer une application web + base de données, remplissez le formulaire comme suit.
É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 :
L’Assistant Création a déjà généré la variable de connectivité pour vous en tant que chaînes de connexion .NET et de paramètres d’application. Toutefois, la meilleure pratique de sécurité consiste à éliminer complètement les secrets d’App Service. Vous allez déplacer vos secrets vers un coffre de clés et modifier votre paramètre d’application sur Références Key Vault à l’aide des connecteurs de services.
Conseil
Pour utiliser l’authentification sans mot de passe, consultez Comment modifier la connexion SQL Database pour utiliser une identité managée à la place ?
Étape 1 : Récupérer la chaîne de connexion existante
Étape 2 : Créer un coffre de clés pour la gestion sécurisée des secrets
Étape 3 : Sécuriser le coffre de clés avec un point de terminaison privé
Étape 4 :
Étape 5 : Établir la connexion Key Vault
Étape 6 : finaliser les paramètres du connecteur de base de données SQL
Étape 7 : configurer le connecteur Redis pour utiliser les secrets Key Vault
Étape 8 : vérifier l’intégration de Key Vault
@Microsoft.KeyVault(...)
, ce qui signifie qu’il s’agit d’une référence coffre de clés, car le secret est maintenant managé dans le coffre de clés.@Microsoft.KeyVault(...)
.En résumé, le processus de sécurisation de vos secrets de connexion est complexe :
Dans cette étape, vous configurez 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
vers votre référentiel GitHub lance l’action de build et de déploiement.
Étape 1 : Dans le menu de gauche, sélectionnez Déploiement>Centre de déploiement.
Étape 2 : Dans la page Centre de déploiement :
.github/workflows
.
Par défaut, le centre de déploiement crée une identité affectée par l’utilisateur pour que le flux de travail s’authentifie à l’aide de Microsoft Entra (authentification OIDC). Pour des options d’authentification alternatives, consultez Déployer sur App Service à l’aide de GitHub Actions.
Étape 3 : De retour dans le codespace GitHub de votre exemple de duplication, exécutez git pull origin starter-no-infra
.
Cela extrait le fichier de workflow nouvellement validé dans votre espace de code.
Étape 4 (Option 1 : avec GitHub Copilot) :
MyDatabaseContext
et sa configuration dans Program.cs.Étape 4 (Option 2 : sans GitHub Copilot) :
AZURE_SQL_CONNECTIONSTRING
, puis se connecte au Cache Redis via le paramètre d’application AZURE_REDIS_CONNECTIONSTRING
.Étape 5 (Option 1 : avec GitHub Copilot) :
dotnet publish
, puis sélectionnez Étape 5 (Option 2 : sans GitHub Copilot) :
dotnet publish
, ajoutez une étape pour installer l’outil Entity Framework Core avec la commande dotnet tool install -g dotnet-ef --version 8.*
.dotnet ef migrations bundle --runtime linux-x64 -o ${{env.DOTNET_ROOT}}/myapp/migrationsbundle
.
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 6 :
Configure Azure database and cache connections
. Vous pouvez également sélectionner Étape 7 : De retour dans la page Centre de déploiement du Portail Azure :
Étape 8 : Vous êtes dirigé vers votre référentiel GitHub dans lequel vous voyez l’action GitHub 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 Opération réussie. Cela prend environ 5 minutes.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
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 Linux dans App Service.
Étape 1 : De retour dans la page App Service, dans le menu de gauche,
Étape 2 : dans la session SSH :
cd /home/site/wwwroot
. Voici tous vos fichiers déployés../migrationsbundle -- --environment Production
. Si l’opération réussit, App Service se connecte avec succès à la base de données SQL. N’oubliez pas que --environment Production
correspond aux changements liés au code que vous avez apportés dans Program.cs.Dans la session SSH, seuls les changements apportés aux fichiers dans /home
peuvent être conservés au-delà des redémarrages de l’application. Les modifications effectuées en dehors de /home
ne sont pas conservées.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
Étape 1 : Dans la page App Service :
Étape 2 : Ajoutez quelques tâches à la liste. Félicitations, vous exécutez une application web dans Azure App Service, avec une connectivité sécurisée à Azure SQL Database.
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.
Azure App Service capture tous les journaux de la console pour vous aider à diagnostiquer les problèmes liés à votre application. L’exemple d’application inclut le code journalisation dans chacun de ses points de terminaison pour illustrer cette capacité.
Étape 1 : Dans la page App Service :
É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.
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 :
Étape 2 : Sur la page Groupe de ressources, sélectionnez Supprimer un groupe de ressources.
Étape 3 :
Dans cette étape, vous allez créer les ressources Azure et déployer un exemple d’application dans App Service sur Linux. Les étapes utilisées dans ce tutoriel créent un ensemble de ressources sécurisées par défaut, qui incluent App Service, Azure SQL Database et Azure Cache pour Redis.
Le conteneur de développement dispose déjà d’Azure Developer CLI (AZD).
Depuis la racine du référentiel, exécutez azd init
.
azd init --template dotnet-app-service-sqldb-infra
Lorsque vous y êtes invité, fournissez les réponses suivantes :
Question | Réponse |
---|---|
Le répertoire actif n’est pas vide. Voulez-vous initialiser un projet ici dans «<votre-répertoire>» ? | Y |
Que souhaitez-vous faire de ces fichiers ? | Conserver mes fichiers existants inchangés |
Entrer un nom pour le nouvel environnement | Tapez un nom unique. Le modèle AZD utilise ce nom dans le cadre du nom DNS de votre application web dans Azure (<app-name>-<hash>.azurewebsites.net ). Les caractères alphanumériques et les traits d’union sont autorisés. |
Connectez-vous à Azure en exécutant la commande azd auth login
et en suivant l’invite :
azd auth login
Créez les ressources Azure nécessaires et déployer le code de l’application avec la commande azd up
. Suivez l’invite pour sélectionner l’abonnement et l’emplacement souhaités pour les ressources Azure.
azd up
La commande azd up
prend environ 15 minutes (le cache Redis prend le plus de temps). Il compile et déploie également le code de votre application, mais vous allez modifier votre code ultérieurement pour utiliser App Service. Pendant son exécution, la commande fournit des messages sur le processus d’approvisionnement et de déploiement, y compris un lien vers le déploiement dans Azure. Une fois l’opération terminée, la commande affiche également un lien vers l’application de déploiement.
Ce modèle AZD contient des fichiers (azure.yaml et le répertoire infra) qui génèrent une architecture sécurisée par défaut avec les ressources Azure suivantes :
Une fois que la commande a fini de créer les ressources et de déployer le code de l’application pour la première fois, l’exemple d’application déployé ne fonctionne pas encore, car vous devez apporter de petits changements pour qu’il se connecte à la base de données dans Azure.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
Conseil
La chaîne de connexion de base de données SQL par défaut utilise l’authentification SQL. Pour une authentification sans mot de passe plus sécurisée, consultez Comment changer la connexion SQL Database pour utiliser une identité managée à la place ?
Le modèle AZD utilisé a généré les variables de connectivité pour vous en tant que paramètres d’application et les restitue sur le terminal pour plus de facilité. Les paramètres d’application sont un moyen de préserver les secrets de connexion hors de votre référentiel de code.
Dans la sortie AZD, recherchez les paramètres AZURE_SQL_CONNECTIONSTRING
et AZURE_REDIS_CONNECTIONSTRING
. Seuls les noms des paramètres sont affichés. Ils ressemblent à ceci dans la sortie AZD :
App Service app has the following connection strings: - AZURE_SQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE
AZURE_SQL_CONNECTIONSTRING
contient la chaîne de connexion à SQL Database dans Azure, et AZURE_REDIS_CONNECTIONSTRING
contient la chaîne de connexion au Cache Redis Azure. Vous devrez les utiliser plus tard dans votre code.
Pour votre commodité, le modèle AZD affiche le lien direct vers la page des paramètres d’application de l’application. Recherchez le lien et ouvrez-le dans un nouvel onglet de navigateur.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
Dans le codespace GitHub, démarrez une nouvelle session de conversation en sélectionnant la vue Conversation, puis en sélectionnant +.
Demandez « @workspace Comment l’application se connecte-t-elle à la base de données et au cache ? ». Copilot peut vous donner des explications sur la classe MyDatabaseContext
et sa configuration dans Program.cs.
Demandez « En mode production, je souhaite que l’application utilise la chaîne de connexion appelée AZURE_SQL_CONNECTIONSTRING pour la base de données ainsi que le paramètre d’application appelé AZURE_REDIS_CONNECTIONSTRING* ». Copilot peut vous faire une suggestion de code similaire à celle présentée dans les étapes de l’Option 2 : sans GitHub Copilot ci-dessous, et même vous demander d’effectuer le changement dans le fichier Program.cs.
Ouvrez Program.cs dans l’Explorateur, puis ajoutez la suggestion de code.
GitHub Copilot ne vous donne pas la même réponse à chaque fois, et elle n’est pas toujours correcte. Vous devrez peut-être poser plus de questions pour affiner sa réponse. Pour obtenir des conseils, consultez Que puis-je faire avec GitHub Copilot dans mon codespace ?
Avant de déployer ces changements, vous devez toujours générer un bundle de migration.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
Dans la mesure où la base de données SQL Database est protégée par le réseau virtuel, le moyen le plus simple d’exécuter des migrations de base de données consiste à ouvrir une session SSH avec le conteneur App Service. Toutefois, les conteneurs App Service Linux ne disposent pas du kit SDK .NET. Le moyen le plus simple d’exécuter des migrations de base de données consiste donc à charger un bundle de migration autonome.
Générez un bundle de migration pour votre projet avec la commande suivante :
dotnet ef migrations bundle --runtime linux-x64 -o migrationsbundle
Conseil
L’exemple d’application (consultez DotNetCoreSqlDb.csproj) est configuré pour inclure ce fichier migrationsbundle. Durant la phase azd package
, migrationsbundle va être ajouté au package de déploiement.
Déployez tous les changements avec azd up
.
azd up
Dans la sortie AZD, retrouvez l’URL de la session SSH et accédez-y dans le navigateur. Cela ressemble à ceci dans la sortie :
Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
Dans la session SSH, exécutez les commandes suivantes :
cd /home/site/wwwroot
./migrationsbundle -- --environment Production
Si cela réussit, App Service se connecte avec succès à la base de données. N’oubliez pas que --environment Production
correspond aux changements liés au code que vous avez apportés dans Program.cs.
Notes
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.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
Dans la sortie AZD, retrouvez l’URL de votre application et accédez-y dans le navigateur. L’URL ressemble à ceci dans la sortie AZD :
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
Ajoutez quelques tâches à la liste.
Félicitations, vous exécutez une application web dans Azure App Service, avec une connectivité sécurisée à Azure SQL Database.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
Azure App Service peut capturer les journaux de la console pour vous aider à diagnostiquer les problèmes liés à votre application. Pour plus de facilité, le modèle AZD a déjà activé la journalisation sur le système de fichiers local et expédie les journaux vers un espace de travail Log Analytics.
L’exemple d’application comprend des instructions de journalisation standard pour illustrer cette fonctionnalité, comme le montre l’extrait de code suivant :
public async Task<IActionResult> Index()
{
var todoItems = await _cache.GetAsync(_TodoItemsCacheKey);
if (todoItems != null)
{
_logger.LogInformation("Data from cache.");
var todoList = JsonConvert.DeserializeObject<List<Todo>>(Encoding.UTF8.GetString(todoItems));
return View(todoList);
}
else
{
_logger.LogInformation("Data from database.");
var todoList = await _context.Todo.ToListAsync();
var serializedTodoList = JsonConvert.SerializeObject(todoList);
await _cache.SetAsync(_TodoItemsCacheKey, Encoding.UTF8.GetBytes(serializedTodoList));
return View(todoList);
}
}
Dans la sortie AZD, retrouvez le lien pour diffuser en continu les journaux App Service et accédez-y dans le navigateur. Le lien ressemble à ceci dans la sortie AZD :
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Découvrez plus en détail la journalisation dans les applications .NET à travers la série Activer Azure Monitor OpenTelemetry pour les applications .NET, Node.js, Python et Java.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
Pour supprimer toutes les ressources Azure dans le présent environnement de déploiement, exécutez azd down
et suivez les invites.
azd down
SSH CONN CLOSED
Connected!
mais pas le moindre journalSelon votre abonnement et la région sélectionnée, vous pouvez voir que l’état du déploiement d’Azure SQL Database est Conflict
ainsi que le message suivant dans les détails de l’opération :
Location '<region>' is not accepting creation of new Windows Azure SQL Database servers at this time.
Cette erreur est probablement due à une limite de votre abonnement pour la région que vous sélectionnez. Essayez de choisir une autre région pour votre déploiement.
Vous pouvez être amené à voir cette erreur :
Unable to open a connection to your app. This may be due to any network security groups or IP restriction rules that you have placed on your app. To use log streaming, please make sure you are able to access your app directly from your current network.
Il s’agit généralement d’une erreur temporaire au premier démarrage de l’application. Patientez quelques minutes, puis vérifiez à nouveau.
Le démarrage du conteneur Linux prend quelques minutes. Patientez quelques minutes, puis vérifiez à nouveau.
Une fois que vous avez configuré les journaux de diagnostic, l’application redémarre. Vous devrez peut-être actualiser la page pour que les changements prennent effet dans le navigateur.
Le prix des ressources créées est calculé comme suit :
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.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
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.
Consultez Configurer le déploiement de GitHub Actions à partir du Centre de déploiement.
La chaîne de connexion par défaut à la base de données SQL est gérée par le connecteur de services. Elle se nomme defaultConnector, et utilise l’authentification SQL. Pour la remplacer par une connexion qui utilise une identité managée, exécutez les commandes suivantes dans Cloud Shell après avoir remplacé les espaces réservés :
az extension add --name serviceconnector-passwordless --upgrade
az sql server update --enable-public-network true
az webapp connection delete sql --connection defaultConnector --resource-group <group-name> --name <app-name>
az webapp connection create sql --connection defaultConnector --resource-group <group-name> --name <app-name> --target-resource-group <group-name> --server <database-server-name> --database <database-name> --client-type dotnet --system-identity --config-connstr true
az sql server update --enable-public-network false
Par défaut, la commande az webapp connection create sql --client-type dotnet --system-identity --config-connstr
effectue les opérations suivantes :
AZURE_SQL_CONNECTIONGSTRING
, que votre application utilise déjà à la fin du tutoriel.Votre application doit désormais disposer d’une connectivité à la base de données SQL. Pour plus d’informations, consultez Tutoriel : Connexion à des bases de données Azure à partir d’App Service sans secrets à l’aide d’une identité managée.
Conseil
Vous ne souhaitez pas activer de connexions via un réseau public ? Vous pouvez ignorer az sql server update --enable-public-network true
en exécutant les commandes à partir d’Azure Cloud Shell qui est intégré à votre réseau virtuel, si vous disposez de l’attribution de rôle Propriétaire dans votre abonnement.
Pour octroyer à l’identité l’accès nécessaire à la base de données sécurisée par le réseau virtuel, az webapp connection create sql
a besoin d’une connectivité directe avec authentification Entra ID au serveur de base de données. Par défaut, Azure Cloud Shell ne dispose pas de cet accès à la base de données sécurisée par le réseau.
Vous avez peut-être remarqué que la vue de conversation GitHub Copilot était déjà là pour vous quand vous avez créé le codespace. Pour plus de commodité, nous incluons l’extension de conversation GitHub Copilot dans la définition du conteneur (consultez .devcontainer/devcontainer.json). Cependant, vous avez besoin d’un compte GitHub Copilot (essai gratuit de 30 jours disponible).
Quelques conseils à appliquer quand vous parlez à GitHub Copilot :
@workspace
. Pour plus d’informations, consultez Use the @workspace agent.@workspace
) où apporter les modifications, mais il n’est pas autorisé à apporter les modifications pour vous. C’est à vous d’ajouter les changements suggérés et de les tester.Voici d’autres choses que vous pouvez dire pour affiner la réponse que vous obtenez :
Passez au tutoriel suivant pour apprendre à sécuriser votre application avec un domaine personnalisé et un certificat.
Ou consultez les autres ressources :
Événements
Créer des applications intelligentes
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantEntrainement
Module
Personnalisez une application Aspire .NET pour utiliser des ressources Azure existantes - Training
Dans ce module, vous allez apprendre comment déplacer des services de stockage pour votre application .NET Aspire hébergée par Azure à partir de conteneurs dans des services Azure natifs.
Certification
Microsoft Certified: Azure Developer Associate - Certifications
Générez des solutions de bout en bout dans Microsoft Azure pour créer des fonctions Azure Functions, implémenter et gérer des applications web, développer des solutions qui utilisent le Stockage Azure, et bien plus encore.