Hier geben wir Einblicke in das Unternehmen, Gedanken, How-Tos, Wissenswertes und News, die sich aus der Programmierung und Projekten ergeben. Auch unsere Open Source Aktivitäten begleiten wir hier.

Corporate Blog der prooph software GmbH

Docker und Amazon Web Services (AWS)

Docker Amazon Web Services (AWS)

Docker und das Hosting in der Cloud per Amazon Web Services (AWS) passen gut zueinander. In diesem Artikel werden einige grundlegende AWS-Services beleuchtet, um eine Applikation mit Docker auszuliefern. Auch auf die Themen Continuous Delivery, Rechteverwaltung und Datenschutz wird eingegangen.

Amazon Identity Access Management (IAM)

Der Zugriff auf die AWS-Services und -Ressourcen muss immer kontrolliert erfolgen. Genau hier setzt die Rechteverwaltung Amazon IAM an. In der AWS Management Console können AWS‑Benutzer und ‑Gruppen angelegt und verwaltet werden. Mittels Berechtigungen erlaubt oder verweigert der Nutzer den Zugriff auf AWS-Ressourcen. Ein weiterer Pluspunkt in Sachen Sicherheit ist die Multi-Factor-Authentifizierung über Smartphone Apps oder externe Geräte. Dieser Service wird kostenlos von Amazon AWS bereitgestellt und ist in jedem AWS-Konto verfügbar.

Amazon EC2 Container Registry (ECR)

Die Amazon EC2 Container Registry (ECR) ist eine vollständig verwaltete Docker Container Registry. Dort können die privaten Docker Images abgelegt werden. Der Nutzer zahlt nur für die Menge der Daten, die er in seinen Datenspeichern ablegt und im Internet überträgt. Ein weiterer Vorteil ist, dass diese Docker Container Registry an Amazon Identity Access Management (IAM) gekoppelt ist und somit konfiguriert werden kann, wer die Docker Images lesen und wer diese aktualisieren darf. Natürlich gibt es auch Alternativen außerhalb von AWS, wie z.B. Docker Hub. Dort wird nach Anzahl der privaten Docker Repositories pro Monat abgerechnet. Es sollte anhand der Build Strategie der entsprechende Dienst ausgewählt werden.

Continuous Delivery

Die Basis für Continuous Delivery ist ein automatisiertes Deployment. Mittels Automatisierung beim Build und Deployment wird die Fehleranfälligkeit drastisch reduziert und nicht nur Entwickler sondern auch Project Owner können per Knopfdruck neue Versionen veröffentlichen.

Eine weit verbreitete Kombination ist Atlassian Bitbucket als Versionskontrollsystem und Atlassian Bamboo als Build und Deploy System. Die cloudbasierten Atlassian Produkte sind alle gut miteinander integrierbar. Das Bamboo Build fürs Produktions-Deployment kann z.B. nur dann gestartet werden, wenn ein neuer Versions-Tag von der Applikation erstellt wurde. Zur Integration der Atlassian Produkte in AWS bietet es sich an, einen Bamboo Remote Agent für Amazon EC2 zu nutzen. Die Builds sind dadurch skalierbar und es fallen nur Kosten für die verwendete Laufzeit bzw. Ressourcen an. Bamboo baut also die komplette Anwendung mit den entsprechenden Docker Images und pushed die Docker Images zur Amazon EC2 Container Registry (ECR). Es empfiehlt sich den Build Prozess über Bash Skripte abzubilden, dadurch können sie auch lokal ausgeführt werden, vorausgesetzt, man hat die entsprechenden Rechte.

Eine kostenlose on-premise Alternative zu den Atlassian Tools wären GitLab oder Jenkins. Mit beiden Tools ist es genauso möglich, die Applikation mit den Docker Images für das Deployment auf Amazon AWS vorzubereiten. Auch die Amazon EC2 Container Registry kann mit GitLab oder Jenkins genutzt werden. Somit kann jeder sein Build-/Deployment Tool seiner Wahl nutzen.

Infrastructure as Code (IaC) mit Cloudformation

Es wäre mühselig und fehleranfällig eine komplette Server Landschaft manuell über die AWS Management Console aufzusetzen. Außerdem lässt sich die Konfiguration nicht wiederverwenden und es wird nicht protokolliert, wann welcher Stack zum Einsatz kam. Mit Cloudformation Templates hat jeder Einblick in die aktuelle Konfiguration der Server Infrastruktur. Jederzeit ist es möglich einen kompletten Server Stack neu aufzusetzen. Das ist natürlich auch dann von Vorteil, wenn für die Applikation z.B. 3 Umgebungen (Integration, Staging, Production) genutzt werden. Die Docker Images sollten natürlich so aufgebaut sein, dass dieselbe Docker Image Version auf allen 3 Umgebungen läuft. Die Konfiguration der Zugangsdaten erfolgt hierbei über Umgebungsvariablen.

Monitor all the things mit Amazon Cloudwatch

Mit dem Monitoringservice Amazon Cloudwatch lassen sich sämtliche AWS-Cloud-Ressourcen und Anwendungen protokollieren. Es stehen unterschiedliche Metriken wie CPU oder Speicher-Auslastung und Netzwerkdurchsatz zur Auswahl, um verschiedene Alarme zu konfigurieren. Auch eigene Metriken, wie z.B. ob PHP Exceptions aufgetreten sind, lassen sich erstellen und im Fehlerfall werden Benachrichtigungen per E-Mail o. Ä. versendet. Ein Dashboard ermöglicht die Darstellung verschiedener Metriken, so dass der Nutzer nicht den Überblick über die eigenen Microservices verliert und sofort sieht, wo Probleme aufgetreten sind. Auch das Logging ist sehr umfangreich und es können ganze Log Gruppen mit mehreren Log Streams durchsucht werden. Wer JSON als Log Format nutzt, kann auf umfangreiche Filtermöglichkeiten zurückgreifen.

3 Wege um Docker auf Amazon AWS zu nutzen

Natürlich wäre Amazon nicht Amazon, wenn es nicht mehrere Wege geben würde, Docker auf AWS zu nutzen. Jede Variante hat seine eigene Daseinsberechtigung.

Elastic Beanstalk Docker Applikationen

Elastic Beanstalk Applikation mit Docker Container

Die erste Variante ist Elastic Beanstalk. Damit können DevOps relativ schnell eine einfache Docker Applikation ans Laufen bringen. Da alles was benötigt wird als Docker Image in der Amazon ECR zur Verfügung steht, muss nur eine Elastic Beanstalk Version mit einer Datei Dockerrun.aws.json erstellt werden. Diese Datei enthält die Beschreibung, wie ein Set von Docker Containern deployed werden soll. Per Cloudformation Template können gezielt das Auto-Scaling, Load-Balancing, Healthcheck oder das Deployment Verfahren konfiguriert werden, um nur ein paar Parameter zu nennen. Interessant ist hierbei, dass Elastic Beanstalk den Amazon EC2 Container Service nutzt und selbständig verwaltet. Vorteil für den Nutzer ist die einfache Handhabung, Nachteil die mangelnde Flexibilität.

Amazon EC2 Container Service (ECS)

Amazon ECS

Amazon EC2 Container Service (ECS) ist ein Container-Management Service und verwaltet einen Cluster aus EC2 Instanzen, um Docker Anwendungen dort auszuführen. Für den ECS Cluster kann auch ein Application Load Balancer konfiguriert werden, um gezielt URLs auf bestimmte Docker Container zu leiten. Ein ECS Cluster benötigt sogenannte ECS Tasks, welche dann im Cluster entweder dauerhaft oder nur für eine bestimmte Dauer, wie das bei Cronjobs der Fall ist, laufen. Im Cloudformation Template müssen diese ECS Tasks definiert und im Falle von Cronjobs per Lambda gestartet werden.

Docker for AWS

Docker for AWS Swarm Cluster

Recht neu ist Docker for AWS. Die Beta-Phase endete offiziell am 19. Januar 2017. Hier wird per Cloudformation Template ein nativer Docker Swarm Cluster aufgesetzt. Der Vorteil ist hier ganz klar das native Docker Verhalten. Es muss keine Elastic Beanstalk Version oder ein ECS Task erstellt werden. Alles was benötigt wird, sind die Docker Images. Natürlich kann auch lokal für die Entwicklung ein Docker Swarm Cluster auf einem Rechner aufgesetzt werden, um möglichst nah am Produktivsystem zu sein. Wenn man dann noch Docker Compose nutzt, können Multi Container Applikationen mit nur einem Befehl docker stack deploy --compose-file docker-compose.yml prooph deployed werden.

Cronjobs mit Amazon Cloudwatch Events und Lambda

Da sich in einem Server Cluster kein Crontab nutzen lässt und mit Docker sowieso nicht, kann per Cloudwatch Events und Amazon Lambda Cronjobs auf einem Docker Cluster ausgeführt werden. Das Cloudwatch Event, welches zu einer bestimmten Zeit ausgeführt wird, ruft dabei eine Lambda Funktion auf, welche dann z.B. auf einem ECS Cluster einen definierten ECS Task startet. Lambda bietet noch viel mehr Möglichkeiten, die einen eigenen Blog Artikel füllen könnten.

DNS Handling mit Amazon Route 53

Wenn schon die Server bei Amazon AWS gehostet sind, warum dann nicht auch die Domain und damit die DNS Einträge mit Amazon Route 53 verwalten? Dies ermöglicht ein vollautomatisches Disaster Recovery System per API Zugriff, um z.B. die DNS Einträge ändern zu können. Auch stehen DNS-Routing Features wie Weighted Round Robin (WRR), "Latenzbasiertes Routing" (LBR) und "GEO-DNS" zur Verfügung. Für internationale Projekte kann DNS Traffic Flow genutzt werden, um den Nutzer mit dem jeweils besten Endpunkten in puncto Latenz, Geografie und Integrität zu verbinden.

Amazon AWS und der Datenschutz

Auf der Amazon AWS Datenschutz Seite sind Informationen rund um den Datenschutz aufgelistet. So behalten laut Amazon AWS Kunden die volle Kontrolle über ihre Inhalte. Eine entsprechende Implementierung vorausgesetzt können auch Volumes und die darauf befindlichen Daten verschlüsselt werden. Für Deutschland steht eine Server Region, genauer gesagt Frankfurt, zur Auswahl bereit — ein wichtiges Kriterium für Kunden, die durch die Verarbeitung und Speicherung personenbezogener Daten das Hosting in Deutschland als Voraussetzung haben.

Fazit

Die Amazon Web Services sind sehr umfangreich und bieten viele Features und Möglichkeiten. In diesem Beitrag wurden ein paar Amazon Services beleuchtet, um mit Docker auf Amazon AWS zu starten. Durch einen automatisierten Build Prozess können auf Knopfdruck neue Releases in die Cloud deployed und durch Amazon AWS auch beliebig skaliert werden. Dank Infrastructure as Code mittels Cloudformation lassen sich neue Server Landschaften in Minuten aufsetzen.

Webanwendungen in der AWS Cloud Von der Entwicklung Ihrer Webanwendung bis zur Einrichtung einer modernen Cloud Infrastruktur auf AWS bietet die prooph software GmbH alles aus einer Hand. Gerne erarbeiten wir mit Ihnen gemeinsam eine geeignete Continuous Delivery und Hosting Strategie.

Sie suchen einen DevOps Dienstleister für Ihr Projekt: Projektanfrage stellen

Blog Artikel mit ähnlichen Themen