Dotnet-Web-API auf Amazon Aurora, Teil 2 Web-API-Applikation mit Aurora integrieren

Autor / Redakteur: Dipl. -Ing. Thomas Drilling / Stephan Augsten

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.

Anbieter zum Thema

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

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.

(ID:46283645)