Dotnet-Web-API auf Amazon Aurora, Teil 2

Web-API-Applikation mit Aurora integrieren

| Autor / Redakteur: Thomas Drilling / Stephan Augsten

Abruf des Repositories mithilfe der Git-Zugangsdaten.
Abruf des Repositories mithilfe der Git-Zugangsdaten. (Bild: Drilling / Microsoft)

Die Grundlagen dafür, eine auf Microsoft .NET Core basierende Web-API-Anwendung mit AWS-Diensten und Amazon Aurora zu integrieren, haben wir gelegt. An einem AWS-Demoprojekt spielen wir nun die vollständige Konfiguration und Bereitstellung durch.

Voraussetzung für den folgenden Guide ist natürlich ein valider Github-Account. Die weitere Vorgehensweise zur Integration einer.NET-Core-Web-API-Anwendung mit einer Amazon-Aurora-Datenbank, konkret zur Bereitstellung der Infrastruktur, der Dienste UND der eigentlichen Anwendung sieht dann wie folgt aus:

1. Klonen des Beispiel-Codes und der CloudFormation-Vorlagen aus o. a. GitHub-Repository. Das Repo verfügt dazu über einen „Code“- und einen „config“-Ordner. In „Code“ befindet sich das benötigte .NET-Web-API-Lösungsbeispiel, während der Ordner „config“ die zwei AWS CloudFormation-Templates bereithält.

  • „net-core-task-infrastructure.yaml“: Diese Vorlage stellt die erforderlichen „Hardware-Komponenten“, bzw. „AWS-Dienste“ bereit.
  • „net-core-stack-services.yaml“ - Diese Vorlage erstellt die MySQL-Tabelle für die „ToDos“ in Aurora und stellt außerdem den ECS-Dienst mit einer externen AWS LoadBalancer-URL bereit

Sofern die AWS-CLI auf dem eigenen Entwicklungs-Rechner gegen den passenden IAM-Benutzer konfiguriert ist, erfolgt das Klonen des AWS-Repos prinzipiell mit folgendem Kommando:

<Pfad zum lokalen Projektverzeichnis>: git clone https://github.com/awslabs/aws-dotnet-webapi-aurora

Danach wechselt man ins neu erstellte Unterverzeichnis …

cd aws-dotnet-webapi-aurora

… und …

Per CloudFormation-Vorlage wird die erforderliche Infrastruktur über die AWS CLI erstellt.
Per CloudFormation-Vorlage wird die erforderliche Infrastruktur über die AWS CLI erstellt. (Bild: Drilling / Microsoft)

2. … führt die bereitgestellte erste CloudFormation-Vorlage in der AWS CLI aus, um die erforderliche Infrastruktur für die Anwendung zu erstellen.

aws cloudformation create-stack --stack-name net-core-stack --template-body file://config/net-core-task-infrastucture.yaml --capabilities CAPABILITY_NAMED_IAM --parameters ParameterKey=AppStackName,ParameterValue=net-core-stack

3. Der angegebene Befehl stellt die Infrastruktur mit den erforderlichen AWS-Services einschließlich AWS CodeCommit bereit. Sobald dies abgeschlossen ist, kann man den eigenen .NET-Anwendungscode vom lokalen Computer auf AWS CodeCommit übertragen. Dies löst automatisch einen Build mit AWS CodeBuild aus. Sobald der Build abgeschlossen ist, wird das Docker-Image an Amazon ECR übertragen.

Abruf des Repositories mithilfe der Git-Zugangsdaten.
Abruf des Repositories mithilfe der Git-Zugangsdaten. (Bild: Drilling / Microsoft)

Auf Basis des ersten oben bereitgestellten CloudFormation-Stacks wird das benötige AWS CodeCommit-Repository im Format ...

https://git-codecommit.us-east-1.amazonaws.com/v1/repos/ <Stack-Name> todo-repo

erstellt. Der Abruf erfolgt dann mit:

$ git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/net-core-stack-todo-repo

Hierzu bedarf es git-CodeCommit-Credentials im zugehörigen IAM-User.

Git-Anmeldeinformationen lassen sich im AWS Identity- und Access-Management generieren.
Git-Anmeldeinformationen lassen sich im AWS Identity- und Access-Management generieren. (Bild: Drilling / AWS)

Derer zwei zur gleichen Zeit kann man in IAM explizit zur CodeCommit-Nutzung generieren.

Für das Beispiel klonen wir auch den von AWS zur Verfügung gestellten Beispiel-WebAPI-.NET-Code aus dem bereitgestellten Github-Repository und fügt diesen wie folgt in das eigene lokale Repo ein:

Klonen des Beispielcodes.
Klonen des Beispielcodes. (Bild: Drilling / Microsoft)

git add .
git commit -m "Initial Commit"
git push

4. Ist das geschehen, stellt folgender Befehl aus den Container im ECS-Cluster bereit. Dieser CloudFormation-Stack akzeptiert ein EC2-Schlüsselpaar, das von der vom Stack erstellten EC2-Instanz verwendet wird. Die EC2-Instanz führt ein Node-Skript aus, um die To-Do-Tabelle im Aurora-Datenbankcluster zu erstellen. Der hier verwendete Keypair-Name ist natürlich durch einen eigenen zu ersetzen:

aws cloudformation create-stack --stack-name net-core-service-stack --template-body file://config/net-core-task-services.yaml --capabilities CAPABILITY_NAMED_IAM --parameters ParameterKey=AppStackName,ParameterValue=net-core-service-stack ParameterKey=KeyName,ParameterValue=drilling1 ParameterKey=StackName,ParameterValue=net-core-stack

5. Im vorherigen Schritt wird der Aurora DB-Tabellen- und ECS-Dienst erstellt, in dem die .NET Core-Web-API im ECS-Container bereitgestellt wird. Die Ausgabe des Stapels gibt Folgendes zurück

HealthCheckUrl - http: // <your_ALB> .us-east-1.elb.amazonaws.com / api / values

WebApiUrl - http: // <your_ALB> .us-east-1.elb.amazonaws.com / api / todo

Wenn der oben genannte CloudFormation-Stapel erfolgreich erstellt wurde, sollte man zuerst die wichtigsten Infrastrukturkomponenten wie VPC mit öffentlichen und privaten Subnetzen, Routentabellen, Internet-Gateway, NAT-Gateway, öffentlichen Loadbalancer und den ECS-Cluster zu identifizieren sowie die anderen AWS-Dienste CodeBuild, CodeCommit, ECR, Amazon Aurora-Datenbank (Serverless), Systems Manager, CloudWatch-Evet-Rules und CloudWatchLogs.

All dies ist Teil des ersten CloudFormation-Stacks. Der zweite CloudFormation-Stack stellt den ECS-Service sowie die Container bereit und integriert sich in den Public Load Balancer. Die Ausgabe dieses Stacks enthält auch die API-URLs für die Integritätsprüfung und die API-Validierung.

Testen der APIs

Die neu erstellte To-Do-API lässt sich problemlos mit gängigen REST-API-Tools wie Postman, Chrome-Erweiterung wie ARC oder RestMan testen.

GET: Hierzu öffnet man den Browser und klickt die WebAPIUrl, um die Daten anzuzeigen.

http: // <your_ALB> .us-east-1.elb.amazonaws.com / api / todo

POST: Hierzu setzt man die Header "Content-typ" und "application/json"

Ein Sample-Request könnte so aussehen:

{
   "Task": "Coding for new project1",
   "Status": "InProgress"
}

GET-Aufruf an die Beispielanwendung.
GET-Aufruf an die Beispielanwendung. (Bild: Drilling / AWS)

Mit der gleichen URL kann man dann einen GET-Call absetzen, um das zuvor gepostete To-Do-Element anzuzeigen.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 46283645 / Datenbanken)