Teil 1 - Hands-On: Wie man ein Microservice auf AWS mit einem Klick aufsetzen kann

TECH BLOG

In dieser Tutorialserie werden wir einen Microservice mit einem Klick in die Amazon Web Services Cloud einbinden. Um dies zu erreichen, werden wir unser AWS-Konto einrichten und CodeCommit, S3, SNS/SQS und ECR entsprechend unseren Anforderungen konfigurieren. Dann werden wir den Microservice von Spring's Spring Boot Docker verwenden und die Amazon Reference Architecture für CloudFormation modifizieren, um unseren Service bereitzustellen.Um Jenkins mit AWS zu verbinden, werden wir verschiedene Plugins verwenden, die als Schnittstellen fungieren. Schließlich werden wir eine Declarative Pipeline schreiben, die unseren Code von CodeCommit auscheckt, ihn erstellt, testet und mithilfe der modifizierten Referenzarchitektur in CloudFormation implementiert.

Voraussetzungen

  • Java 8
  • Maven
  • Git
  • Docker for Windows (Windows 10)
  • Jenkins
  • AWS Account

Amazon Web Services (AWS)

In diesem Tutorial werden wir eu-central-1 als Region verwenden. Alle Links zeigen daher auf diese Region.


Identity and Access Management (IAM)

Erstellung eines Users für Jenkins in AWS

Navigiere zum IAM Menü (https://console.aws.amazon.com/iam/home) und erstelle einen neuen User für Jenkins.
Selektiere die Checkbox für Programmatic access.

Rechtevergabe

Teile dem Benutzer die Policy AdministratorAccess zu. Diese erlaubt es uns auf alle nötigen Ressourcen zugreifen zu können.
Andernfalls müssten wir folgende Policies hinzufügen:

  • AmazonEC2FullAccess
  • AmazonEC2ContainerServiceFullAccess
  • AmazonEC2ContainerRegistryFullAccess
  • AmazonSQSFullAccess
  • AmazonS3FullAccess
  • AWSCodeCommitReadOnly
  • eigene Policy, die es uns erlaubt für alle Ressourcen Rollen zu erstellen, zu löschen und zuzuteilen.

Access Key und Secret Key

Nachdem wir den Access Key erzeugt haben, wird der dazugehörige Secret Key angezeigt.
Lade die .csv Datei herunter.

! WICHTIG: Der Secret Key wird später nicht mehr angezeigt. !

CodeCommit Zugangsdaten

Um das AWS CodeCommit Repository verwenden zu können, welches wir später erstellen werden, benötigen wir Zugangsdaten. Navigiere zu den Security credentials des Jenkins Accounts und unter dem Punkt "HTTPS Git credentials for AWS CodeCommit" mithilfe des Generate Buttons neue Zugangsdaten.

Lade die .csv Datei herunter.

! WICHTIG: Das Passwort wird später nicht mehr angezeigt. !


AWS Command Line Interface (AWS CLI)

Die AWS CLI ist nötig um AWS Kommandos auszuführen, welche nicht durch Plugins abgedeckt werden.

Installieren der AWS CLI für einen User

https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html#install-msi-on-windows
Lade das Installationsprogramm herunter und führe es auf deiner Maschine aus. Nach der Installation sollten AWS Kommandos in der Windows-Eingabeaufforderung (cmd) und der Powershell verfügbar sein.

Konfigurieren der AWS CLI

Um die AWS CLI zu konfigurierend, öffne cmd oder Powershell und führe den Befehl aws configure aus. Gib dann deine Daten wie unten gezeigt ein:

Commandprompt (cmd)

C:\Users\exampleuser>
aws configureAWS
Access Key ID [None]: AKIAIOSFODNN7EXAMPLEAWSSecret
Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: eu-central-1
Default output format [None]: json
Kopieren der AWS CLI für den SYSTEM User

Kopiere den generierten .aws Ordner (C:\Users\\.aws) in das Heimat-Verzeichnis des SYSTEM Users C:\Windows\System32\config\systemprofile (Jenkins läuft standardmäßig unter dem SYSTEM User)

Jenkins sollte nun AWS CLI Kommandos ausführen können.

CodeCommit

AWS CodeCommit ist ein Service für die Versionskontrolle, der von Amazon Web Services gehostet wird. Mit diesem Service können Sie Ressourcen (wie Dokumente, Quellcode und Binärdateien) privat in der Cloud speichern und verwalten.

Wir werden es verwenden um den Quellcode und die CloudFormation Konfiguration zu speichern.

Erstellen eines CodeCommit Repositorys

Schritte um eine neues Reposiotry zu erstellen: https://eu-central-1.console.aws.amazon.com/codecommit/home?region=eu-central-1

  • Klicke auf Create Repository
  • Gib einen Namen ein
  • Gib eine Beschreibung ein (optional)
  • Klicke auf Create
  • Klicke auf Skip
Simple Notification Service (SNS) und Simple Queue Service (SQS)

Um einen Jenkins Build durch ein git push auszulösen, hört Jenkins mit Hilfe eines Listeners eine Queue ab, welche durch ein SNS Topic benachrichtigt wird.

Git Push → (Push Trigger) → Sends Message to Topic (SNS) → Directs Message to Subscribers (Queue, SQS) → Jenkins (SQS Listener)

1) Erstelle ein SNS Topic: https://eu-central-1.console.aws.amazon.com/sns/v2/home?region=eu-central-1#/topics

Schritte um ein neues Topic zu erstellen:

  • Navigiere zu SNS
  • Klicke auf Create new topic
  • Gib einen Topic Namen ein
  • Gib einen Anzeigenamen ein(optional)
  • Klicke auf Create topic

2) Erstelle einen CodeCommit Trigger

Schritte um einen neuen Trigger zu erstellen:

  • Navigiere zu dem CodeCommit Repository
  • Navigiere zu Settings
  • Navigiere zu dem Reiter Triggers
  • Klicke auf Create Trigger
  • Gib einen Trigger Namen ein
  • Wähle Push to existing branch als Event aus
  • Stelle sicher, dass bei Send to die Option Amazon SNS ausgewählt ist
  • Wähle das vorher erstellte SNS Topic

3) Erstelle eine SQS Queue: https://eu-central-1.console.aws.amazon.com/sqs/home?region=eu-central-1

Schritte um eine neue Queue zu erstellen:

  • Navigiere zu SQS
  • Klicke auf Create New Queue
  • Gib einen Namen ein
  • Klicke auf Create Queue


4) Abonniere ein SNS Topic: https://eu-central-1.console.aws.amazon.com/sqs/home?region=eu-central-1

Schritte um ein SNS Topic zu abonnieren:

  • Wähle deine Queue aus der Liste
  • Klicke auf Queue Actions
  • Klicke auf Subscribe Queue to SNS Topic
  • Wähle das Topic aus der Dropdown-Liste
  • Klicke auf Subscribe


S3 Bucket

Wir werden den S3 Bucket verwenden um unsere .jar Dateien und die CloudFormation Templates zu speichern, sodass AWS CloudFormation darauf zugreifen kann.

Erstellen eines S3 Buckets

https://s3.console.aws.amazon.com/s3/home?region=eu-central-1

Schritte um einen S3 Bucket zu erstellen:

  • Klicke auf Create Bucket
  • Gib einen Namen ein
  • Klicke auf Create

Der Name des Buckets muss unter allen S3 Buckets eindeutig sein.


Elastic Container Repository

Wir werden ECS verwenden, um unsere Applikation auszuführen. Dafür müssen wir zuerst ein ECR erstellen, in welches wir unsere Docker Images hochladen werden.

Schritte um ein neues ECR zu erstellen:

  • Navigiere zu Elastic Container Services
  • Klicke auf Repositories
  • Klicke auf Create repository
  • Gib springio/gs-spring-boot-docker als Namen ein
  • Klicke auf Next step
  • Klicke auf Done

The URI, die wir später mehrfach benötigen kann entweder in der Auflistung aller Repositories oder der Detailansicht eingesehen werden


Bleiben Sie dran für den zweiten Teil unserer Hands-On Serie: Java Application und CloudFormation Templates.
Bernhard Gally

Über den Autor:

Bernhard Gally
Junior Dev Ops Engineer