Centre pour développeurs / .NET sur AWS / ...
Charges de travail .NET sur Amazon ECS et AWS Fargate
MODULE 2
Module 2 : Outils de développement de conteneurs .NET sur AWS
MODULE D'APPRENTISSAGE
AWS fournit des outils gratuits et des Toolkits d'environnement de développement intégrés qui aident à créer et déployer des applications .NET et .NET Framework conteneurisées sur Amazon ECS, Amazon ECR et AWS Fargate. Outre la console de gestion AWS, les intégrations avec Visual Studio, JetBrains Rider, Visual Studio Code et la CLI dotnet offrent la flexibilité nécessaire pour choisir les outils adaptés aux exigences de développement et d'intégration continue/déploiement continu (CI/CD)
Dans ce module, vous découvrirez comment travailler avec Amazon ECS, AWS Fargate et Amazon ECR en utilisant l'AWS Toolkit pour Visual Studio, et en ligne de commande en utilisant les extensions CLI dotnet.
Durée
60 minutes
Déploiement d'applications .NET dans des conteneurs sur AWS avec Visual Studio
L’AWS Toolkit pour Visual Studio est une extension gratuite pour Visual Studio sous Windows (il ne prend pas en charge Visual Studio pour Mac). Le Toolkit fournit une fenêtre d'explorateur sur plusieurs services AWS, notamment des services de conteneur, ainsi que des assistants qui aident à créer et à publier des applications dans le cloud AWS. Ces assistants prennent en charge le déploiement des applications .NET et .NET Framework sur AWS Elastic Beanstalk, Amazon ECS et ECR, AWS Fargate et AWS App Runner depuis Visual Studio (ce cours se concentre sur le déploiement sur ECS/ECR et Fargate).
Installez le Toolkit depuis le marketplace Visual Studio, https://marketplace.visualstudio.com/vs. Deux versions prises en charge sont disponibles pour Visual Studio exécuté sous Windows :
Le Toolkit peut être installé dans Visual Studio exécuté sur votre ordinateur de développement local, ainsi que dans les images Visual Studio, incluses dans la licence, fournies par Amazon Elastic Compute Cloud (EC2). Ces images constituent une solution idéale pour les scénarios de développement nécessitant une utilisation occasionnelle de Visual Studio sans engagement de licence à long terme.
Une fois que vous avez installé le Toolkit, il a besoin d'un ensemble d'informations d'identification pour autoriser l'accès aux services AWS en votre nom. Ces profils sont appelés profils d'identification, et le Toolkit vous guidera tout au long du processus s'ils doivent être créés. Toutefois, si vous avez déjà utilisé des outils tels que CLI AWS ou les outils AWS pour PowerShell sur votre ordinateur, le Toolkit détectera automatiquement les profils d'identification utilisés avec ces outils et les répertoriera dans la liste déroulante Profil : en haut de la fenêtre de l'outil d’explorateur AWS.
Si cette fenêtre n'est pas visible, utilisez l'élément explorateur AWS dans le menu Afficher de l'IDE pour l'afficher. Sélectionnez un profil d'identification (ou créez-en un), puis sélectionnez une région AWS dans la liste déroulante Région : dans la fenêtre de l'explorateur pour commencer.
Utilisation d'Amazon ECS et Amazon ECR depuis la vue de l'explorateur AWS
Après avoir sélectionné un profil d'identification et une région dans l'explorateur, vous pouvez accéder à vos ressources dans Amazon ECS et Amazon ECR depuis Visual Studio. Dans la fenêtre de l'explorateur AWS, après avoir développé l'élément Amazon Elastic Container Service dans l'explorateur et ses deux sous-éléments, Clusters et Référentiels, vous pourrez travailler avec des clusters et des référentiels existants dans votre registre privé ECR qui appartiennent à la région que vous avez sélectionnée. Le Toolkit ne permet pas de travailler avec votre registre public ECR.
Passez en revue chaque élément ci-dessous pour en savoir plus sur les fonctionnalités disponibles dans les menus contextuels du groupe de clusters, de chaque cluster, du groupe de référentiels et de chaque référentiel affiché dans la vue de l'explorateur.
Menu contextuel des clusters
Le menu contextuel du groupe de clusters propose les options suivantes :
- Actualiser : met à jour la collection de clusters affichée dans l'explorateur.
Menu contextuel des clusters
Le menu contextuel de chaque cluster déployé affiché dans l'explorateur propose des options pour :
- Afficher les détails du cluster (ouvre une nouvelle fenêtre de document).
- Supprimer le cluster.
Un cluster ne peut pas être supprimé pendant que des tâches sont en cours d'exécution. Les tâches peuvent être extraites d'un cluster en utilisant d'abord l'option du menu Afficher pour ouvrir la vue détaillée d'un cluster, puis en sélectionnant Modifier dans la vue et en définissant la valeur Tâches souhaitées sur 0. Une fois que toutes les tâches en cours ont été extraites, supprimez le cluster à l'aide du bouton Supprimer de la vue ou de l'entrée du menu contextuel. La vue détaillée du cluster est illustrée ci-dessous :
Menu contextuel des référentiels
Le menu contextuel du groupe de référentiels propose des options permettant de :
- Créer un référentiel : ouvre une fenêtre de dialogue dans laquelle vous pouvez entrer le nom du nouveau référentiel. Notez que les nouveaux référentiels ne peuvent être créés que dans votre registre privé.
- Actualiser : met à jour la collection de référentiels affichée dans l'explorateur.
Menu contextuel des référentiels
Le menu contextuel d'un référentiel répertorié dans le groupe de référentiels propose des options permettant de :
- Afficher : ouvre une nouvelle fenêtre de document répertoriant les images contenues dans le référentiel. Les commandes spécifiques requises pour envoyer des images vers ce référentiel peuvent également être consultées ici
- Supprimer : ouvre une fenêtre de dialogue pour confirmer la suppression du référentiel. Le Toolkit peut éventuellement supprimer toutes les images contenues dans le référentiel, avant de supprimer le référentiel lui-même (les référentiels qui ne sont pas vides ne peuvent pas être supprimés).
Déploiement sur Amazon ECS et Amazon ECR à partir de Visual Studio
En plus de travailler avec des clusters et des référentiels dans l'explorateur AWS, le Toolkit propose deux options de déploiement pour vous aider à déployer vos applications et images de conteneur sur Amazon ECS, AWS Fargate et Amazon ECR. Les deux options sont disponibles dans le menu contextuel de votre projet d'application dans l'explorateur de solutions : Publier sur AWS et Publier un conteneur sur AWS (ancienne version).
Les sections ci-dessous décrivent chacune de ces options et indiquent à quel moment vous pouvez choisir de les utiliser.
Publier sur AWS
Publier sur AWS prend en charge le déploiement d'applications .NET sur Amazon ECS avec AWS Fargate, AWS App Runner et des machines virtuelles dans AWS Elastic Beanstalk. L'option peut également être utilisée pour publier des images de conteneur sur Amazon ECR. Outre le déploiement de plusieurs services, à partir d'un portail IDE unique, Publier sur AWS propose également :
- La possibilité de créer des projets de déploiement personnalisés pour une application. Les projets de déploiement personnalisés permettent de créer des ressources AWS supplémentaires pendant le déploiement et de configurer des paramètres UX de déploiement personnalisés. En contrôlant le projet de déploiement dans le contrôle des sources, en plus de l'application, les équipes de développement ont toutes accès aux mêmes paramètres personnalisés et aux mêmes ressources de déploiement que celles applicables à l'application lorsqu'elle est déployée depuis Visual Studio.
- Une expérience de ligne de commande dotnet, disponible après l'installation du package AWS.Deploy.Tools depuis NuGet. L'expérience de ligne de commande propose les mêmes options, y compris celles ajoutées à l'aide de projets de déploiement personnalisés. L'utilisation de l'outil de ligne de commande est abordée plus loin dans cette section. Lors du déploiement sur des services de conteneur AWS, les applications n'ont pas besoin de disposer d'un Dockerfile préexistant, car un Dockerfile est généré si nécessaire.
Remarque : Publier sur AWS ne prend en charge que les applications .NET ; l'option ne prend pas en charge le déploiement d'applications utilisant .NET Framework.
Remarque : Le déploiement vers AWS App Runner est abordé dans un cours distinct intitulé Charges de travail .NET sur AWS App Runner.
Publier sur AWS comporte quelques installations pré-requises et vous indiquera si l'une d'entre elles est manquante. L’AWS Cloud Deployment Kit (CDK) est utilisé pour provisionner et configurer les ressources AWS afin de soutenir le déploiement de l'application. Le CDK nécessite l'installation de Node.js. Ouvrez un navigateur à l'adresse https://nodejs.org/en/ et installez la dernière version prise en charge à long terme (LTS) ou la version actuelle de Node.js. Une fois que Node.js est installé, ouvrez un shell de commande et exécutez la commande npm install -g aws-cdk pour installer le CDK. Une fois que ces deux prérequis sont installés, les déploiements à l'aide de Publier sur AWS peuvent être effectués.
Démarrez Publier sur AWS depuis le menu contextuel du projet d'application dans l'explorateur de solutions. L'application est analysée et plusieurs options de déploiement, appelées recettes, sont affichées. Pour les applications déjà configurées avec un Dockerfile, les recettes pour déployer l'application sur Amazon ECS avec AWS Fargate, ou pour envoyer une image de conteneur vers Amazon ECR, sont affichées en premier. Pour les applications qui ne sont pas encore configurées avec un Dockerfile, ces options sont affichées pour les applications Web ASP.NET Core et API Web (y compris Blazor Server) et les applications de console.
Remarque : Si l'application a déjà été déployée (sur n'importe quel service), l'interface utilisateur de publication proposera de la redéployer d'abord sur les cibles existantes. Dans ce cas, sélectionnez l'option de l'onglet Publier vers une nouvelle cible pour effectuer un nouveau déploiement au lieu d'un redéploiement.
La capture d'écran ci-dessous montre les recettes disponibles, au moment de la rédaction, pour une application Web ASP.NET Core 6. Si des projets de déploiement personnalisés sont disponibles pour l'application, ils seront répertoriés au-dessus des recettes fournies par AWS. Dans la capture d'écran, la recette à publier sur Amazon ECS à l'aide d'AWS Fargate est sélectionnée. Le volet de droite affiche les options de déploiement par défaut pour cette recette.
Un nom d'application est requis au minimum ; le nom du projet est utilisé par défaut. Selon l'application, il peut être possible de sélectionner le bouton Publier et de démarrer le déploiement immédiatement. Toutefois, si l'application effectue des appels vers les services AWS, un rôle personnalisé contenant des autorisations qui permettent à l'application d'accéder aux services et aux API de service devra être fourni. Cliquez sur le bouton Modifier les paramètres pour spécifier, si nécessaire, un rôle pour l'application et toute modification d'infrastructure souhaitée avant le déploiement. Par exemple, des modifications peuvent être apportées à la mémoire des tâches et au processeur, à la configuration du réseau, à l'équilibrage de charge et aux exigences de mise à l'échelle. La capture d'écran ci-dessous montre certaines des options disponibles pour la recette sélectionnée. Les catégories de gauche (calcul, autorisations, VPC, etc.) illustrent la gamme d'options qui peuvent être spécifiées pour le déploiement.
Les conteneurs Windows sur Fargate peuvent exécuter à la fois .NET Framework et les applications .NET. Fargate prend actuellement en charge deux versions de Windows Server pour les applications : Windows Server 2019 Full et Windows Server 2019 Core. Quelle que soit la version que vous utilisez, AWS gère les licences du système d'exploitation Windows pour vous.
Une fois que les options requises sont définies, cliquez sur le bouton Publier pour démarrer le déploiement.
Pour l'exemple d'application Web ASP.NET Core présenté ci-dessus, Publier sur AWS suivra plusieurs étapes, qui peuvent être suivies dans la sortie du journal de déploiement :
- L'image du conteneur est créée à l'aide d'un Dockerfile existant ou d'un Dockerfile généré automatiquement.
- L'authentification est effectuée sur votre registre privé Amazon ECR et l'image est envoyée vers un référentiel. Par défaut, un référentiel portant le même nom que le déploiement de l'application est utilisé, mais un autre référentiel peut être sélectionné avant de commencer la publication, en modifiant les paramètres de déploiement (le nom du référentiel se trouve dans les paramètres de la catégorie Build du projet).
- Un projet CDK temporaire est généré, définissant les ressources nécessaires pour prendre en charge le déploiement, par exemple la définition des tâches, les paramètres du cluster, la configuration réseau et d'autres paramètres.
- Enfin, le projet CDK est utilisé pour déployer une pile AWS CloudFormation afin de lancer et de configurer les ressources, ainsi que l'application déployée sur ces ressources.
Une fois le déploiement terminé, des informations récapitulatives sur la pile CloudFormation s'affichent dans la fenêtre, ainsi qu'une URL vers l'application déployée (si elle a été déployée en tant que service). Cliquez sur l'URL pour lancer un navigateur sur l'application déployée.
Déploiement à partir de pipelines CI/CD
Publier sur AWS dans Visual Studio est une option conçue pour les développeurs qui itèrent sur une application sans avoir à quitter l'IDE. Pour l'automatisation CI/CD ou pour les développeurs qui ne travaillent pas sur un système Windows, AWS fournit une version en ligne de commande qui étend la CLI dotnet. Cet outil est disponible sur NuGet, dans le package AWS.Deploy.Tools.
Pour l'installer, ouvrez un shell de ligne de commande et exécutez la commande :
dotnet tool install -g aws.deploy.tools
Une fois qu'il est installé, consultez les options de commande de niveau supérieur en exécutant :
dotnet aws
Pour démarrer un déploiement à partir du dossier qui contient votre projet d'application, exécutez :
dotnet aws deploy
Une aide supplémentaire sur l'outil et sur toutes ses commandes est disponible à l'aide de l'option --help.
Le déploiement d'applications conteneurisées sur AWS à l'aide de l'extension de CLI dotnet AWS.Deploy.Tools, y compris son utilisation dans l'automatisation CI/CD, sera abordé plus en détail ultérieurement dans ce module, dans la section intitulée Déploiement de conteneurs .NET sur AWS à partir de la ligne de commande.
Suppression des déploiements de conteneurs réalisés avec Publier sur AWS
Les déploiements d'applications réalisés à l'aide de Publier sur AWS sont simplement des piles AWS CloudFormation. Vous pouvez supprimer un déploiement de l'une des manières suivantes :
- Accéder au tableau de bord CloudFormation dans la console de gestion AWS et supprimer la pile associée.
- Dans Visual Studio, développez l'entrée AWS CloudFormation dans l'explorateur AWS, sélectionnez la pile et choisissez Supprimer dans le menu contextuel de la pile.
- À partir d'un shell de ligne de commande, en utilisant le package AWS.Tools.Deploy installé, exécutez la commande dotnet aws delete-deployment.
À partir d'un shell de ligne de commande, vous pouvez également utiliser la commande Remove-CFNStack des Outils AWS pour PowerShell, ou la commande de CLI AWS aws cloudformation delete-stack, pour supprimer les piles représentant une application déployée basée sur un conteneur.
Récapitulatif
Publier sur AWS propose un mécanisme simple à utiliser et extensible qui permet de déployer des applications .NET adaptées à une exécution dans un conteneur sur AWS, sans avoir besoin de connaissances approfondies d'AWS ni même du développement dans le cloud. Des recettes intégrées et personnalisables permettent aux développeurs de déployer et de redéployer facilement des applications pendant le développement depuis Visual Studio vers Amazon ECS avec AWS Fargate, ainsi que vers d'autres services basés sur des conteneurs. Publier sur AWS est le choix recommandé pour déployer des applications Web ASP.NET Core et API Web, y compris Blazor côté serveur, dans des conteneurs sur AWS.
Publier un conteneur sur AWS
Publier un conteneur sur AWS est l'approche originale, basée sur un assistant, pour déployer des applications .NET conteneurisées sur AWS depuis Visual Studio. Désormais considérée comme une ancienne approche, l'assistant est toujours pris en charge dans Visual Studio au moment de la rédaction de cet article, mais il pourrait être supprimé dans une version future.
Par rapport à Publier sur AWS, Publier un conteneur sur AWS présente les fonctionnalités et restrictions suivantes :
- Prend en charge le déploiement uniquement sur Amazon ECS (avec ou sans AWS Fargate). Publier sur AWS prend également en charge AWS App Runner et les services de machines virtuelles tels qu'AWS Elastic Beanstalk.
- Prend en charge le déploiement vers des conteneurs d'applications Web ASP.NET Core et d'API Web, ainsi que d'applications de console. Ce déploiement est similaire à celui proposé par Publier sur AWS.
- Nécessite qu'un Dockerfile existe déjà dans l'application. Contrairement à Publier sur AWS, un Dockerfile n'est pas généré automatiquement. Si le projet de l'application ne contient pas de Dockerfile, l'option Publier un conteneur sur ECS n'est pas affichée dans le menu contextuel du projet.
- Ne dépend pas du kit de développement cloud AWS et du fichier Node.js.
- Le déploiement ne peut pas être modifié au-delà des paramètres disponibles dans l'assistant. Les projets de déploiement personnalisés tels que ceux proposés par Publier sur AWS ne sont pas disponibles.
- Peut être utilisé avec une extension d'outil de la CLI dotnet, Amazon.ECS.Tools, disponible sur NuGet. À l'aide d'un simple fichier de configuration au format JSON, aws-ecs-tools-defaults.json, les paramètres de configuration choisis dans l'assistant peuvent être partagés dans une expérience en ligne de commande, en commençant par exécuter dotnet ecs dans un shell de ligne de commande. L'option de ligne de commande convient aux développeurs qui ne sont pas en mesure d'utiliser Visual Studio ou l’AWS Toolkit, ou pour les déploiements automatisés dans un système CI/CD.
Remarque : l'assistant contient une bannière recommandant de passer à la nouvelle expérience Publier sur AWS. L'ancien assistant sera supprimé à l'avenir du Toolkit.
L'assistant préremplira les champs Informations d'identification AWS et Région en fonction des sélections actuelles dans la fenêtre de l'explorateur AWS. Par défaut, la configuration de publication d'un projet est déployée dans un référentiel nommé après le projet, qui sera créé si nécessaire.
La liste déroulante Cible de déploiement en bas de la page contient quatre options possibles :
- Service sur un cluster ECS convient aux applications qui doivent s'exécuter 24 h/24 et 7 j/7, par exemple une application Web ou éventuellement une API Web.
- Exécuter la tâche sur un cluster ECS convient au code d'application qui s'exécute une seule fois puis se ferme, par exemple une application basée sur une console. Une fois que la tâche est terminée, elle peut être exécutée à nouveau manuellement selon les besoins.
- Tâche planifiée sur un cluster ECS convient aux tâches qui s'exécutent périodiquement avant de se fermer. Les exemples incluent les processus par lots ou les tâches ETL exécutées la nuit.
- Envoyer uniquement l'image Docker vers Amazon Elastic Container Registry permet de créer l'image de conteneur pour l'application, de l'authentifier auprès de votre registre privé et de l’envoyer vers un référentiel du registre privé. Les référentiels de votre registre public ne sont pas pris en charge.
Après avoir choisi la cible appropriée, le bouton Suivant passe à une page dans laquelle la configuration du lancement est définie. Les données sélectionnées ici et dans les pages suivantes sont renseignées pour vous dans une définition de tâche.
Si vous choisissez Créer un cluster vide pour le champ Cluster ECS, l'assistant est bloqué dans un déploiement à l'aide d'AWS Fargate. Pour effectuer un déploiement sur Amazon ECS sans utiliser AWS Fargate, vous devez d'abord créer les ressources de cluster nécessaires à l'aide d'autres outils tels que la Console de gestion AWS, puis sélectionner le cluster existant dans l'assistant.
Si Service sur un cluster ECS a été sélectionné au début de l'assistant, la page suivante demande le nombre de tâches, d'instances de conteneur, à exécuter (1 par défaut) et le pourcentage minimum et maximum de tâches que le service doit conserver. Pour utiliser un service existant, sélectionnez son nom ici ou définissez le nom du nouveau service à créer. Si l'option Tâche sur un cluster ECS a été sélectionnée, il vous sera demandé de définir le nombre de tâches et de donner un nom au groupe de tâches. La capture d'écran ci-dessous montre l'option Service sur un cluster ECS lors du déploiement d'une application Web.
Si la cible de déploiement est un service, la page suivante de l'assistant permet de configurer un Application Load Balancer, ainsi qu'une page de surveillance de l'état. Par défaut, aucun équilibreur de charge n'est configuré. Pour les cibles de déploiement basées sur les tâches, la page de l'équilibreur de charge n'est pas affichée, car les conteneurs qui composent la tâche s'exécutent une seule fois et se ferment.
La page finale des paramètres de l'assistant contient d'autres options qui seront incluses dans la définition de tâche, notamment si une définition de tâche existante doit être utilisée ou si une définition doit être créée. Ici également, sélectionnez le rôle IAM pour le code de l'application (rôle de tâche) si l'application fait des appels aux services AWS, et le rôle d'exécution qui sera assumé par Amazon ECS en accordant l'accès à vos images de registre privé et aux autres ressources nécessaires au provisionnement des ressources pendant le déploiement. Enfin, spécifiez le port du conteneur qui doit être exposé et toute variable d'environnement supplémentaire.
Une fois que tous les paramètres sont définis, la sélection de Publier démarre le déploiement. À l'instar de la nouvelle fonctionnalité Publier sur AWS, le Toolkit suivra un certain nombre d'étapes pour réaliser le déploiement. Ces étapes peuvent être suivies dans la sortie de l'avancement de l'assistant ou dans le volet Amazon Web Services de la fenêtre de sortie de l'IDE.
- L'application sera créée et l'image du conteneur sera créée.
- L'authentification est effectuée sur votre registre privé Amazon ECR et l'image est envoyée vers un référentiel. Le nom du référentiel à utiliser a été spécifié sur la première page de l'assistant ; il s'agit par défaut du nom du projet.
- Le cluster et les autres ressources correspondant aux paramètres choisis dans l'assistant sont provisionnés et configurés.
Une fois que le provisionnement des ressources du cluster est terminé, le Toolkit ouvre une vue du cluster. Vous pouvez y suivre la progression des tâches qui commencent à s'exécuter pour atteindre le nombre spécifié dans l'assistant et, pour les services, trouver l'URL qui permet d'accéder à l'application déployée si un équilibreur de charge a été sélectionné dans l'assistant.
Déploiement sur des conteneurs à partir de pipelines CI/CD
L'assistant Publier un conteneur sur AWS de Visual Studio est conçu pour les développeurs qui itèrent sur une application au sein de leur IDE. Pour l'automatisation CI/CD ou pour les développeurs qui ne travaillent pas sur un système Windows, AWS fournit un package d'outils NuGet, Amazon.ECS.Tools, qui étend la CLI dotnet. Pour installer cet outil, ouvrez un shell de ligne de commande et exécutez la commande :
dotnet tool install -g Amazon.ECS.Tools.
Pour démarrer après l'installation, exécutez la commande suivante pour afficher les options de commande de niveau supérieur :
dotnet ecs
Pour démarrer un déploiement, depuis le dossier du projet de votre application, exécutez :
dotnet ecs deploy
Une aide supplémentaire sur l'outil et sur toutes ses commandes est disponible à l'aide de l'option --help.
Pour les applications préalablement déployées à l'aide de l'assistant dans Visual Studio, les paramètres sélectionnés dans l'assistant sont disponibles par défaut dans un fichier texte au format JSON, aws-ecs-tols-defaults.json. Ce fichier se trouve dans le répertoire du projet de l'application. Ces paramètres seront lus par l'outil de ligne de commande et pourront être remplacés si nécessaire.
Le déploiement d'applications conteneurisées sur AWS à l'aide de l'extension de CLI dotnet Amazon.ECS.Tools, y compris son utilisation dans l'automatisation CI/CD, sera abordé plus en détail ultérieurement dans ce module, dans la section intitulée Déploiement de conteneurs .NET sur AWS à partir de la ligne de commande.
Suppression des déploiements réalisés avec Publier un conteneur sur AWS
Pour supprimer les déploiements effectués à l'aide de l'assistant Publier un conteneur sur AWS, utilisez l'une des méthodes suivantes :
- Dans la console de gestion AWS, accédez au tableau de bord ECS, sélectionnez le cluster dans la liste affichée, puis choisissez Supprimer le cluster dans la vue détaillée du cluster.
- Dans Visual Studio, ouvrez la vue du cluster pour l'application déployée, choisissez Modifier et définissez le nombre de tâches souhaitées sur 0. Quand plus aucune tâche n'est en cours d'exécution, sélectionnez Supprimer dans la vue des clusters, ou dans le menu contextuel de l'entrée du cluster dans la vue de l'explorateur AWS pour supprimer le cluster.
- Une fois le cluster supprimé, vous pouvez également supprimer le référentiel contenant les images utilisées lors du déploiement.
Une fois le cluster supprimé, vous pouvez également supprimer le référentiel contenant les images utilisées lors du déploiement.
Remarque : L'extension de ligne de commande Amazon.ECS.Tools ne prend pas en charge la suppression des déploiements.
Récapitulatif
Publier un conteneur sur AWS propose une approche basée sur un assistant pour déployer des applications sur Amazon ECS (avec ou sans AWS Fargate) et Amazon ECR. Contrairement à Publier sur AWS, Publier un conteneur sur ECS ne prend en charge qu'Amazon ECS, AWS Fargate et Amazon ECR comme cibles de déploiement. De plus, les options de déploiement sont limitées à celles fournies dans l'assistant, ou à son équivalent en ligne de commande, et ne peuvent pas être personnalisées. Publier sur AWS est l'outil de remplacement privilégié pour le déploiement sur AWS des applications .NET. Toutefois, pour les équipes qui ne sont pas en mesure d'adopter la nouvelle expérience, l'ancien assistant et l'extension de ligne de commande sont toujours pris en charge et peuvent être utilisés.
Déploiement de conteneurs .NET sur AWS à partir de la ligne de commande
AWS fournit deux outils de ligne de commande gratuits pour travailler avec des applications .NET conteneurisées. Les deux outils sont distribués sur NuGet et étendent l'expérience de CLI dotnet avec des commandes supplémentaires qui permettent le déploiement d'applications .NET sur Amazon ECS, AWS Fargate et Amazon ECR. Ces extensions de CLI dotnet ne prennent pas en charge le déploiement d'applications .NET Framework.
Remarque : Au moment de la rédaction de cet article, bien que les projets de déploiement personnalisés puissent être utilisés à la fois à partir de la ligne de commande et de Visual Studio, ils ne peuvent être créés qu'à l'aide de l'outil en ligne de commande.
AWS.Deploy.Tools
Le package AWS.Deploy.Tools sur NuGet est l'équivalent en ligne de commande Publier sur AWS dans Visual Studio sous Windows. La version en ligne de commande, qui peut être utilisée sur les plateformes Windows, macOS et Linux, présente les mêmes recettes de déploiement que celles disponibles dans Visual Studio. Elle inclut la possibilité de sélectionner des projets de déploiement personnalisés définis pour une application. Le package est maintenu en tant que projet open source sur GitHub.
Remarque : Au moment de la rédaction de cet article, bien que les projets de déploiement personnalisés puissent être utilisés à la fois à partir de la ligne de commande et de Visual Studio, ils ne peuvent être créés qu'à l'aide de l'outil en ligne de commande.
Pour installer le package, ouvrez un shell de ligne de commande et exécutez la commande :
dotnet tool install -g aws.deploy.tools
De nouvelles versions sont publiées périodiquement ; exécutez la commande suivante pour la mise à jour :
dotnet tool update -g aws.deploy.tools
À l'instar de Publier sur AWS dans Visual Studio, le package AWS.Deploy.Tools dépend de Node.js et d’AWS Cloud Development Kit. Veillez donc à les installer également.
Après l'installation, pour vérifier que celle-ci a réussi et pour afficher les options disponibles de commande de niveau supérieur, exécutez :
dotnet aws
Pour démarrer un déploiement en ligne de commande, exécutez la commande suivante à partir du dossier contenant le fichier du projet de votre application (fichier .csproj) :
dotnet aws deploy
L'application est analysée et un ensemble de recettes de déploiement numérotées est affiché, parmi lesquelles vous pouvez choisir. Dans la capture d'écran ci-dessous, l'outil a terminé l'analyse d'une application qui ne possède pas actuellement de Dockerfile. Il recommande par conséquent un déploiement sur des machines virtuelles dans AWS Elastic Beanstalk. Toutefois, cela peut être modifié en saisissant le numéro de recette souhaité, le numéro 3 dans ce cas, à déployer sous forme de conteneurs à l'aide d'AWS Fargate. Un Dockerfile sera créé lors du déploiement et ajouté au projet.
Une fois que la recette est sélectionnée, une série d'invites rassemble les informations requises, telles que le nom du déploiement (qui est par défaut le nom du projet, mais qui peut être modifié). Les autres paramètres optionnels sont ajustables à l'aide de sous-menus numérotés.
Dans la capture d'écran ci-dessus, appuyer sur « 4 » pour sélectionner un rôle IAM personnalisé que l'application devra assumer lors de son exécution, au lieu qu'un nouveau rôle vide soit créé par le déploiement. Des options avancées supplémentaires à configurer pour le déploiement sont disponibles en saisissant « plus ».
Une fois que vous êtes satisfait des paramètres, appuyez sur la touche Entrée pour démarrer le déploiement. Pour les scénarios dans lesquels l'application n'a pas besoin qu'un rôle personnalisé soit spécifié et où les valeurs par défaut proposées sont acceptables, il suffit d'appuyer deux fois sur la touche Entrée : une fois pour confirmer le nom par défaut du déploiement et une fois de plus pour démarrer le déploiement de l'application.
À l'instar du déploiement depuis Visual Studio, si une recette de conteneur a été sélectionnée, un Dockerfile est généré si nécessaire, puis l'image est créée et transmise à Amazon ECR (l'outil s'authentifie pour vous) et un projet CDK est créé pour provisionner l'infrastructure, qui est ensuite déployée sur AWS CloudFormation. Les événements et autres informations sur le statut du déploiement sont transmis au terminal. Enfin, l'URL du point de terminaison de l'application est générée, ainsi que d'autres informations récapitulatives telles que les noms du cluster et des services.
Le redéploiement des applications est également pris en charge sur la ligne de commande. Lorsque la commande dotnet aws deploy est exécutée dans le dossier d'un projet qui a été préalablement déployé, elle répertorie d'abord les déploiements existants à sélectionner, puis l'option permettant de sélectionner une recette pour un nouveau déploiement.
Déploiement de conteneurs à partir de pipelines CI/CD
AWS.Deploy.Tools peut être utilisé dans le cadre de pipelines d'intégration et de livraison continues. Toutefois, dans ces scénarios, les invites peuvent poser problème. Pour désactiver l'invite, ajoutez l'option --silent à votre commande.
Lorsque les invites sont désactivées, l'outil ne peut pas collecter les paramètres de déploiement lors de son exécution. Pour fournir tous les paramètres obligatoires et facultatifs, spécifiez-les dans un fichier texte au format JSON et fournissez le nom du fichier, en ajoutant éventuellement le chemin, à la commande de déploiement avec l'option --apply :
dotnet aws deploy --apply settings.json --silent
La création d'un fichier de paramètres n'entre pas dans le cadre de ce cours. Un lien vers la définition du fichier dans le référentiel GitHub de l'outil est disponible dans la section intitulée Création d'un fichier de paramètres de déploiement dans le référentiel GitHub AWS .NET.
Création de projets de déploiement personnalisés
Bien que ce sujet ne soit pas au programme de ce cours et qu'il ne soit pas abordé plus en détails, sachez que vous pouvez créer des projets de déploiement personnalisés pour vos applications .NET conteneurisées. La création d'un projet de déploiement personnalisé vous permet d'ajouter une infrastructure supplémentaire ou d'autres ressources pour prendre en charge votre application déployée et personnaliser l'environnement d'exécution. Les projets de déploiement personnalisés peuvent être enregistrés dans le contrôle des sources, en même temps que votre application, et partagés avec l'équipe de développement, afin de garantir que tout le monde déploie avec les mêmes paramètres et personnalisations, que ce soit depuis Visual Studio ou en utilisant la ligne de commande.
Consultez https://aws.github.io/aws-dotnet-deploy/docs/deployment-projects/cdk-project/ pour plus d'informations sur l'utilisation de projets de déploiement personnalisés avec Publier sur AWS dans Visual Studio ou AWS.Deploy.Tools en ligne de commande.
Suppression des déploiements de conteneurs réalisés avec AWS.Deploy.Tools
Les déploiements d'applications effectués à l'aide d'AWS.Deploy.Tools et de Publier sur AWS dans Visual Studio peuvent être facilement supprimés en utilisant la ligne de commande grâce à la commande suivante :
dotnet aws delete-deployment deployment-name
Remplacez deployment-name par le nom de la pile AWS CloudFormation qui a été créée pour le déploiement.
Amazon.ECS.Tools
Le package Amazon.ECS.Tools sur NuGet est l'équivalent en ligne de commande de Publier un conteneur sur AWS dans Visual Studio. Le package peut être utilisé sur les plateformes Windows, macOS et Linux et est maintenu en tant que projet open source sur GitHub. Ce référentiel inclut deux autres extensions de CLI dotnet utilisées pour le déploiement sur AWS Lambda et AWS Elastic Beanstalk.
Pour afficher les options de commande de niveau supérieur, exécutez la commande suivante :
dotnet ecs
Toutes les commandes disposent d'une aide supplémentaire, accessible en utilisant l'option --help.
Pour commencer un déploiement, déterminez d'abord si vous le déployez sur un service (qui s'exécute en continu), sur une tâche (qui s'exécute une fois et se ferme) ou sur une tâche planifiée (qui s'exécute périodiquement et se ferme après chaque exécution). Vous pouvez également créer l'image et l’envoyer vers un référentiel de votre registre Amazon ECR privé. Pour l'exemple de site Web utilisé dans ce cours, un service fonctionnant en continu est le choix approprié. La spécification de la commande deploy-service en utilisant l'option --help répertorie tous les paramètres que vous pouvez appliquer.
Une fois que l'image est envoyée, vous êtes invité à indiquer le type de lancement, EC2 ou FARGATE. Pour les types de lancement EC2, vous devez déjà avoir créé l'infrastructure de cluster nécessaire. Le type de lancement FARGATE ne nécessite aucun provisionnement préalable, mais demande de spécifier le processeur et la mémoire nécessaires à la tâche. Consultez https://docs.aws.amazon.com/AmazonECS/latest/userguide/task_definition_parameters.html pour connaître les dernières combinaisons de valeurs valides, qui diffèrent légèrement entre les types de conteneurs Linux et Windows.
Dans la capture d'écran ci-dessous, FARGATE a été sélectionné comme type de lancement, avec 512 Mio de mémoire et les 256 processeurs correspondants (0,25 vCPU). L'outil a également demandé des valeurs pour les noms de cluster et de service avant de terminer le déploiement. Une fois que ces valeurs sont saisies et validées, le déploiement est demandé et la commande se termine.
Remarque : Contrairement à Publier sur AWS et AWS.Deploy.Tools, abordés plus haut dans ce module, les commandes Amazon.ECS.Tools n'attendent pas la fin du déploiement. Vous devez accéder à la console de gestion ou utiliser la vue Cluster dans Visual Studio pour obtenir des données telles que l'URL de l'application déployée.
Le fichier de paramètres écrit par ce déploiement est illustré dans la capture d'écran ci-dessous. Il est globalement similaire à ce qui serait écrit pour un déploiement démarré à partir de Visual Studio (la version IDE écrit un peu plus de paramètres). Ce fichier peut être archivé dans un référentiel de code source, avec le code de l'application, et utilisé à la fois avec Visual Studio sous Windows et avec les déploiements en ligne de commande sous Windows, macOS et Linux. Un fichier de paramètres beaucoup plus complet peut être créé à la main pour fournir des valeurs pour toutes les options de la ligne de commande. Pour des raisons pratiques, les noms des options correspondent aux clés du fichier de paramètres.
Déploiement de conteneurs à partir de pipelines CI/CD
Amazon.ECS.Tools peut être utilisé dans le cadre de pipelines d'intégration et de livraison continus. Toutefois, dans ces scénarios, les invites peuvent poser problème. Pour désactiver l'invite, ajoutez l'option --disable-interactive à votre commande.
Lorsque les invites sont désactivées, l'outil ne peut pas collecter les paramètres de déploiement lors de son exécution. Pour fournir tous les paramètres obligatoires et facultatifs, spécifiez-les dans le fichier texte des paramètres au format JSON et fournissez le nom du fichier, en ajoutant éventuellement le chemin, à la commande de déploiement avec l'option --config-file
Suppression des déploiements de conteneurs réalisés avec Amazon.ECS.Tools
Amazon.ECS.Tools ne prend pas en charge la suppression des applications de conteneur déployées depuis la ligne de commande. Pour supprimer un déploiement, utilisez l'une des options suivantes.
- Dans la console de gestion AWS, accédez au tableau de bord ECS, sélectionnez le cluster dans la liste affichée, puis choisissez Supprimer le cluster dans la vue détaillée du cluster.
- Dans Visual Studio, ouvrez la vue du cluster pour l'application déployée, choisissez Modifier et définissez le nombre de Tâches souhaitées sur 0. Quand plus aucune tâche n'est en cours d'exécution, sélectionnez Supprimer dans la vue des clusters, ou dans le menu contextuel de l'entrée du cluster dans la vue de l'explorateur AWS, pour supprimer le cluster.
Une fois le cluster supprimé, vous pouvez également supprimer le référentiel contenant les images utilisées lors du déploiement.
Déploiement de conteneurs .NET sur AWS à partir d'Azure DevOps
Pour déployer des applications .NET sur Amazon ECS et AWS Fargate à partir de pipelines Azure DevOps, vous avez le choix entre les extensions de CLI dotnet AWS.Deploy.Tools ou Amazon.ECS.Tools, décrites plus haut dans ce module. Dans les deux cas, installez l'outil comme indiqué pendant le pipeline, puis exécutez les commandes de déploiement appropriées dans une tâche shell, en utilisant les fichiers de configuration des paramètres pour fournir les paramètres obligatoires et facultatifs, ainsi que les options --silent (AWS.Deploy.Tools) ou --disable-interactive (Amazon.ECS.Tools) pour supprimer les invites.
Sinon, pour les scénarios dans lesquels la version doit simplement envoyer ou extraire des images vers un référentiel de votre registre Amazon ECR privé, l'extension AWS Tools pour Azure DevOps contient deux tâches que vous pourrez trouver pratiques.
Les outils peuvent être installés depuis le marketplace Azure DevOps. Une fois que les outils sont installés et configurés avec les informations d'identification du service, vous pouvez ajouter les tâches Amazon ECR Push ou Amazon ECR Pull à votre pipeline de création. Vous trouverez ci-dessous une capture d'écran des paramètres disponibles dans la commande push.
Ces tâches rendent la configuration d'une opération push ou pull simple et pratique pour une image créée préalablement dans le pipeline, en gérant pour vous le processus d'autorisation requis par rapport au référentiel. Les outils sont maintenus sous la forme d'un projet open source sur GitHub. Vous trouverez plus d'informations sur la configuration post-installation et sur les tâches individuelles des outils dans le guide de l'utilisateur.
Contrôle des connaissances
Vous avez maintenant terminé le Module 2, Outils de développement de conteneurs .NET sur AWS. Le test suivant vous permettra de vérifier ce que vous avez appris jusqu'à présent.
1. Sur quels services l'outil Publier sur AWS publie-t-il ? (choisissez deux réponses)
a. Lambda
b. ECS
c. EC2
d. ECR
2. Quels sont les deux prérequis nécessaires pour utiliser l'outil Publier sur AWS ?
a. C# et Node.js
b. CDK et Node.js
c. Python et CDK
d. Python et Node.js
3. Sur quels systèmes d'exploitation le package AWS.Deploy.Tools peut-il être utilisé ?
a. Windows
b. macOS
c. Linux
d. Toutes les réponses
Réponses : 1-b et d, 2-b, 3-d