AWS Germany – Amazon Web Services in Deutschland

Baue und veröffentliche .NET Webanwendungen mit Amazon CodeCatalyst Blaupausen

von Cristobal Espinosa und Jagadeesh Chitikesi, übersetzt von Ralph Waldenmaier.

In diesem Blogbeitrag zeigen wir wie Sie die Erstellung und Veröffentlichung einer .NET 6.0 ASP.NET API für Amazon Elastic Container Service (Amazon ECS) mithilfe der “ASP.NET Core Web API” Blaupause nutzen können. Diese ist im Werkzeugkasten für AWS .NET- Veröffentlichungen [EN, Extern] von Amazon CodeCatalyst enthalten.

Amazon CodeCatalyst ist ein neuer cloudbasierter, einheitlicher Dienst für die Zussammenarbeit in Softwareentwicklungsteams. Amazon CodeCatalyst bietet einen vollständigen Satz von Werkzeugen für kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD), worin Entwicklungsteams ihre Arbeit planen, am Code zusammenarbeiten und Anwendungen erstellen, testen und bereitstellen können. Amazon CodeCatalyst erreicht dies, indem es eine Vielzahl von Funktionen [EN] bereitstellt, welche die Produktivität der Entwickler steigern und Teams helfen, mit weniger mehr zu erreichen.

Optionen zum Bauen in Amazon CodeCatalyst

Bevor wir die allgemeine Vorgehensweise von Amazon CodeCatalyst für das Erstellen und Bereitstellen von ASP.NET 6.0 basierten Web-APIs untersuchen, werden wir die Amazon CodeCatalyst unterstützten Optionen für den Bau von .NET-Anwendungen überprüfen. Amazon CodeCatalyst bietet zwei Berechnungstypen [EN] für die Ausführung Ihrer Arbeitsabläufe [EN]:

  1. Abrufbare Kapazität (On-Demand fleets) bieten vollständig verwaltete, Linux-basierte Umgebungen die auf Basis von Amazon Elastic Compute Cloud (Amazon EC2) oder AWS Lambda bereitgestellt werden sobald eine Aktion zum Bauen gestartet wird. Ist diese abgeschlossen werden die erstellten Umgebungen wieder aufgeräumt.
  2. Vorgehaltene Kapazität (Provisioned fleets) stellen Linux- oder Windows-basierte Amazon EC2-Instanzen bereit, die von Amazon CodeCatalyst verwaltet werden und sofort für die Verarbeitung von Aktionen bereit sind. Die Preisstufe Standard [EN] ist die Voraussetzung um vorgehaltene Kapazität zu verwenden.

Für die Erstellung von .NET-Anwendungen können Sie jeden Kapazitätstyp und jedes Betriebssystem wählen. In diesem Blog-Beitrag werden wir eine .NET-Web-API mit vorgehaltener Kapazität erstellen.

Voraussetzungen

Prüfen Sie die folgende Liste der Voraussetzungen, um sicherzustellen, dass Sie alle in den folgenden Abschnitten beschriebenen Schritte in Ihrer eigenen Umgebung durchführen können. Sie benötigen:

  1. Eine AWS Builder ID. Wie Sie eine solche ID erstellen können, erfahren Sie in der Produktdokumentation.
  2. Zugang zu einem Amazon CodeCatalyst-Bereich [EN]. In der Produktdokumentation erfahren Sie, wie Sie einen eigenen Zugang erstellen [EN] oder eine Einladung annehmen [EN] können.
  3. Ein AWS-Konto, das dem Amazon CodeCatalyst-Space hinzugefügt wird, da die Ziel-Infrastruktur für die Bereitstellung in AWS liegt. In der Produktdokumentation erfahren Sie mehr darüber, wie Sie dies erreichen.
  4. Eine AWS Identity and Access Management (IAM)-Rolle in dem AWS-Konto, welche Sie dem Bereich hinzufügen werden, damit Amazon CodeCatalyst in diesem Konto bereitgestellt werden kann. Für diese exemplarische Vorgehensweise können Sie die IAM-Rolle CodeCatalystPreviewDevelopmentAdministrator erstellen und Ihrem Amazon CodeCatalyst-Space zuordnen [EN], indem Sie die Anweisungen in der Dokumentation befolgen. Als bewährtes Verfahren sollten Sie diesen Rollen immer die geringste Menge an Berechtigungen zuweisen, die für die Arbeit Ihrer Teams erforderlich sind.

Erstellen des CodeCalayst-Projekts

Sobald Sie die obigen Voraussetzungen erfüllt haben, können Sie ein Projekt in Amazon CodeCatalyst [EN] erstellen. Melden Sie sich bei Ihrem Amazon CodeCatalyst-Konto [EN] an und navigieren Sie zum Amazon CodeCatalyst-Bereich. Wählen Sie Projekt erstellen und wählen Sie die Option “Mit einer Blaupause beginnen” (Start with a blueprint) (Abbildung 1).

Bei einer Blaupause handelt es sich um einen Projektsynthesizer, der unterstützende Dateien und Abhängigkeiten für Sie generiert und erweitert.

Ausschnitt aus dem Dialog für das Erstellen eines neuen Projektes. Die Vorlage mit dem Stichwort ".NET" wurde gefiltert. Zwei ergebnisse wurden angezeigt.

Abbildung 1: Amazon CodeCatalyst .NET Blaupausenausschnitt

Geben Sie „.NET“ in das Suchfeld „Wählen Sie eine Blaupause“ (Choose a blueprint) ein. Es wird eine Liste der verfügbaren Blaupausen für .NET-Anwendungen angezeigt. Zum Zeitpunkt der Erstellung dieses Blogbeitrags sind zwei Blaupausen verfügbar:

  1. ASP.NET Core web API: Erstellt ein ASP.NET Core 6.0-Web-API-Projekt zusammen mit einem CI/CD-Workflow zum Erstellen und Bereitstellen der Anwendung für den von Ihnen gewählten AWS-Service.
  2. Serverlose .NET-Anwendung (.NET serverless application): Erstellt ein .NET 6.0 AWS Serverless-Anwendungsprojekt zusammen mit einem CI/CD-Workflow, der die Anwendung für AWS Lambda erstellt und bereitstellt.

Wenn Sie eine Blaupause auswählen, wird auf der rechten Seite ein Seitenbereich mit der vollständigen Beschreibung, einer Architekturübersicht, Verbindungen und Berechtigungen sowie den erstellten Projektressourcen angezeigt (Abbildung 2).

Ausschnitt aus dem Dialog für die Projekterstellung. Die Beschreibung der Blaupause wird dargestellt.

Abbildung 2: ASP.NET Core web API Blaupausenbeschreibung

Dieser Blog zeigt die Verwendung der „ASP.NET Core web API Blaupause“. Wählen Sie diese Option und wählen Sie Weiter(Next), um mit der Konfiguration des Projekts fortzufahren.

Im folgenden Bildschirm (Abbildung 3) geben Sie Konfigurationsoptionen für Amazon CodeCatalyst an, damit das Projekt für Sie erstellt werden kann. Für diese Blaupause müssen Sie die folgenden Informationen angeben:

Der Ausschnitt zeigt die Einstellungsmöglichkeiten für ein .NET Projekt.

Abbildung 3: ASP.NET Core web API Blaupausenkonfiguration

  • Benennen Sie Ihr Projekt(Name your Poject)(erforderlich): Amazon CodeCatalyst verwendet diesen Namen, um das Projekt und das Standard-Quellcode-Repository zu benennen.
  • Umgebung (erforderliche Werte)
    • AWS account connection & Deployment role: Das AWS-Konto, für das Sie die Bereitstellung vornehmen, und die Rolle, die Amazon CodeCatalyst bei der Bereitstellung Ihrer Anwendung verwenden wird. Wenn Sie kein AWS-Konto auswählen, können Sie später eines hinzufügen. Die Arbeitsabläufe können jedoch erst danach erfolgreich ausgeführt werden.
    • Language: Die .NET-Programmiersprache, in welcher der Quellcode erstellt werden soll. Sie können C# oder F# auswählen.
    • AWS deployment service: Der unterstützte AWS-Service, in welchem Ihre Anwendung bereitgestellt werden soll. Wenn Sie „Keine“ auswählen, enthalten die Arbeitsablaufdateien keine Aktionen zur Bereitstellung Ihrer Anwendung in AWS.
  • Code (optionale Werte)
    • Code Repository name: Name des Quellcode Repository.
    • .NET-Projekt name: Name des zu erstellenden Projekts und Namensraums.
      Production Deployment: Wenn Sie diese Option auswählen, wird eine Konfiguration verwendet, die sowohl Komponenten zur Lastverteilung als auch größer dimensionierte AWS Service Konfigurationen erstellt
    • AWS Region: Die AWS Region, in der die Anwendung bereitgestellt werden soll.

Auf der rechten Seite des Bildschirms (Abbildung 4) finden Sie die Informationen über die Blaupause, einschließlich der gleichen Beschreibung wie auf dem vorherigen Bildschirm. Außerdem finden Sie dort zwei zusätzliche Schaltflächen: Code anzeigen (View Code) und Arbeitsabläufe (View Workflow) anzeigen.

Detailansicht des Erstellendialoges. Der Code und die Arbeitsabläufe können darin in einer Vorschau angezeigt werden.

Abbildung 4: ASP.NET Core web API Blaupauseninformation

Wenn Sie Code anzeigen (View Code) wählen, wird ein Fenster angezeigt, in dem Sie die Quellcodedateien sehen können, welche von der Blaupause auf der Grundlage Ihrer Projektkonfiguration erzeugt werden (Abbildung 5). Wenn Sie die Konfiguration ändern, werden die generierten Dateien automatisch aktualisiert.

Der Bildausschnitt zeigt die Ordnerstruktur der Blaupause. Die Datei Program.cs ist geöffnet.

Abbildung 5: ASP.NET Core web API Blaupausen Arbeitsablaufvorschau

Wenn Sie Arbeitsabläufe anzeigen(View Workflow) wählen, wird der Arbeitsablauf Editor angezeigt (Abbildung 6). Er zeigt entweder visuell oder als YAML-Notation den Arbeitsablauf an, den Amazon CodeCatalyst auf der Grundlage der Projektkonfiguration für Sie erstellt. Wenn Sie Ihre Projektkonfiguration ändern, wird der Arbeitsablauf aktualisiert, genau wie bei der Ansicht des generierten Quellcodes.

Der Ausschnitt zeigt einne schematische Darstellung des zu erstellenden Arbeitsablaufs.

Abbildung 6: ASP.NET Core Web API Blaupausenvorschau für den Arbeitsablauf

Für dieses Beispiel wählen Sie C# als Sprache und Amazon Elastic Container Service als Bereitstellungsdienst. Wählen Sie Projekt erstellen (Create project), um die Erstellung des Projekts zu starten (Abbildung 7). Dieser Vorgang sollte in wenigen Sekunden abgeschlossen sein.

Der Bildausschnitt zeigt den Fortschrittsbalken der Projekterstellung. 86% sind bereits abgeschlossen.

Abbildung 7: Erstellung des Projektes

Untersuchung der erstellten Dateien

Sobald die Projekterstellung abgeschlossen ist, werden Sie zur Projektübersicht weitergeleitet. Hier können Sie Informationen wie die Repositories, Arbeitsabläufe und Pull Requests zu Ihrem Projekt einsehen. Wählen Sie in der Übersicht des Projekts die Schaltfläche Repository anzeigen(View repository), um zum Standardrepository zu navigieren (Abbildung 8).

Der Bildausschnitt zeigt die Ansicht der Repositories. Der Inhalt kann über den Knopf "View repository" angezeigt werden.

Abbildung 8: Ansicht des Repository Dialoges

Auf der Seite des Repository kann die von der Blaupause generierte Struktur für den Quellcode eingesehen werden. (siehe Abbildung 9).

Der Bildausschnitt zeigt eine Ordnerstruktur von generierten Dateien welche von der Blaupause erstellt wurden.

Abbildung 9: Ansicht der generierten Dateistruktur

Beachten Sie die folgenden Ordner:

  • .cloud9: Enthält AWS Cloud9-Runner, diese sind zur Konfiguration von AWS Cloud9 wenn dieses als Entwicklungsumgebung verwendet wird.
  • .codecatalyst
    • deployment-settings: Enthält verschiedene Einstellungsdateien für die Bereitstellung. Diese sind relevant wenn auf AWS Elastic Beanstalk (Windows & Linux), AWS AppRunner bzw. AWS Fargate auf Amazon Elastic Container Service (ECS) bereitgestellt werden soll. Für jede Datei gibt es zwei Varianten: Produktion und Nicht-Produktion.
      Workflows: Enthält den YAML-Code für den Amazon CodeCatalyst Arbeitsablauf zur Erstellung und Bereitstellung der Anwendung.
    • .vscode: Enthält die Standardkonfigurationen für Visual Studio Code.
    • src: Enthält den Quellcode für das Projekt.
    • tests: Enthält die Unit-Tests für das Projekt.

Es wird auch eine Datei namens „devfile.yaml“ erstellt. Sie wird zur Konfiguration von Amazon CodeCatalyst Entwicklungsumgebungen [EN] (Dev Environments) verwendet.

Bevor Sie fortfahren, sollten Sie sich die Dateistruktur genauer ansehen, um zu verstehen welche erstellten Komponenten mit dem CI/CD-Arbeitsablauf bereitgestellt werden sollen.

Erkundung des standardmäßigen CI/CD-Workflows

Ein Arbeitsablauf ist in Amazon CodeCatalyst ein automatisiertes Verfahren, das beschreibt, wie Sie Ihren Code als Teil eines CI/CD-Systems erstellen, testen und bereitstellen. Er definiert eine Reihe von Schritten oder Aktionen, die während eines Arbeitsablauf-Laufs durchgeführt werden sollen, und definiert auch die Ereignisse oder Auslöser, die den Arbeitsablauf starten.

Als Nächstes untersuchen Sie den vom ASP.NET Core-Web-API-Blaupause generierten Arbeitsablauf. Erweitern Sie im Navigationsmenü das Menü CI/CD, und wählen Sie dann Arbeitsablauf (Workflows) (Abbildung 10).

Der Bildausschnitt zeigt die Menüauswahl im Bereich CI/CK. Der Arbeitsablauf (Workflow) kann gewählt werden.

Abbildung 10: Anicht des Arbeitsablauf Menüs

Beachten Sie, dass bereits zwei Arbeitsabläufe erstellt wurden: pull-request und main. Der Arbeitsablauf pull-request wird als Reaktion auf Pull-Requests ausgeführt, während der Haupt- Arbeitsablauf(main) ausgeführt wird, wenn neue Commits in den Hauptzweig des Repository verschoben werden. Der Haupt-Arbeitsablauf hat die gleichen Schritte wie der Pull-Request-Arbeitsablauf jedoch zusätzlich einen Bereitstellungsschritt. Wählen Sie den Haupt-Arbeitsablauf, um seine Struktur zu erkunden (Abbildung 11).

Der Bildausschnitt zeigt die erstellten Arbeitsabläufe "pull-request" und "main".

Abbildung 11: Übersicht über die erstellten Arbeitsabläufe

Wählen Sie auf dem nächsten Bildschirm die Registerkarte Definition, um die YAML-Definition des Arbeitsablaufs neben der visuellen Darstellung anzuzeigen (Abbildung 12).

Grafische Darstellung des main Arbeitsablaufes. Auf der rechten Seite ist dieser als YAML Code wiedergegeben.

Abbildung 12: Ansicht des Main Arbeitsablaufes

Beachten Sie, dass der Arbeitsablauf mit drei Hauptelementen konfiguriert ist:

  • Auslöser(Triggers): Der Arbeitsablauf wird jedes Mal gestartet, wenn eine Übergabe in den Hauptzweig verschoben wird.
  • Bauen und Testen(Build_And_Test): Bauen und Test des Codes mit der .NET 6 CLI, welche auf dem Standard-Build-Image [EN] läuft. Anschließend wird im Ordner ./TestResults nach Testberichten gesucht, um deren Ergebnisse auf dem Bildschirm anzuzeigen.
  • In AWS veröffentlichen(Deploy_To_AWS): Stellt die Anwendung mit dem AWS Deploy Tool für .NET [EN, Extern] auf AWS bereit. Es installiert die erforderlichen Abhängigkeiten, wie das zip yum-Paket für Amazon Linux, und konfiguriert die zu verwendende AWS-Verbindung.

Sie können die Zielumgebung in AWS, für die Sie die Anwendung bereitstellen, leicht ändern, indem Sie die JSON-Datei ändern, die an das Argument -apply übergeben wird.

Ausführen des Standard-CI/CD-Workflows

Der Haupt-Arbeitsablauf(main) wird automatisch zum ersten Mal ausgeführt, sobald Sie das Amazon CodeCatalyst-Projekt erstellen. Dieser erste Durchlauf wird zwischen 15 und 30 Minuten in Anspruch nehmen. Sobald er abgeschlossen ist, können Sie die bereitgestellte Anwendung untersuchen, indem Sie zum Amazon ECS Service Load Balancer URL navigieren, den Sie in der AWS-Ressource Endpoint am Ende der Protokolle des Befehls dotnet aws deploy innerhalb der Aktion Deploy_To_AWS finden, wie in Abbildung 13 dargestellt.

Der Ausschnitt zeigt die Logdateien welche durch einen teil des Arbeitsablaufs generiert wurden.

Abbildung 13: Ansicht von Log-Dateien eines Laufs

Erkunden der Einstellungen des AWS .NET-Bereitstellungstools

Das AWS Bereitstellungswerkzeug für .NET ist ein interaktives Tool für die .NET-Kommandozeile und dem AWS Werkzeugkasten für Visual Studio, mit dem Sie .NET-Anwendungen mit minimalen AWS-Kenntnissen und mit wenigen Klicks oder Befehlen bereitstellen können. Das AWS Bereitstellungswerkzeug für die .NET-Kommandozeile ist ideal für CI/CD, da es Ihnen die Möglichkeit bietet, Ihre Anwendung mit einem einzigen Befehl bereitzustellen. Es unterstützt verschiedene Anwendungstypen und AWS Dienste [EN, Extern].

Sie können den Inhalt der Bereitstellungseinstellungen .codecatalyst/deployment/settings/non-prod/ecs-fargate-deployment-settings.json untersuchen. Die Datei definiert die Vorlage, welche für die Bereitstellung Ihrer .NET-Anwendung (in diesem Fall AspNetAppEcsFargate) verwendet werden soll, und überschreibt einige der definierten Standardwerte der Vorlage. Im Fall der AspNetAppEcsFargate-Vorlage werden Optionen wie der Name des Amazon ECS-Clusters, die Anzahl der vCPUs und die Menge des von der Amazon ECS-Aufgabendefinition verwendeten Speichers überschrieben. Sie können mehr über alle Optionseinstellungen für dieses und alle anderen Vorlagen im offiziellen GitHub Repo [EN, Extern] einsehen.

Wenn Sie die Vorlage AspNetAppEcsFargate für die Bereitstellung Ihrer Anwendung verwenden, führt das .NET-Bereitstellungstool die folgenden Aufgaben aus:

  1. Suche nach einer Dockerdatei im Projekt und Ausführung von docker build. Falls das Werkzeug keine Dockerdatei findet, wird es versuchen, eine zu generieren [EN, Extern].
  2. Erstellt eine Amazon Elastic Container Registry (Amazon ECR), um das Container-Image darin zu speichern.
  3. Speichert das Container-Image im Amazon ECR-Repository.
  4. Stellt das mit der Vorlage verknüpfte AWS Cloud Development Kit (AWS CDK)-Projekt mit den Werten bereit, die Sie in der Datei mit den Bereitstellungseinstellungen überschrieben haben.
  5. Gibt auf der Konsole AWS-Ressourcendetails wie den Endpunkt des Load Balancer und andere aus.

Wenn die Ressourcen, welche die Vorlage standardmäßig erstellt, nicht den Anforderungen Ihrer Anwendung entsprechen, können Sie ein benutzerdefiniertes Bereitstellungsprojekt [EN, Extern] erstellen, welches wiederum ein AWS CDK-Projekt erstellt, das Sie an Ihre Bedürfnisse anpassen können.

Aufräumen

Um zukünftige Kosten zu vermeiden, löschen Sie die vom Amazon CodeCatalyst-Arbeitsablauf erstellten Ressourcen. Wenn Sie die in diesem Blogbeitrag angegebenen Werte verwendet haben, wurden die Ressourcen folgendermaßen benannt:

AWS CloudFormation Stack: CompanyHelloWebAPI
Amazon ECR-Repository: companyhellowebapi

Fazit

In diesem Blogbeitrag haben Sie gelernt, wie Sie die ASP.NET Core Web API Blaupause verwenden, um eine .NET-Anwendung in AWS Fargate auf Amazon ECS bereitzustellen. Mit der Blaupause wurde ein Projekt mit einem Quellcode Repository, Beispiel-Quellcode und CI/CD Arbeitsabläufen erstellt, die alle für die Bereitstellung in AWS bereit sind.

Dies ist nur der Startpunkt für Ihre Anwendung. Als Nächstes können Sie Ihren eigenen Quellcode bereitstellen und die CI/CD-Workflows so anpassen, dass sie den Anforderungen Ihrer eigenen Anwendungen entsprechen.

Wenn Sie Ideen haben, wie Amazon CodeCatalyst-Blaupausen Ihnen helfen können, schnell loszulegen und produktiver .NET-Anwendungen zu entwickeln, teilen Sie uns diese bitte im offiziellen .NET on AWS-Twitter-Handle [Extern] mit. Besuchen Sie .NET on AWS [EN], um weitere Informationen und Ressourcen für die Ausführung von .NET-Anwendungen auf AWS zu erhalten.


AWS kann Ihnen dabei helfen, zu beurteilen, wie Ihr Unternehmen das Beste aus der Cloud herausholen kann. Schließen Sie sich den Millionen von AWS-Kunden an, die uns bei der Migration und Modernisierung ihrer wichtigsten Anwendungen in der Cloud vertrauen. Um mehr über die Modernisierung von Windows Server oder SQL Server zu erfahren, besuchen Sie Windows auf AWS. Kontaktieren Sie uns, um Ihre Modernisierungsreise noch heute zu beginnen.

Über die Autoren

Cristobal Espinosa
Cristobal Espinosa ist Senior Solutions Architect bei Amazon Web Services. Er ist darauf spezialisiert, Kunden dabei zu helfen, ihre .NET-Anwendungen auf AWS zu modernisieren. Seit 2009 unterstützt er Organisationen dabei, ihre veralteten .NET-Anwendungen mit offenen Webtechnologien, Kubernetes, CI/CD und Cloud-Native-Services zu erneuern.
Jagadeesh Chitikesi
Jagadeesh Chitikesi ist Senior Microsoft Specialist Solutions Architect bei AWS. Er hat in den letzten 20 Jahren als Entwickler und Architekt mit Unternehmen aller Größen in den Bereichen Gesundheitswesen, Finanzen, Einzelhandel, Versorgung und Regierung gearbeitet. Er ist begeistert von der Cloud und all den Innovationen, die bei AWS stattfinden.