.NET-Workloads auf Amazon ECS und AWS Fargate

MODUL 2

Modul 2: .NET-Container-Entwicklertools auf AWS

 LERNMODUL

AWS bietet kostenlose Tools und Toolkits für integrierte Entwicklungsumgebungen, die beim Erstellen und Bereitstellen von containerisierten .NET- und .NET-Framework-Anwendungen für Amazon ECS, Amazon ECR und AWS Fargate helfen. Neben der AWS-Managementkonsole bieten Integrationen mit Visual Studio, JetBrains Rider, Visual Studio Code und der dotnet-CLI die Flexibilität, die richtigen Tools auszuwählen, um die Anforderungen an Entwicklung und kontinuierliche Integration und Bereitstellung (CI/CD) zu erfüllen

In diesem Modul erfahren Sie, wie Sie mit Amazon ECS, AWS Fargate und Amazon ECR mithilfe des AWS-Toolkits für Visual Studio und an der Befehlszeile mithilfe von dotnet-CLI-Erweiterungen arbeiten.

 Veranschlagte Zeit

60 Minuten 

Bereitstellen von .NET-Anwendungen in Containern auf AWS mit Visual Studio

Das AWS Toolkit für Visual Studio ist eine kostenlose Erweiterung für Visual Studio unter Windows (es unterstützt Visual Studio für Mac nicht). Das Toolkit bietet ein Explorer-Fenster zu verschiedenen AWS-Services, einschließlich Container-Services, und Assistenten, die beim Erstellen und Veröffentlichen von Anwendungen in der AWS-Cloud helfen. Diese Assistenten unterstützen die Bereitstellung von .NET- und .NET-Framework-Anwendungen in AWS Elastic Beanstalk, Amazon ECS und ECR, AWS Fargate und AWS App Runner aus Visual Studio heraus (dieser Kurs konzentriert sich auf die Bereitstellung in ECS/ECR und Fargate).

Installieren Sie das Toolkit vom Visual Studio Marketplace unter https://marketplace.visualstudio.com/vs. Zwei unterstützte Versionen sind für Visual Studio verfügbar, das unter Windows ausgeführt wird:

Das Toolkit kann in Visual Studio installiert werden, das auf Ihrem lokalen Entwicklungscomputer ausgeführt wird, und auch in den lizenzierten Visual Studio-Bilder, die von Amazon Elastic Compute Cloud (EC2) bereitgestellt werden. Diese Bilder sind eine ideale Lösung für Entwicklungsszenarien, in denen Visual Studio gelegentlich verwendet werden muss, ohne dass langfristige Lizenzverpflichtungen erforderlich sind.

Sobald Sie das Toolkit installiert haben, benötigt es eine Reihe von Anmeldeinformationen, um den Zugriff auf AWS-Services in Ihrem Namen zu ermöglichen. Diese werden als Anmeldeinformationsprofile bezeichnet, und das Toolkit führt Sie durch den Prozess, falls sie erstellt werden müssen. Wenn Sie jedoch zuvor Tools wie die AWS-CLI oder AWS-Tools für PowerShell auf Ihrem Computer verwendet haben, erkennt das Toolkit automatisch die mit ihnen verwendeten Anmeldeinformationsprofile und listet sie in der Dropdownliste Profil: oben im AWS Explorer-Toolfenster auf.

Wenn dieses Fenster nicht sichtbar ist, verwenden Sie das Element AWS Explorer im Menü Ansicht der IDE, um es anzuzeigen. Wählen Sie ein Anmeldeinformationsprofil aus (oder erstellen Sie eines) und wählen Sie dann eine AWS-Region aus dem Dropdown-Steuerelement Region: im Explorer-Fenster aus, um loszulegen.

Arbeiten mit Amazon ECS und Amazon ECR aus der AWS-Explorer-Ansicht

Nachdem Sie im Explorer ein Anmeldeinformationsprofil und eine Region ausgewählt haben, können Sie von Visual Studio aus auf Ihre Ressourcen in Amazon ECS und Amazon ECR zugreifen. Nachdem Sie im AWS-Explorer-Fenster das Amazon-Elastic-Container-Service-Element im Explorer und seine beiden Unterelemente Cluster und Repositories erweitert haben, können Sie mit vorhandenen Clustern und Repositories in Ihrem privaten ECR-Register arbeiten, die zu der von Ihnen ausgewählten Region gehören. Das Toolkit unterstützt nicht die Arbeit mit Ihrem öffentlichen ECR-Register.

Sehen Sie sich die einzelnen Elemente unten an, um mehr über die Funktionen zu erfahren, die in den Kontextmenüs der Cluster-Gruppe, der einzelnen Cluster, der Repository-Gruppe und der einzelnen in der Explorer-Ansicht angezeigten Repositories verfügbar sind.

Cluster-Kontextmenü

Das Kontextmenü der Cluster-Gruppe bietet die folgenden Optionen:

  • Aktualisieren: aktualisiert die Cluster-Sammlung, die im Explorer angezeigt wird.

Cluster-Kontextmenü

Das Kontextmenü auf jedem bereitgestellten Cluster, das im Explorer angezeigt wird, bietet Optionen für:

  • Sehen Sie sich die Cluster-Details an (öffnet ein neues Dokumentfenster).
  • Löschen Sie den Cluster.

Ein Cluster kann nicht gelöscht werden, solange Aufgaben ausgeführt werden. Aufgaben können aus einem Cluster entfernt werden, indem Sie zuerst die Menüoption Ansicht verwenden, um die Detailansicht für einen Cluster zu öffnen, dann in der Ansicht Bearbeiten auswählen und den Wert Gewünschte Aufgaben auf 0 setzen. Wenn alle laufenden Aufgaben gelöscht wurden, löschen Sie den Cluster entweder über die Schaltfläche „Löschen in der Ansicht“ oder über den Kontextmenüeintrag. Die Cluster-Detailansicht ist unten dargestellt:

Kontextmenü für Repositories

Das Kontextmenü der Repositories-Gruppe bietet Optionen für:

  • Repository erstellen: öffnet ein Dialogfenster, in dem Sie den Namen für das neue Repository eingeben können. Beachten Sie, dass neue Repositories nur in Ihrer privaten Registrierung erstellt werden können.
  • Aktualisieren: aktualisiert die im Explorer angezeigte Sammlung von Repositories.

Kontextmenü für Repositories

Das Kontextmenü eines Repositorys, das in der Gruppe Repositories aufgeführt ist, bietet Optionen für:

  • Ansicht: Öffnet ein neues Dokumentfenster, in dem die im Repository enthaltenen Bilder aufgeführt sind. Die spezifischen Befehle, die erforderlich sind, um Bilder in dieses Repository zu übertragen, können auch hier eingesehen werden
  • Löschen: öffnet ein Dialogfenster, um das Löschen des Repositorys zu bestätigen. Das Toolkit kann optional alle im Repository enthaltenen Bilder löschen, bevor das Repository selbst gelöscht wird (nicht leere Repositories können nicht gelöscht werden).

Bereitstellung auf Amazon ECS und Amazon ECR aus Visual Studio

Neben der Arbeit mit Clustern und Repositories im AWS Explorer bietet das Toolkit zwei Bereitstellungsoptionen, mit denen Sie Ihre Containeranwendungen und Bilder für Amazon ECS, AWS Fargate und Amazon ECR bereitstellen können. Beide Optionen sind im Kontextmenü Ihres Anwendungsprojekts im Solution Explorer verfügbar: In Publish to AWS und Container in AWS veröffentlichen (Legacy).

In den folgenden Abschnitten werden jede dieser Optionen beschrieben und wann Sie sie verwenden könnten.

In AWS veröffentlichen

In AWS veröffentlichen unterstützt die Bereitstellung von.NET-Anwendungen auf Amazon ECS mit AWS Fargate, AWS App Runner und virtuellen Maschinen in AWS Elastic Beanstalk. Es kann auch verwendet werden, um Container-Bilder in Amazon ECR zu veröffentlichen. In AWS veröffentlichen bietet nicht nur die Bereitstellung für mehrere Services von einem einzigen IDE-Portal aus, sondern bietet auch:

  • Die Möglichkeit, benutzerdefinierte Bereitstellungsprojekte für eine Anwendung zu erstellen. Benutzerdefinierte Bereitstellungsprojekte ermöglichen den Aufbau zusätzlicher AWS-Ressourcen während der Bereitstellung sowie benutzerdefinierte UX-Einstellungen für die Bereitstellung. Indem das Bereitstellungsprojekt zusammen mit der Anwendung in die Quellcodeverwaltung eingecheckt wird, haben alle Entwicklungsteams Zugriff auf dieselben benutzerdefinierten Einstellungen und Bereitstellungsressourcen, die für die Anwendung gelten, wenn sie von Visual Studio aus bereitgestellt wird.
  • Ein Dotnet-Befehlszeilenerlebnis, das nach der Installation des AWS.Deploy.Tools-Pakets von NuGet verfügbar ist. In der Befehlszeile werden dieselben Optionen angezeigt, einschließlich der Optionen, die mithilfe von benutzerdefinierten Bereitstellungsprojekten hinzugefügt wurden. Die Verwendung des Befehlszeilentools wird später in diesem Abschnitt beschrieben. Bei der Bereitstellung für AWS-Container-Services benötigen Anwendungen keine bereits vorhandene Dockerfile; bei Bedarf wird eine Dockerfile generiert.

Hinweis: In AWS veröffentlichen unterstützt nur .NET-Anwendungen; die Bereitstellung von Anwendungen, die .NET Framework verwenden, wird nicht unterstützt.

Hinweis: Die Bereitstellung in AWS App Runner wird in einem separaten Kurs, .NET Workloads in AWS App Runner, behandelt.

Für In AWS veröffentlichen sind einige erforderliche Installationen erforderlich, und Sie werden gefragt, ob eine davon fehlt. Das AWS Cloud Deployment Kit (CDK) wird verwendet, um AWS-Ressourcen zur Unterstützung der Anwendungsbereitstellung bereitzustellen und zu konfigurieren. Für das CDK muss Node.js installiert sein. Öffnen Sie einen Browser unter https://nodejs.org/en/ und installieren Sie entweder die neueste langfristig unterstützte (LTS) oder aktuelle Version von Node.js. Sobald Node.js installiert ist, öffnen Sie eine Befehlsshell und führen Sie den Befehl npm install -g aws-cdk aus, um das CDK zu installieren. Sobald diese beiden Voraussetzungen installiert sind, können Bereitstellungen mithilfe von „In AWS veröffentlichen“ durchgeführt werden.

Starten Sie In AWS veröffentlichen über das Kontextmenü des Anwendungsprojekts im Solution Explorer. Die Anwendung wird analysiert und eine Reihe von Bereitstellungsoptionen, sogenannte Rezepte, werden angezeigt. Für Anwendungen, die bereits mit einer Dockerfile konfiguriert sind, werden zuerst Rezepte für die Bereitstellung der Anwendung in Amazon ECS mit AWS Fargate oder für das Übertragen eines Container-Bildes an Amazon ECR angezeigt. Für Anwendungen, die noch nicht mit einer Dockerfile konfiguriert sind, werden diese Optionen für ASP.NET-Core-Web- und Web-API-Anwendungen (einschließlich Blazor Server) und Konsolenanwendungen angezeigt.

Hinweis: Wenn die Anwendung bereits (für einen Service) bereitgestellt wurde, bietet die Veröffentlichungs-Benutzeroberfläche an, sie zuerst erneut für die vorhandenen Ziele bereitzustellen. Wenn dies der Fall ist, wählen Sie die Option „Auf neuem Ziel veröffentlichen“, um statt einer erneuten Bereitstellung eine neue Bereitstellung durchzuführen.

Die Abbildung unten zeigt die Rezepte, die zum Zeitpunkt des Schreibens für eine ASP.NET-Core 6-Webanwendung verfügbar waren. Wenn benutzerdefinierte Bereitstellungsprojekte für die Anwendung verfügbar sind, werden sie über den von AWS bereitgestellten Rezepten aufgeführt. Im Screenshot ist das Rezept für die Veröffentlichung auf Amazon ECS mithilfe von AWS Fargate ausgewählt. Im rechten Bereich werden die Standardbereitstellungsoptionen für dieses Rezept angezeigt.

Es ist mindestens ein Anwendungsname erforderlich; der Projektname wird standardmäßig verwendet. Je nach Anwendung ist es möglicherweise möglich, auf die Schaltfläche „Veröffentlichen“ zu klicken und sofort mit der Bereitstellung zu beginnen. Wenn die Anwendung jedoch AWS-Services aufruft, muss eine benutzerdefinierte Rolle bereitgestellt werden, die Berechtigungen enthält, die der Anwendung den Zugriff auf Services und Service-APIs ermöglichen. Wählen Sie die Schaltfläche „Einstellungen bearbeiten“, um bei Bedarf eine Rolle für die Anwendung und alle gewünschten Infrastrukturänderungen vor der Bereitstellung anzugeben. Beispielsweise können Änderungen an Taskspeicher und CPU, Netzwerkeinrichtung, Lastausgleich und Skalierungsanforderungen vorgenommen werden. Der folgende Screenshot zeigt einige der Optionen, die für das ausgewählte Rezept verfügbar sind. Die Kategorien auf der linken Seite (Compute, Permissions, VPC usw.) veranschaulichen die Bandbreite der Optionen, die für die Bereitstellung angegeben werden können.
Windows-Container auf Fargate können sowohl .NET-Framework- als auch .NET-Anwendungen ausführen. Fargate unterstützt derzeit zwei Versionen von Windows Server für Anwendungen: Windows Server 2019 Full und Windows Server 2019 Core. Welche Version Sie auch verwenden, AWS verwaltet die Windows-Betriebssystemlizenzen für Sie.

Sobald die erforderlichen Optionen festgelegt sind, klicken Sie auf die Schaltfläche „Veröffentlichen“, um die Bereitstellung zu starten.

Für die oben abgebildete ASP.NET Core-Beispiel-Webanwendung durchläuft In AWS veröffentlichen mehrere Schritte, die in der Ausgabe des Bereitstellungsprotokolls befolgt werden können:

  1. Das Container-Bild wird entweder mit einer vorhandenen Dockerfile oder einer automatisch generierten Dockerfile erstellt.
  2. Die Authentifizierung erfolgt anhand Ihres privaten Amazon ECR-Registers und das Bild wird in ein Repository übertragen. Standardmäßig wird ein Repository mit demselben Namen wie die Anwendungsbereitstellung verwendet. Sie können jedoch vor Beginn der Veröffentlichung ein anderes Repository auswählen, indem Sie die Bereitstellungseinstellungen bearbeiten (den Repository-Namen finden Sie in den Einstellungen in der Kategorie Project Build).
  3. Es wird ein temporäres CDK-Projekt generiert, das die Ressourcen definiert, die zur Unterstützung der Bereitstellung benötigt werden, z. B. die Aufgabendefinition, die Clustereinstellungen, die Netzwerkkonfiguration und andere Einstellungen.
  4. Schließlich wird das CDK-Projekt verwendet, um einen AWS-CloudFormation-Stack zum Starten und Konfigurieren der Ressourcen sowie der für diese Ressourcen bereitgestellten Anwendung bereitzustellen.

Nach Abschluss der Bereitstellung werden im Fenster zusammenfassende Informationen zum CloudFormation-Stack angezeigt, zusammen mit einer URL zur bereitgestellten Anwendung (falls sie als Service bereitgestellt wurde). Wenn Sie auf die URL klicken, wird die bereitgestellte Anwendung in einem Browser geöffnet.

Bereitstellung über CI/CD-Pipelines

In AWS veröffentlichen in Visual Studio wurde für Entwickler entwickelt, die an einer Anwendung iterieren, ohne die IDE verlassen zu müssen. Für die CI/CD-Automatisierung oder für Entwickler, die nicht an einem Windows-System arbeiten, bietet AWS eine Befehlszeilenversion, die die dotnet-CLI erweitert. Dieses Tool ist auf NuGet im Paket AWS.Deploy.Tools verfügbar.

Öffnen Sie zur Installation eine Befehlszeilen-Shell und führen Sie den folgenden Befehl aus:

dotnet tool install -g aws.deploy.tools

Sehen Sie sich nach der Installation die Befehlsoptionen der obersten Ebene an, indem Sie Folgendes ausführen:

dotnet aws

Um eine Bereitstellung in dem Ordner zu starten, der Ihr Anwendungsprojekt enthält, führen Sie folgenden Befehl aus:

dotnet aws deploy

Zusätzliche Hilfe zu dem Tool und all seinen Befehlen ist mit dem Schalter --help verfügbar.

Weitere Details zur Bereitstellung von containerisierten Anwendungen in AWS mithilfe der dotnet-CLI-Erweiterung aws.deploy.tools, einschließlich ihrer Verwendung in der CI/CD-Automatisierung, werden später in diesem Modul im Abschnitt Bereitstellen von .NET-Containern in AWS von der Befehlszeile aus näher erläutert.

Löschen von Container-Bereitstellungen, die mit „In AWS veröffentlichen“ erstellt wurden

Bereitstellungen von Anwendungen, die mit „In AWS veröffentlichen“ erstellt wurden, sind einfach AWS CloudFormation-Stacks. Sie können eine Bereitstellung wie folgt löschen:

  • Navigieren Sie in der AWS-Managementkonsole zum CloudFormation-Dashboard und löschen Sie den zugehörigen Stack.
  • Erweitern Sie in Visual Studio den Eintrag AWS CloudFormation im AWS Explorer, wählen Sie den Stack aus und wählen Sie im Kontextmenü des Stacks die Option „Löschen“ aus.
  • Führen Sie in einer Befehlszeilen-Shell mithilfe des installierten AWS.Tools.Deploy-Pakets den Befehl dotnet aws delete-deployment aus.

Sie können auch von einer Befehlszeilen-Shell aus den AWS-Tools für PowerShell-Befehl remove-CFNStack oder den AWS-CLI-Befehl aws cloudformation delete-stack verwenden, um Stacks zu löschen, die eine bereitgestellte containerbasierte Anwendung darstellen.

Zusammenfassung

In AWS veröffentlichen bietet einen benutzerfreundlichen und erweiterbaren Mechanismus für die Bereitstellung von.NET-Anwendungen, die für die Ausführung in einem Container auf AWS geeignet sind, ohne dass umfangreiche Kenntnisse über AWS oder Cloud-Entwicklung erforderlich sind. Integrierte und anpassbare Rezepte ermöglichen es Entwicklern, Anwendungen während der Entwicklung bequem innerhalb von Visual Studio für Amazon ECS mit AWS Fargate und anderen containerbasierten Services bereitzustellen und erneut bereitzustellen. In AWS veröffentlichen ist die empfohlene Wahl für die Bereitstellung von ASP.NET-Core-Web- und Web-API-Anwendungen, einschließlich serverseitigem Blazor, in Containern auf AWS.

Container in AWS veröffentlichen

Container in AWS veröffentlichen ist der ursprüngliche, assistentengestützte Ansatz für die Bereitstellung containerisierter .NET-Anwendungen in AWS aus Visual Studio. Der Assistent, der jetzt als Legacy-Ansatz betrachtet wird, wird zum Zeitpunkt der Erstellung dieses Artikels weiterhin in Visual Studio unterstützt, kann jedoch in einer zukünftigen Version entfernt werden.

Im Vergleich zu „In AWS veröffentlichen“ weist „Container in AWS veröffentlichen“ die folgenden Funktionen und Einschränkungen auf:

  • Unterstützt nur die Bereitstellung auf Amazon ECS (mit oder ohne AWS Fargate). In AWS veröffentlichen unterstützt auch AWS App Runner und Services für virtuelle Maschinen wie AWS Elastic Beanstalk
  • Unterstützt die Bereitstellung von ASP.NET-Core-Web- und Web-API-Anwendungen sowie Konsolenanwendungen in Containern. Dies ähnelt dem von „In AWS veröffentlichen“ angebotenen Angebot.
  • Erfordert, dass in der Anwendung bereits eine Dockerfile vorhanden ist. Im Gegensatz zu „In AWS veröffentlichen“ wird eine Dockerfile nicht automatisch generiert. Wenn das Projekt der Anwendung keine Dockerfile enthält, wird die Option „Container auf ECS veröffentlichen“ nicht im Kontextmenü des Projekts angezeigt.
  • Hat keine Abhängigkeiten vom AWS Cloud Development Kit und Node.js.
  • Die Bereitstellung kann nicht über die im Assistenten verfügbaren Einstellungen hinaus geändert werden. Benutzerdefinierte Bereitstellungsprojekte, wie sie von „In AWS veröffentlichen“ angeboten werden, sind nicht verfügbar.
  • Kann mit einer dotnet-CLI-Toolerweiterung, Amazon.ECS.Tools, verwendet werden, die auf NuGet verfügbar ist. Mithilfe einer einfachen Konfigurationsdatei im JSON-Format, aws-ecs-tools-defaults.json, können die im Assistenten ausgewählten Konfigurationseinstellungen mit einer Befehlszeilenerfahrung geteilt werden, die durch das Ausführen von dotnet ecs in einer Befehlszeilen-Shell gestartet wird. Die Befehlszeilenoption eignet sich für Entwickler, die Visual Studio oder das AWS-Toolkit nicht verwenden können, oder für automatisierte Bereitstellungen in einem CI/CD-System.

Hinweis: Der Assistent enthält ein Banner, in dem empfohlen wird, zur neuen „In AWS veröffentlichen“-Erfahrung zu wechseln. Zu einem späteren Zeitpunkt wird der Legacy-Assistent aus dem Toolkit entfernt.

Der Assistent füllt die Felder AWS-Anmeldeinformationen und Region basierend auf den aktuellen Auswahlen im AWS-Explorer-Fenster vorab aus. Standardmäßig wird die Release-Konfiguration eines Projekts in einem nach dem Projekt benannten Repository bereitgestellt, das bei Bedarf erstellt wird.

Das Dropdown-Menü Bereitstellungsziel am Ende der Seite enthält vier mögliche Optionen:

  • Der Service auf einem ECS-Cluster eignet sich für Anwendungen, die rund um die Uhr ausgeführt werden müssen, z. B. eine Webanwendung oder möglicherweise eine Web-API.
  • Aufgabe auf einem ECS-Cluster ausführen eignet sich für Anwendungscode, der einmal ausgeführt und dann beendet wird, z. B. eine konsolenbasierte Anwendung. Sobald die Aufgabe beendet ist, kann sie bei Bedarf manuell erneut ausgeführt werden.
  • Geplante Aufgaben auf einem ECS-Cluster eignen sich für Aufgaben, die regelmäßig ausgeführt werden, bevor sie beendet werden. Beispiele hierfür sind Batch-Prozesse oder ETL-Aufträge über Nacht.
  • Nur das Docker-Bild an Amazon Elastic Container Registry übertragen erstellt das Container-Bild für die Anwendung, authentifiziert sich bei Ihrem privaten Register und überträgt es in ein Repository im privaten Register. Repositories in Ihrem öffentlichen Register werden nicht unterstützt.

Nachdem Sie das entsprechende Ziel ausgewählt haben, wechselt die Schaltfläche „Weiter“ zu einer Seite, auf der die Startkonfiguration definiert ist. Die hier und auf den nachfolgenden Seiten ausgewählten Daten werden in eine Aufgabendefinition für Sie übernommen.

Wenn Sie einen leeren Cluster erstellen für das Feld ECS-Cluster auswählen, wird der Assistent mit AWS Fargate an eine Bereitstellung gebunden. Für die Bereitstellung auf Amazon ECS ohne Verwendung von AWS Fargate müssen Sie zunächst die erforderlichen Cluster-Ressourcen mithilfe anderer Tools wie der AWS-Managementkonsole erstellen und dann den vorhandenen Cluster im Assistenten auswählen.

Wenn zu Beginn des Assistenten Service auf einem ECS-Cluster ausgewählt wurde, werden Sie auf der nächsten Seite nach der Anzahl der auszuführenden Aufgaben (Container-Instances) gefragt (standardmäßig 1) sowie nach der Mindest- und Höchstzahl der Aufgaben, die der Service verwalten soll. Um einen vorhandenen Service zu verwenden, wählen Sie hier seinen Namen aus oder geben Sie den Namen eines neuen Service ein, der erstellt werden soll. Wenn Aufgabe auf einem ECS-Cluster ausgewählt wurde, werden Sie stattdessen aufgefordert, die Anzahl der Aufgaben festzulegen und der Aufgabengruppe einen Namen zu geben. Die Abbildung unten zeigt die Option Service auf einem ECS-Cluster bei der Bereitstellung einer Webanwendung.

Wenn das Bereitstellungsziel ein Service ist, können Sie auf der nächsten Seite des Assistenten einen Application Load Balancer konfigurieren, einschließlich einer Seite zur Integritätsprüfung. Standardmäßig ist kein Load Balancer konfiguriert. Für die aufgabenbasierten Bereitstellungsziele wird die Load-Balancer-Seite nicht angezeigt, da die Container, aus denen die Aufgabe besteht, einmal ausgeführt werden und dann beendet werden.

Die letzte Einstellungsseite des Assistenten enthält weitere Optionen, die in die Aufgabendefinition aufgenommen werden, einschließlich der Frage, ob eine vorhandene Aufgabendefinition verwendet oder eine neue erstellt werden soll. Wählen Sie auch hier die IAM-Rolle für den Anwendungscode (Task-Rolle) aus, wenn die Anwendung AWS-Services aufruft, und die Ausführungsrolle, die von Amazon ECS übernommen wird, um Zugriff auf Ihre privaten Register-Bilder und andere Ressourcen zu gewähren, die für die Bereitstellung von Ressourcen während der Bereitstellung benötigt werden. Geben Sie abschließend den Container-Port an, der verfügbar gemacht werden soll, sowie alle zusätzlichen Umgebungsvariablen.

Wenn alle Einstellungen abgeschlossen sind, wird die Bereitstellung durch Auswahl von „Veröffentlichen“ gestartet. Ähnlich wie bei der neueren Funktion „In AWS veröffentlichen“ durchläuft das Toolkit eine Reihe von Schritten, um die Bereitstellung abzuschließen. Diese Schritte können in der Fortschrittsausgabe im Assistenten oder im Amazon-Web-Services-Bereich des Ausgabefensters der IDE befolgt werden.

  1. Die Anwendung wird gebuat und das Container-Bild erstellt.
  2. Die Authentifizierung erfolgt anhand Ihres privaten Amazon ECR-Registers und das Bild wird in ein Repository übertragen. Der Name des zu verwendenden Repositorys wurde auf der ersten Seite des Assistenten angegeben, standardmäßig der Projektname.
  3. Cluster und andere Ressourcen, die den im Assistenten ausgewählten Einstellungen entsprechen, werden bereitgestellt und konfiguriert.

Sobald die Ressourcenbereitstellung für den Cluster abgeschlossen ist, öffnet das Toolkit eine Clusteransicht. Hier können Sie den Fortschritt der Aufgaben überwachen, die beginnen, bis sie die im Assistenten angegebene Anzahl erreichen, und für Services die URL für den Zugriff auf die bereitgestellte Anwendung finden, wenn während des Assistenten ein Load Balancer ausgewählt wurde.

Bereitstellung in Containern aus CI/CD-Pipelines

Der Assistent Container in AWS veröffentlichen in Visual Studio wurde für Entwickler entwickelt, die an einer Anwendung in ihrer IDE iterieren. Für die CI/CD-Automatisierung oder für Entwickler, die nicht an einem Windows-System arbeiten, bietet AWS ein NuGet-Toolpaket, Amazon.ECS.Tools, an, das die dotnet-CLI erweitert. Um dieses Tool zu installieren, öffnen Sie eine Befehlszeilen-Shell und führen Sie den folgenden Befehl aus:

dotnet tool install -g Amazon.ECS.Tools.

Um nach der Installation loszulegen und die Befehlsoptionen der obersten Ebene anzuzeigen, führen Sie den folgenden Befehl aus:

dotnet ecs

Um eine Bereitstellung zu starten, führen Sie im Projektordner Ihrer Anwendung Folgendes aus:

dotnet ecs deploy

Zusätzliche Hilfe zu dem Tool und all seinen Befehlen ist mit dem Schalter --help verfügbar.

Für Anwendungen, die zuvor mit dem Assistenten in Visual Studio bereitgestellt wurden, sind die im Assistenten ausgewählten Einstellungen standardmäßig in einer Textdatei im JSON-Format, aws-ecs-tols-defaults.json, verfügbar. Diese Datei befindet sich im Projektverzeichnis der Anwendung. Diese Einstellungen werden vom Befehlszeilentool gelesen und können bei Bedarf überschrieben werden.

Weitere Informationen zur Bereitstellung containerisierter Anwendungen in AWS mithilfe der dotnet-CLI-Erweiterung Amazon.ECS.Tools, einschließlich ihrer Verwendung in der CI/CD-Automatisierung, werden später in diesem Modul im Abschnitt Bereitstellen von .NET-Containern in AWS von der Befehlszeile aus näher erläutert.

Löschen von Bereitstellungen, die mit „Container in AWS veröffentlichen“ erstellt wurden

Verwenden Sie eine der folgenden Methoden, um Bereitstellungen zu löschen, die mit dem Assistenten „Container in AWS veröffentlichen“ erstellt wurden:

  • Navigieren Sie in der AWS-Managementkonsole zum ECS-Dashboard, wählen Sie den Cluster in der angezeigten Liste aus und klicken Sie in der Detailansicht des Clusters auf Cluster löschen.
  • Öffnen Sie in Visual Studio die Clusteransicht für die bereitgestellte Anwendung, wählen Sie Bearbeiten und legen Sie die Anzahl der gewünschten Aufgaben auf 0 fest. Wenn keine Aufgaben ausgeführt werden, wählen Sie in der Clusteransicht oder im Kontextmenü des Cluster-Eintrags in der AWS Explorer-Ansicht Löschen aus, um den Cluster zu löschen.
  • Nachdem der Cluster gelöscht wurde, möchten Sie möglicherweise auch das Repository löschen, das die während der Bereitstellung verwendeten Bilder enthält.

Nachdem der Cluster gelöscht wurde, möchten Sie möglicherweise auch das Repository löschen, das die während der Bereitstellung verwendeten Bilder enthält.

Hinweis: Die Befehlszeilenerweiterung Amazon.ECS.Tools unterstützt das Löschen von Bereitstellungen nicht.

Zusammenfassung

Container in AWS veröffentlichen bietet einen assistentengestützten Ansatz für die Bereitstellung von Anwendungen auf Amazon ECS (mit oder ohne AWS Fargate) und Amazon ECR. Im Gegensatz zu In AWS veröffentlichen unterstützt Container in ECS veröffentlichen nur Amazon ECS, AWS Fargate und Amazon ECR als Bereitstellungsziele. Darüber hinaus sind die Bereitstellungsoptionen auf die im Assistenten oder in der entsprechenden Befehlszeile bereitgestellten Optionen beschränkt und können nicht angepasst werden. In AWS veröffentlichen ist das bevorzugte Ersatztool für die Bereitstellung in AWS für.NET-Anwendungen. Für Teams, die die neue Erfahrung nicht übernehmen können, werden der ältere Assistent und die Befehlszeilenerweiterung jedoch weiterhin unterstützt und stehen zur Verwendung zur Verfügung.

Bereitstellen von .NET-Containern in AWS über die Befehlszeile

AWS bietet zwei kostenlose Befehlszeilentools für die Arbeit mit containerisierten .NET-Anwendungen. Beide werden auf NuGet verteilt und erweitern das dotnet-CLI-Erlebnis um zusätzliche Befehle, die die Bereitstellung von.NET-Anwendungen auf Amazon ECS, AWS Fargate und Amazon ECR ermöglichen. Diese dotnet-CLI-Erweiterungen unterstützen die Bereitstellung von .NET Framework-Anwendungen nicht.

Hinweis: Zum Zeitpunkt der Erstellung dieses Artikels können benutzerdefinierte Bereitstellungsprojekte zwar sowohl von der Befehlszeile als auch von Visual Studio aus verwendet werden, sie können jedoch nur mit dem Befehlszeilentool erstellt werden.

AWS.Deploy.Tools

Das Paket aws.deploy.tools auf NuGet ist das Befehlszeilenäquivalent von „In AWS veröffentlichen“ in Visual Studio unter Windows. Die Befehlszeilenversion, die auf Windows-, macOS- und Linux-Plattformen verwendet werden kann, stellt dieselben Bereitstellungsrezepte bereit, die in Visual Studio verfügbar sind. Dazu gehört auch die Möglichkeit, benutzerdefinierte Bereitstellungsprojekte auszuwählen, die für eine Anwendung definiert sind. Das Paket wird als Open-Source-Projekt auf GitHub verwaltet.

Hinweis: Zum Zeitpunkt der Erstellung dieses Artikels können benutzerdefinierte Bereitstellungsprojekte zwar sowohl von der Befehlszeile als auch von Visual Studio aus verwendet werden, sie können jedoch nur mit dem Befehlszeilentool erstellt werden.

Um das Paket zu installieren, öffnen Sie eine Befehlszeilen-Shell und führen Sie den folgenden Befehl aus:

dotnet tool install -g aws.deploy.tools

Neue Versionen werden regelmäßig veröffentlicht. Um sie zu aktualisieren, führen Sie den folgenden Befehl aus:

dotnet tool update -g aws.deploy.tools

Wie In AWS veröffentlichen in Visual Studio ist das Paket AWS.Deploy.Tools von Node.js und dem AWS Cloud Development Kit abhängig. Stellen Sie daher sicher, dass Sie diese ebenfalls installieren.

Führen Sie nach der Installation den folgenden Befehl aus, um zu überprüfen, ob die Installation erfolgreich war und die verfügbaren Befehlsoptionen der obersten Ebene anzuzeigen:

dotnet aws

Um eine Bereitstellung an der Befehlszeile zu starten, führen Sie in dem Ordner, der Ihre Anwendungsprojektdatei (.csproj-Datei) enthält, den folgenden Befehl aus:

dotnet aws deploy

Die Anwendung wird analysiert und eine Reihe von nummerierten Bereitstellungsrezepten angezeigt, aus denen Sie auswählen können. In der Abbildung unten hat das Tool die Analyse einer Anwendung abgeschlossen, die derzeit über keine Dockerfile verfügt, und empfiehlt die Bereitstellung auf virtuellen Maschinen in AWS Elastic Beanstalk. Dies kann jedoch geändert werden, indem Sie die gewünschte Rezeptnummer, in diesem Fall 3, eingeben, um sie mithilfe von AWS Fargate als Container bereitzustellen. Eine Dockerfile wird während der Bereitstellung erstellt und dem Projekt hinzugefügt.

Sobald das Rezept ausgewählt wurde, werden in einer Reihe von Eingabeaufforderungen die erforderlichen Informationen erfasst, z. B. der Bereitstellungsname (der standardmäßig auf den Projektnamen gesetzt ist, aber geändert werden kann). Andere optionale Einstellungen sind über nummerierte Untermenüs einstellbar.

In der Abbildung oben würde das Drücken von „4“ die Auswahl einer benutzerdefinierten IAM-Rolle ermöglichen, die die Anwendung übernehmen soll, wenn sie ausgeführt wird, anstatt dass die Bereitstellung eine neue, leere Rolle erstellt. Zusätzliche, erweiterte Optionen zur Konfiguration für die Bereitstellung sind verfügbar, indem Sie „mehr“ eingeben.

Wenn Sie mit den Einstellungen zufrieden sind, wird die Bereitstellung durch Drücken der Eingabetaste gestartet. In Szenarien, in denen für die Anwendung keine benutzerdefinierte Rolle angegeben werden muss und die vorgeschlagenen Standardwerte akzeptabel sind, reicht es aus, einfach zweimal die Eingabetaste zu drücken, einmal, um den Standardbereitstellungsnamen zu bestätigen, und ein weiteres Mal, um mit der Bereitstellung der Anwendung zu beginnen.

Wie bei der Bereitstellung aus Visual Studio wird, wenn ein Container-Rezept ausgewählt wurde, bei Bedarf eine Dockerfile generiert, das Bild erstellt und an Amazon ECR übertragen (das Tool authentifiziert für Sie) und ein CDK-Projekt zur Bereitstellung der Infrastruktur erstellt, das dann in AWS CloudFormation bereitgestellt wird. Ereignisse und andere Statusinformationen aus der Bereitstellung werden an das Terminal gesendet. Schließlich wird die URL des Anwendungsendpunkts zusammen mit anderen zusammenfassenden Informationen wie den Cluster- und Servicenamen ausgegeben.

Die erneute Bereitstellung von Anwendungen wird auch über die Befehlszeile unterstützt. Wenn dotnet aws deploy im Ordner eines Projekts ausgeführt wird, das zuvor bereitgestellt wurde, listet es zuerst die vorhandenen Bereitstellungen zur Auswahl auf, gefolgt von der Option, ein Rezept für eine neue Bereitstellung auszuwählen.

Bereitstellung von Containern aus CI/CD-Pipelines

AWS.Deploy.Tools können innerhalb von Pipelines für kontinuierliche Integration und Bereitstellung verwendet werden. In diesen Szenarien können die Eingabeaufforderungen jedoch problematisch sein. Um die Aufforderung zu deaktivieren, fügen Sie Ihrem Befehl den Schalter --silent hinzu.

Wenn die Eingabeaufforderungen deaktiviert sind, kann das Tool bei der Ausführung keine Bereitstellungseinstellungen erfassen. Um alle erforderlichen und optionalen Einstellungen bereitzustellen, geben Sie sie in einer Textdatei im JSON-Format an und geben Sie den Dateinamen, optional als Pfad, mit der Option --apply an den Deployment-Befehl an:

dotnet aws deploy --apply settings.json –-silent

Das Erstellen einer Einstellungsdatei würde den Rahmen dieses Kurses sprengen. Ein Link zur Dateidefinition im GitHub-Repository des Tools ist im Abschnitt Erstellen einer Bereitstellungseinstellungsdatei im AWS.NET-GitHub-Repo verfügbar.

Erstellen benutzerdefinierter Bereitstellungsprojekte

Obwohl dies nicht das Thema dieses Kurses ist oder näher behandelt wird, sollten Sie sich bewusst sein, dass Sie benutzerdefinierte Bereitstellungsprojekte für Ihre containerisierten .NET-Anwendungen erstellen können. Wenn Sie ein benutzerdefiniertes Bereitstellungsprojekt erstellen, können Sie zusätzliche Infrastruktur oder andere Ressourcen zur Unterstützung Ihrer bereitgestellten Anwendung hinzufügen und die Laufzeitumgebung anpassen. Benutzerdefinierte Bereitstellungsprojekte können zusammen mit Ihrer Anwendung in die Quellcodeverwaltung eingecheckt und vom gesamten Entwicklungsteam gemeinsam genutzt werden, sodass sichergestellt wird, dass alle mit denselben Einstellungen und Anpassungen bereitgestellt werden, unabhängig davon, ob sie über Visual Studio oder über die Befehlszeile bereitgestellt werden.

Weitere Informationen zur Verwendung von benutzerdefinierten Bereitstellungsprojekten mit „In AWS veröffentlichen“ in Visual Studio oder unter aws.deploy.Tools in der Befehlszeile finden Sie unter https://aws.github.io/aws-dotnet-deploy/docs/deployment-projects/cdk-project/.

Löschen von Container-Bereitstellungen, die mit AWS.deploy.Tools erstellt wurden

Anwendungsbereitstellungen, die mit AWS.Deploy.Tools und In AWS veröffentlichen in Visual Studio durchgeführt wurden, können einfach gelöscht werden, wenn Sie an der Befehlszeile arbeiten, indem Sie den folgenden Befehl ausführen:

dotnet aws delete-deployment deployment-name

Ersetzen Sie deployment-name durch den Namen des AWS-CloudFormation-Stacks, der für die Bereitstellung erstellt wurde.

Amazon.ECS.Tools

Das Amazon.ECS.Tools-Paket auf NuGet ist das Befehlszeilenäquivalent von „Container in AWS veröffentlichen“ in Visual Studio. Das Paket kann auf Windows-, macOS- und Linux-Plattformen verwendet werden und wird als Open-Source-Projekt auf GitHub verwaltet. Dieses Repository enthält zwei weitere dotnet-CLI-Erweiterungen, die für die Bereitstellung in AWS Lambda und AWS Elastic Beanstalk verwendet werden.

Führen Sie den folgenden Befehl aus, um die Befehlsoptionen der obersten Ebene anzuzeigen:

dotnet ecs

Für alle Befehle gibt es zusätzliche Hilfe, auf die Sie mit der Option --help zugreifen können.

Um mit einer Bereitstellung zu beginnen, entscheiden Sie zunächst, ob Sie die Bereitstellung für einen Service (wird kontinuierlich ausgeführt), eine Aufgabe (wird einmal ausgeführt und beendet) oder eine geplante Aufgabe (wird regelmäßig ausgeführt und nach jeder Ausführung beendet) durchführen. Alternativ kann das Bild erstellt und in ein Repository in Ihrem privaten Amazon-ECR-Register übertragen werden. Für die in diesem Kurs verwendete Beispiel-Website ist ein kontinuierlich laufender Service die richtige Wahl. Wenn Sie den Befehl deploy-service mit der Option --help angeben, werden alle Einstellungen aufgeführt, die Sie anwenden können.

Sobald das Bild übertragen wurde, werden Sie aufgefordert, den Starttyp EC2 oder FARGATE anzugeben. Für EC2-Starttypen müssen Sie bereits die erforderliche Cluster-Infrastruktur erstellt haben. Der FARGATE-Starttyp erfordert keine Vorabbereitstellung, erfordert jedoch die Angabe der CPU und des Speichers für die Aufgabe. Unter https://docs.thinkwithwp.com/AmazonECS/latest/userguide/task_definition_parameters.html finden Sie die neuesten gültigen Wertekombinationen, die sich zwischen Linux- und Windows-Containertypen geringfügig unterscheiden.

In der Abbildung unten wurde FARGATE als Starttyp mit 512 MB Arbeitsspeicher und entsprechender 256-CPU (.25 vCPU) ausgewählt. Das Tool hat auch zur Eingabe von Werten für die Cluster- und Servicenamen aufgefordert, bevor die Bereitstellung abgeschlossen wurde. Sobald diese Werte eingegeben und validiert wurden, wird die Bereitstellung angefordert und der Befehl beendet.

Hinweis: Im Gegensatz zu In AWS veröffentlichen und AWS.Deploy.Tools, die weiter oben in diesem Modul besprochen wurden, warten die Befehle von Amazon.ECS.Tools nicht darauf, dass die Bereitstellung abgeschlossen ist. Sie müssen die Managementkonsole aufrufen oder die Clusteransicht in Visual Studio verwenden, um Daten wie die URL der bereitgestellten Anwendung abzurufen.

Die von dieser Bereitstellung geschriebene Einstellungsdatei ist in der Abbildung unten dargestellt. Es ähnelt im Großen und Ganzen dem, was für eine von Visual Studio aus gestartete Bereitstellung geschrieben würde (die IDE-Version schreibt etwas mehr Einstellungen). Diese Datei kann zusammen mit dem Anwendungscode in ein Quellcode-Repository eingecheckt und sowohl mit Visual Studio unter Windows als auch mit Befehlszeilenbereitstellungen unter Windows, macOS und Linux verwendet werden. Eine viel umfangreichere Einstellungsdatei kann von Hand kuratiert werden, um Werte für alle Befehlszeilenoptionen bereitzustellen. Der Einfachheit halber entsprechen die Namen der Optionen den Tasten in der Einstellungsdatei.

Bereitstellung von Containern aus CI/CD-Pipelines

Amazon.ECS.Tools können innerhalb von Pipelines für kontinuierliche Integration und Bereitstellung verwendet werden. In diesen Szenarien können die Eingabeaufforderungen jedoch problematisch sein. Um die Aufforderung zu deaktivieren, fügen Sie Ihrem Befehl den Schalter --disable-interactive hinzu.

Wenn die Eingabeaufforderungen deaktiviert sind, kann das Tool bei der Ausführung keine Bereitstellungseinstellungen erfassen. Um alle erforderlichen und optionalen Einstellungen bereitzustellen, geben Sie sie in der Einstellungsdatei im JSON-Format an und geben Sie den Dateinamen, optional als Pfad, mit der Option --config-file an den Bereitstellungsbefehl an

Löschen von Container-Bereitstellungen, die mit Amazon.ECS.Tools erstellt wurden

Amazon.ECS.Tools unterstützt nicht das Löschen bereitgestellter Container-Anwendungen über die Befehlszeile. Verwenden Sie eine der folgenden Optionen, um eine Bereitstellung zu löschen.

  • Navigieren Sie in der AWS-Managementkonsole zum ECS-Dashboard, wählen Sie den Cluster in der angezeigten Liste aus und klicken Sie in der Detailansicht des Clusters auf Cluster löschen.
  • Öffnen Sie in Visual Studio die Clusteransicht für die bereitgestellte Anwendung, wählen Sie Bearbeiten und legen Sie die Anzahl der Gewünschten Aufgaben auf 0 fest. Wenn keine Aufgaben ausgeführt werden, wählen Sie in der Clusteransicht oder im Kontextmenü des Cluster-Eintrags in der AWS-Explorer-Ansicht Löschen aus, um den Cluster zu löschen.


Nachdem der Cluster gelöscht wurde, möchten Sie möglicherweise auch das Repository löschen, das die während der Bereitstellung verwendeten Bildes enthält

Bereitstellen von .NET-Containern in AWS von Azure DevOps

Um .NET-Anwendungen über Azure DevOps-Pipelines in Amazon ECS und AWS Fargate bereitzustellen, können Sie zwischen den Dotnet-CLI-Erweiterungen AWS.Deploy.Tools oder Amazon.ECS.Tools wählen, die weiter oben in diesem Modul beschrieben wurden. Installieren Sie in beiden Fällen das Tool wie während der Pipeline gezeigt und führen Sie dann die entsprechenden Bereitstellungsbefehle in einer Shell-Task aus. Verwenden Sie dabei die Einstellungskonfigurationsdateien, um die erforderlichen und optionalen Einstellungen bereitzustellen, zusammen mit den Optionen --silent (AWS.deploy.tools) oder -disable-interactive- (Amazon.ECS.Tools), um Eingabeaufforderungen zu unterdrücken.

Alternativ enthält die Erweiterung AWS-Tools für Azure DevOps für Szenarien, in denen der Build einfach Bilder aus einem Repository in Ihrem privaten Amazon-ECR-Register übertragen oder abrufen muss, zwei Aufgaben, die für Sie praktisch sein könnten.

Die Tools können über den Azure DevOps Marketplace installiert werden. Fügen Sie nach der Installation und Konfiguration mit Service-Anmeldeinformationen die Amazon-ECR-Push- oder Amazon-ECR-Pull-Aufgaben zu Ihrer Build-Pipeline hinzu. Unten sehen Sie eine Abbildung der Einstellungen, die im Push-Befehl verfügbar sind.

Die Aufgaben machen die Konfiguration eines Push- oder Pull-Vorgangs für ein zuvor in der Pipeline erstelltes Bild einfach und bequem und übernehmen den erforderlichen Autorisierungsprozess für das Repository für Sie. Die Tools werden als Open-Source-Projekt auf GitHub verwaltet. Weitere Informationen zur Konfiguration nach der Installation und zu den einzelnen Aufgaben innerhalb der Tools finden Sie im Benutzerhandbuch.

Wissenscheck

Sie haben jetzt Modul 2, .NET-Container-Entwicklungstools auf AWS abgeschlossen. Mit dem folgenden Test können Sie überprüfen, was Sie bisher gelernt haben.

1. Für welche Services veröffentlicht das In AWS veröffentlichen-Tool? (wählen Sie zwei aus)

a. Lambda

b. ECS

c. EC2

d. ECR

2. Welche zwei Voraussetzungen sind erforderlich, um das In AWS veröffentlichen-Tool verwenden zu können?

a. C# und Node.js

b. CDK und Node.js

c. Python und CDK

d. Python und Node.js

3. Auf welchen Betriebssystemen kann das Paket AWS.Deploy.Tools verwendet werden?

a. Windows

b. macOS

c. Linux

d. Alle oben Genannten

Antworten: 1-b und d, 2-b, 3-d

Zusammenfassung

In diesem Modul haben Sie einige der kostenlosen Tools kennengelernt, die von AWS für Visual Studio, die .NET CLI und die Befehlszeile unter Windows, macOS und Linux zur Bereitstellung von Containern und Container-Bilder in Amazon ECS, Amazon ECS auf AWS Fargate und Amazon ECR verfügbar sind.

War diese Seite hilfreich?

Praktisches Labor