Tutoriel : Déployer une application ASP.NET Core et une base de données sur Azure Container Apps à l’aide de GitHub Actions
Dans ce tutoriel, vous allez apprendre à déployer une application ASP.NET Core et SQL Database sur Azure Container Apps à l’aide de Visual Studio et gitHub Actions. Vous allez également apprendre à gérer les migrations Entity Framework et les mises à jour de base de données dans GitHub Actions, bien que les concepts puissent également être appliqués à d’autres outils et environnements CI/CD.
Conditions préalables
Vous devez installer Visual Studio 2022 avec les charges de travail Développement web et ASP.NET et Développement Azure.
Si vous avez déjà installé Visual Studio :
- Installez les dernières mises à jour dans Visual Studio en sélectionnant Aide>Rechercher les mises à jour.
- Vérifiez que les charges de travail d'ASP.NET et de développement web ainsi que celles de développement Azure sont installées en sélectionnant Tools>Get Tools and Features.
Configurer l’exemple d’application localement
Utilisez l’exemple d’application TODO pour suivre ce didacticiel. Clonez l’application à partir de GitHub à l’aide de la commande suivante :
git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore
Accédez au dossier du projet et ouvrez la solution DotNetCoreSqlDb.sln
dans Visual Studio.
L’application TODO est prête à être activée, mais vous devez établir une connexion au localdb
SQL Server disponible dans Visual Studio. La connexion à localdb
vous permettra d’exécuter l’application et de conserver les todos (tâches à accomplir) tout en travaillant localement.
- Cliquez avec le bouton droit sur le nœud Services Connectés dans l’Explorateur de solutions Visual Studio et sélectionnez Ajouter une base de données SQL Server >.
- Dans la boîte de dialogue Se connecter à la dépendance, sélectionnez SQL Server Express LocalDB (local), puis sélectionnez Suivant.
- Dans la boîte de dialogue Se connecter à SQL Server Express LocalDB (local), définissez les valeurs suivantes :
- nom de chaîne de connexion : Conservez la valeur par défaut.
- valeur de chaîne de connexion : Conservez la valeur par défaut.
- Enregistrer la valeur de chaîne de connexion dans : Sélectionnez Aucun.
- Sélectionnez Suivant
- Dans le Résumé des modifications écran, laissez les paramètres à leurs valeurs par défaut et sélectionnez Terminer pour terminer le flux de travail.
Visual Studio affiche un résumé des dépendances de service, y compris la connexion à LocalDB
.
Ensuite, vous devez créer une migration initiale et l’utiliser pour mettre à jour la base de données locale avec le schéma approprié pour l’application TODO.
- Sélectionnez l’icône ... à droite de la liste des dépendances de service en regard de la connexion
LocalDB
et choisissez Ajouter une migration. - Dans la boîte de dialogue Entity Framework Migrations, attendez que Visual Studio recherche la classe
DbContext
incluse dans le projet. Une fois les valeurs chargées, sélectionnez Terminer. - Visual Studio génère un dossier
Migrations
dans le projet et crée une classe de migrations initiale. Cette classe peut être utilisée pour mettre à jour la base de données avec le schéma approprié. - Sélectionnez à nouveau l’icône ... en regard du service
LocalDB
, puis sélectionnez Mettre à jour la base de données. - Dans la boîte de dialogue Entity Framework Migrations, attendez que Visual Studio trouve de nouveau la classe
DbContext
, puis choisissez Terminer. Visual Studio exécute la migration et crée le schéma de la base de données sur le serveurLocalDB
.
Lancez le projet en sélectionnant le bouton d’exécution DotNetCoreSqlDb en haut de Visual Studio.
Lorsque l’application se charge, vérifiez que la base de données fonctionne correctement en entrant un nouveau TODO. La fonction TODO s’affiche dans la vue de liste principale de la page d’accueil de l’application.
Explorer la configuration de démarrage de l’application
L’exemple d’application inclut le code suivant dans le fichier Program.cs
:
if(builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<MyDatabaseContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
}
else
{
builder.Services.AddDbContext<MyDatabaseContext>(options =>
options.UseSqlServer(Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")));
}
Ce code applique les configurations suivantes :
- Lorsque l’application s’exécute localement, la chaîne de connexion
localdb
est extraite du fichierappsettings.json
et fournie à Entity Framework. Cette configuration permet à l'localdb
chaîne de connexion d’être vérifiée dans le contrôle de code source afin que d’autres développeurs puissent facilement se connecter à une base de données locale pendant le développement. Il permet également aux migrations Entity Framework d’être exécutées localement. Par défaut, Entity Framework ne découvre pas les chaînes de connexion stockées dans la variable d’environnement lors de l’exécution des migrations. - Lorsque l’application s’exécute dans des flux de travail GitHub Actions ou en production, la chaîne de connexion est extraite des variables d’environnement. Les variables d’environnement peuvent empêcher l’enregistrement des chaînes de connexion sécurisées utilisées en production dans le système de contrôle de version ou leur inclusion dans les fichiers de configuration.
Créer les services Azure
L’application nécessite la création des services Azure suivants pour un déploiement réussi :
- Application conteneur : obligatoire pour héberger et exécuter l’application déployée.
- Registre de conteneurs : stocke l’artefact d’image généré de l’application conteneurisée.
- SQL Database : une base de données Azure SQL pour stocker les données de l’application.
Les fonctionnalités de publication de Visual Studio peuvent gérer la création de ces ressources pour vous.
Créer Azure Container App et Azure Container Registry
Dans l’Explorateur de solutions Visual Studio, cliquez avec le bouton droit sur le nœud du projet de niveau supérieur, puis sélectionnez Publier.
Dans la boîte de dialogue de publication, sélectionnez Azure comme cible de déploiement, puis sélectionnez Suivant.
Pour la cible spécifique, sélectionnez Azure Container Apps (Linux), puis sélectionnez Suivant.
Créez une nouvelle application conteneur pour déploiement. Sélectionnez le bouton + Créer un nouveau pour ouvrir une boîte de dialogue et entrez les valeurs suivantes :
- nom de l’application conteneur : laissez la valeur par défaut ou entrez un nom.
- nom de l’abonnement : sélectionnez l’abonnement sur lequel effectuer le déploiement.
- Groupe de ressources : Sélectionnez nouveau et créez un groupe de ressources appelé msdocs-app-db-ef.
- Environnement Container Apps : sélectionnez Nouveau pour ouvrir la boîte de dialogue d’environnement des applications conteneur et entrez les valeurs suivantes :
- Nom de l’environnement : conservez la valeur par défaut.
- Emplacement : Sélectionnez un emplacement près de vous.
- Espace de travail Azure Log Analytics : sélectionnez Nouveau pour ouvrir la boîte de dialogue de l'espace de travail Log Analytics.
- Nom : Conservez la valeur par défaut.
- Emplacement : Sélectionnez un emplacement près de vous, puis sélectionnez Ok pour fermer la boîte de dialogue.
- Sélectionnez ok pour fermer la boîte de dialogue d’environnement des applications conteneur.
- Sélectionnez Créer pour fermer la boîte de dialogue des applications conteneur d'origine. Visual Studio crée la ressource d’application conteneur dans Azure.
Une fois la ressource créée, vérifiez qu’elle est sélectionnée dans la liste des applications conteneur, puis sélectionnez Suivant.
Vous devez créer un registre de conteneurs Azure pour stocker l’artefact d’image publié pour votre application. Sélectionnez l’icône verte + sur l’écran du registre de conteneurs.
Conservez les valeurs par défaut, puis sélectionnez Créer.
Une fois le registre de conteneurs créé, vérifiez qu’il est sélectionné, puis sélectionnez suivant.
Dans l’écran Type de déploiement, sélectionnez CI/CD à l’aide des flux de travail GitHub Actions (génère le fichier yml), puis choisissez Terminer. Si Visual Studio vous invite à autoriser l’utilisateur administrateur à accéder au conteneur Docker publié, sélectionnez Oui.
Visual Studio crée et affiche le profil de publication. La plupart des étapes de publication et des détails sont décrits dans le fichier gitHub Actions .yml
, qui peut être affiché en cliquant sur le bouton Modifier le flux de travail dans la vue récapitulative du profil de publication. Ce fichier est abordé plus en détail plus loin dans l’article.
Créer la base de données Azure SQL
- Dans l’Explorateur de solutions, faites un clic droit sur le nœud Services Connectés, puis sélectionnez Ajouter > Base de données SQL Server.
- Dans la boîte de dialogue Se connecter à la dépendance, sélectionnez Base de données Azure SQL, puis choisissez Suivant.
- Sélectionnez + Créer une pour ajouter une nouvelle base de données.
- Dans la boîte de dialogue Azure SQL Database, entrez les valeurs suivantes :
- Nom de la base de données : Conservez la valeur par défaut.
- Nom de l’abonnement : Sélectionnez le même abonnement que précédemment.
- groupe de ressources : sélectionnez le même groupe
msdocs-app-db-ef
créé précédemment. - serveur de base de données : sélectionnez Nouveau..., puis entrez les valeurs suivantes dans le nouveau pop-up :
- nom du serveur de base de données : Entrez un nom de serveur unique ou ajoutez des nombres aléatoires à la fin du nom généré automatiquement.
- Emplacement : Sélectionnez un emplacement proche de vous.
- nom d’utilisateur administrateur : Entrez une valeur de votre choix.
- mot de passe administrateur : entrez une valeur de votre choix.
- Mot de passe administrateur (confirmer) : Entrez le même mot de passe pour confirmer. Sélectionnez OK pour fermer la boîte de dialogue SQL Server
- Sélectionnez Créer pour créer sql Server et la base de données.
- Une fois l’opération terminée, sélectionnez le serveur dans la liste et choisissez Suivant
- Dans la boîte de dialogue Se connecter à la base de données Azure SQL, conservez les valeurs par défaut, mais assurez-vous que Aucun est sélectionné en bas pour l’option Enregistrer la valeur de la chaîne de connexion dans.
- Sélectionnez Terminer et Visual Studio crée les ressources SQL.
Connecter l’application conteneur à Azure SQL
Dans la page vue d’ensemble de l’application conteneur que vous avez créée, sélectionnez Connecteur de services (préversion) dans le volet de navigation gauche.
Sélectionnez + Créer pour créer une connexion.
Dans le volet Créer une connexion, entrez les valeurs suivantes :
Conteneur : Sélectionnez le conteneur dotnetcoresqldb que vous avez créé.
Type de service : sélectionnez la base de données SQL.
Abonnement : Sélectionnez le même abonnement que celui que vous avez utilisé pour créer l’application conteneur.
Nom de connexion : Conservez la valeur par défaut.
SQL Server : Sélectionnez le serveur de base de données que vous avez créé précédemment.
base de données SQL : Sélectionnez la base de données que vous avez créée précédemment.
Type de client : Sélectionner .NET.
Sélectionnez Suivant : Authentification et entrez les valeurs suivantes :
- Sélectionnez chaîne de connexion pour le type d’authentification.
- Nom d’utilisateur : Entrez le nom d’utilisateur que vous avez utilisé lors de la création du serveur de base de données.
- Mot de passe : Entrez le mot de passe que vous avez utilisé lors de la création du serveur de base de données.
Conservez le reste des paramètres par défaut et sélectionnez Suivant : Mise en réseau.
Laissez la valeur par défaut sélectionnée et choisissez Suivant : Vérifier + Créer.
Une fois qu’Azure a validé, les paramètres, sélectionnez Créer.
Après un instant, la connexion à la base de données SQL doit apparaître. Sélectionnez la flèche pour développer la connexion et voir la valeur AZURE_SQL_CONNECTIONSTRING. Ce nom de connexion correspond au nom de la chaîne de connexion de variable d’environnement définie dans l’exemple d’application.
Configurer le flux de travail GitHub Actions
Le fichier de flux de travail GitHub Actions généré par Visual Studio peut être utilisé par GitHub pour générer et déployer l’application sur Azure lorsque les modifications sont envoyées(s). Actuellement, ce processus fonctionne, mais l’application déployée lève une exception. Bien que la base de données Azure SQL ait été créée, une étape doit être ajoutée au flux de travail GitHub Actions pour générer le schéma. La chaîne de connexion pour la base de données Azure SQL peut être stockée en toute sécurité en tant que secret dans GitHub et récupérée par le flux de travail lors de son exécution.
Récupérer la chaîne de connexion et l’ajouter aux secrets GitHub
Dans le portail Azure, recherchez la base de données que vous avez créée dans la barre de recherche principale et sélectionnez-la dans les résultats.
Dans la page vue d’ensemble de la base de données, sélectionnez Chaînes de connexion dans le volet de navigation gauche.
Sous l’onglet ADO.NET, copiez la chaîne de connexion hors du champ de formulaire.
Accédez au dépôt GitHub dupliqué de l’application.
Sous l’onglet Paramètres, sélectionnez Secrets > Actions dans le volet de navigation gauche, puis choisissez Nouveau secret du référentiel.
Dans la page Nouveau secret, entrez les valeurs suivantes :
La chaîne de connexion est désormais stockée en toute sécurité dans les secrets du référentiel GitHub et peut être récupérée à l’aide d’un flux de travail GitHub.
Modifier le flux de travail GitHub Actions pour activer les migrations
Ouvrez le flux de travail GitHub Actions
.yml
fichier généré par Visual Studio en sélectionnant le bouton Modifier le flux de travail sur la page récapitulative de publication.Ajoutez le yaml suivant à la fin du fichier de flux de travail :
- name: Run EF run: | dotnet tool install --global dotnet-ef dotnet tool restore dotnet ef database update -p DotNetCoreSqlDb --connection '${{ secrets.DBConnection }}'
Ce code installe les outils en ligne de commande entity framework et exécute les migrations d’application. Lorsque le flux de travail s’exécute, le code utilise également le paramètre
connection
de la commandedatabase update
pour remplacer la chaîne de connexionlocaldb
stockée dans le fichierappsettings.json
avec la valeur ajoutée aux secrets GitHub.
Exécuter le flux de travail GitHub Actions et tester le déploiement
Validez les modifications apportées à l’application et envoyez-les au référentiel dupliqué à l’aide de la commande suivante :
git add --all git commit -m "Added GitHub Actions workflow" git push
Accédez au référentiel GitHub et sélectionnez l’onglet Actions. Une exécution de flux de travail doit avoir été déclenchée automatiquement si l’envoi a réussi.
Sélectionnez le flux de travail actif pour afficher les détails du journal pour chaque étape à mesure qu’elles se terminent. La migration s’exécute en dernier pour mettre à jour la base de données dans Azure.
Une fois le flux de travail terminé, l’application est déployée sur Azure Container Apps et connectée à la base de données avec un schéma mis à jour.
Vous pouvez tester le déploiement en accédant à la page d’accueil de l’application conteneur et en créant un TODO, comme vous l’avez fait localement. Vous pouvez toujours trouver l’URL de votre application conteneur sur la page vue d’ensemble de l’application dans le portail Azure.