In der Informatik ist ein fundamentaler Trend, dass die Einführung einer weiteren Abstraktionsebene ein Problem lösen kann. Zum Beispiel wurden Computerprogramme am Anfang in Assemblersprache geschrieben. Die Abstraktion von Assembler in Höheren Programmiersprachen (z.B. Java, Python, JavaScript) wird heute von den meisten Entwicklern bevorzugt.
Die Entwicklung hin zu Abstraktion kann auch in der Nutzung von Servern beobachtet werden. Die Ausführung von Applikationen direkt auf der Serverhardware (bare metal) wird heute nur noch für Hochleistungsapplikationen (high performance applications) verwendet. Für den Großteil der Applikationen hat die Abstraktion der darunterliegenden Hardware mehr Vorteile.
Die erste Abstraktionsebene in dem Servermodell ist ein Betriebssystem (OS), das die Applikation ausführt, sodass die Applikation nicht selbst die Hardware verwalten muss.
Die nächste Abstraktion sind Virtuelle Maschinen. Eine Virtuelle Maschine (VM) ist ein Gast-Betriebssystem, das auf einem Host-Betriebssystem ausgeführt wird. Dafür wird eine Software, die als Hypervisor bezeichnet wird, benutzt. Ein Hypervisor sorgt dafür, dass das Gast-Betriebssystem von dem Host-Betriebssystem isoliert ist. Das Gast-Betriebssystem weiß also nicht über das Host-Betriebssystem Bescheid. Das Gast-Betriebssystem denkt, dass es direkt auf der Hardware läuft. Somit können mehrere Gast-Betriebssysteme auf einem Host-Betriebssystem ausgeführt werden, ohne sich gegenseitig in die Quere zu kommen. Virtuelle Maschinen sind eine der grundlegenden Technologie für Cloud Computing. Zum Beispiel sind Amazon Elastic Compute Cloud (EC2) Instanzen virtuelle Server in AWS. EC2 benutzt VM Technologie, um jedem Kunden ein eigenes isoliertes Betriebssystem bereitzustellen. Durch die VM Technologie können die Betriebssysteme von mehreren Kunden auf einem physikalischen Server laufen. Dies erhöht die Effizienz in den Datenzentren.
Eine weitere Abstraktion sind Container. Ein Container beinhaltet nur die Applikation und die Abhängigkeiten für die Applikation. Ein Container beinhaltet kein vollständiges Betriebssystem. Stattdessen übersetzt eine Container Engine die Anfragen von der Applikation an das Host-Betriebssystem. Zudem isoliert die Container Engine mehrere Container auf einem Host-Betriebssystem. Ein Container ist leichtgewichtiger, verglichen mit einer Virtuellen Maschine. Die meisten Applikationen brauchen kein vollständiges Betriebssystem. Eine Virtuelle Maschine ist also sozusagen ein “overkill” zum Ausführen vieler Applikationen. Verglichen mit einer Virtuellen Maschine braucht ein Container weniger Speicherplatz, da kein Speicher für das Betriebssystem benötigt wird. Außerdem kann ein Container schneller gestartet werden als eine Virtuelle Maschine. Eine Virtuelle Maschien muss zuerst das Gast-Betriebssystem starten. Genau wie beim Neustarten von deinem Computer, dauert das Starten vom Gast-Betriebssystem einige Sekunden.
Docker ist eine Software, die die Bereitstellung von Anwendungen vereinfacht, indem Container, die alle notwendigen Abhängigkeiten und der gesamte Code enthalten und sich als Dateien transportieren und installieren lassen. Der Container wird ausgeführt und wenn sein Auftrag beendet ist, wird der Container automatisch beendet.
Docker-Images werden als Docker-Container ausgeführt und enthalten die Anweisungen zum Erstellen von Containern. Die Images können nicht geändert werden und um Änderungen vorzunehmen, muss ein neues Image erstellt werden. Die Images können in einem Repository gespeichert werden. Durch das Speichern in einem Repository kann Image einfach mit anderen Nutzern geteilt werden. Ein Container Registry hilft bei der Verwaltung von Repositories.
Amazon Elastic Container Registry (Amazon ECR) ist eine vollständig verwaltete Container-Registry, die das Speichern, Verwalten und zur Verfügung stellen von Container-Images erleichtert. Ohne die Infrastruktur im Hintergrund verwalten zu müssen, können Container-Images direkt in das Repository gepusht werden und einfach genutzt werden. Der Speicher für die Container-Images ist hochverfügbar und beständig. Da Amazon ECR mit anderen AWS Services wie beispielsweise Amazon Elastic Container Service (Amazon ECS) und Amazon Elastic Kubernetes Service (Amazon EKS) integriert ist, wird die Entwicklung bis zur fertigen Anwendung einfacher, da die Infrastruktur insgesamt nicht verwaltet werden muss, sondern selbstständig skaliert.
Bis jetzt wurde die relevante Infrastruktur erstellt (VPC, Load Balancer, Datenbank), um die Beispielanwendung bereit zu stellen. Nun können die Container Images erstellt werden, damit der API Back-End Service implementiert werden kann. Dieser Dienst wird hinter dem Load Balancer auf Anfragen reagieren und diese an die Datenbank weiterleiten. Die dafür notwendigen Verbindungsdetails müssen beim Erstellen des Containers als Umgebungsvariablen angegeben werden.
Für die Durchführung dieses Moduls wird ein Container Repository benötigt.
Aufgabe:
Erstelle ein Repository für den Backend Container mit Hilfe von Amazon Elastic Container Registry und benenne es workshop-backend
.
git clone https://github.com/aws-samples/cloud-app-builders-modules-german.git
cloud-app-builders-modules-german
sichtbar und hat die gleiche Struktur und Inhalt wie das Github Repository.cd ./cloud-app-builders-modules-german/src/container-api
. Falls du dir mit dem Befehl unsicher bist, kannst du hier nochmal nachschauen.workshop-backend
Repository klicken.Herzlichen Glückwunsch! Du hast ein Container Repository in Amazon ECR für die Speicherung des Container Images erstellt. In der Cloud9 IDE hast du zudem das Container Image erstellt und über die Push Kommandos in das Amazon ECR Repository kopiert. Im nächsten Schritt wird das Container Cluster aufgesetzt.