AWS
Amazon Web Services - Pierre
Amazon war der Vorreiter des heutigen Cloud Computings (ca. im Jahre 2005). Heutzutage fĂźhrt fast kein Weg daran vorbei (es gibt viele Cloud-Anbieter). Der Vorteil ist besteht in
schnelle (dynamische) Bereitstellung von Ressourcen
up-/downscaling zur Kostenoptimierung
serverless computing
exzellente Komponenten und Tooling, um den gesamten Softwareentwicklungszyklus zu unterstĂźtzen
Während man frĂźher nur als GroĂunternehmen relevante Software bereitstellen konnte, ist das heute bereits Ein-Mann-Startups mĂśglich. Der Grund liegt vor allem in:
Abstraktion
bereitgestellte Services
man kann sehr leicht mit anderen LĂśsungen experimentieren - anschlieĂend kann man seine LĂśsung migrieren und sich dabei auf die Applikationen fokussieren, ohne ein Infrastruktur-Projekt vorab finalisieren zu mĂźssen. Das bringt Agilität und Innovation.
Kostenoptimierung
"unendliche" Ressourcen, die SOFORT verfĂźgbar sind
AWS betreibt hierzu riesige Data-Centers, die die Ineffizienz eines eigenen Data-Centers (geplant fßr Peaks) durch On-Demand-Verteilung auf eine Vielzahl von Kunden lÜsen. Hätte jeder Kunden zur gleichen Zeit den Peak, dann wäre auch das AWS-Data-Center am Ende. Da das aber super unwahrscheinlich ist, funktioniert das Konzept eines "moderaten" Data-Centers, das ßber smarte LÜsungen auf Effinzienz getrimmt ist. Auf diese Weise entsteht eine Win-Win-Situation.
Das fĂźhrende Konzept im AWS-Umfeld ist die Abstraktion. Verschiedene AWS-Produkte bieten unterschiedliche Abstraktionslevel. Auf niedrigstem Abstraktionslevel hat man EC2 Instanzen, die man vollständig in seinem VPS kontrollieren kann, auf hĂśchstem Abstraktionslevel hat man serverless Lambdas, die zwar auch auf EC2 abgearbeitet werden ... aber man muss sich nicht darum kĂźmmern. Ăber das schlanke WebUI der Admon Console lassen sich die Services konfigurieren.
Serverless ist ein gutes Beispiel fßr eat-your-own-dogfood. AWS bildet hier eine Abstraktionsebene, die darunter existierende Produkte (z. B. EC2) verwendet. Hier wird auch deutlich, dass AWS nicht DIE Platform ist, sondern weitere Abstraktionen ermÜglicht und auch fÜrdert. Dem Platform Engineering, mit dem ich mich derzeit beschäftige, kÜnnte man entgegnen, dass AWS doch die Platform ist. Ja, AWS ist eine Platform. Doch die Anwendungslandschaft eines Unternehmens bietet evtl. weitere sinnvolle MÜglichkeiten zur Abstraktion aufbauend auf der AWS-Platform.
Verwendet man Infrastructure-as-Code, dann kommen mit terraform-module, Helm-Charts, ... weitere Abstraktionslayer dazu. Auf diese Weise lassen sich komplexe LĂśsung mit wenigen Zeilen Code (= Konfiguration) abbilden.
Ganz grundsätzlich hat man im Cloud-Computing nur relativ wenig unter Kontrolle. Das Shared-Responsibility Model regelt fßr welche Aspekte AWS zuständig ist und fßr welche der Kunde (Applikationsentwickler). Meistens bleibt die Verantwortung des Kunden auf einem hohen Abstraktionslevel, so dass sich die darunterliegende Platform verändern kann, ohne dass der Kunde etwas bemerkt. Abstraktion reduziert die Komplexität auf ein Minimum und macht es handelbar fßr die Nutzer.
Cloud-Computing ermÜglich Pay-as-you-Go, d. h. die Ressourcen von AWS im Datacenter sind nahezu unerschÜpflich und der Kunde zahlt nur, was er nutzt. Bei einem OnPrem-Ansatz muss man eine sehr sorgfältige Ressourcenplanung machen, die auch Peak-Zeiten abdecken muss. Auf diese Weise entstehen häufig Hardware-Anforderungen, die man in 99% gar nicht benÜtigt. Zudem muss die Hardware alle 3-5 Jahre erneuert werden - hier sind Migrationen erforderlich. All die Dinge sorgen fßr Investitions- oder Projektkosten, die in der Cloud nahezu komplett entfallen.
Getting Started
12 Monate kostenlos, wenn man nur
t2.micro
Instanzen startetman muĂ aber AUF JEDEN FALL eine Kreditkarte hinterlegen
Image aussuchen
Instanz
t2.micro
(ist im kostenlosen Paket enthalten) starten (z. B.ubuntu-xenial-16.04-amd64-server-20180814
)hierbei kann man einen SSH-SchlĂźssel generieren lassen bzw. einen schon vorhandenen SchlĂźssel verwenden
der private Teil muĂ runtergeladen und in
~/.ssh/foo.pem
mit den Berechtigungen400
abgelegt werden. Folgende~/.ssh/config
anlegen:
per
ssh foo
eine ssh-Console startenready to use
Getting Started with Docker, maven, Java
Aufsetzend auf dem AMI Ubuntu Server 16.04 LTS (HVM), SSD Volume Type - ami-0552e3455b9bc8d50
konnte ich eine Entwicklungsumgebung innerhalb von 5 Minuten folgendermaĂen aufsetzen:
Die von meinen Docker Services bereitgestellten Ports muĂten dann noch Ăźber die AWS-Management-UI als Inbound Rules der Security Group eingetragen werden.
Migration nach AWS
Unternehmen, die aus der OnPrem-Welt kommen, mßssen ihre LÜsungen (sofern sie keine hybride Cloud betreiben wollen) in die Cloud migrieren. Der gängigste Ansatz ist ein Lift-and-Shift-Ansatz. Hierbei wird die existierende LÜsung nahezu 1:1 in der Cloud abgebildet. Auf diese Weise kann die Migration relativ schnell erfolgen, ohne sie mit einem Redesign der LÜsungen zu verknßpfen. Dadurch erreicht man eine schnelle AblÜsung der OnPrem Infrastruktur, doch auf Kosten einer Applikationslandschaft, die noch auf OnPrem zugeschnitten ist. Im nachhinein sollte man die LÜsungen refactorn, um den Nutzen der Cloud wirklich spßren zu kÜnnen. Bei diesem Ansatz basieren die LÜsungen dann auf einem statischen statt elastischen Setup und dadurch sind die Runtime-Kosten deutlich hÜher als OnPrem. Zudem kÜnnen selbstentwickelte Komponenten durch AWS-Produkte abgelÜst werden.
Die Migration ist in den meisten Unternehmen wahrscheinlich eine lange Reise, die i. a. Jahre dauert.
Templates
Manuelles Zusammenclicken einer ganzen Landschaft ist aufwendig und fehleranfällig ... insbesondere fßr Newbies. Entweder macht man das
automatisiert per
oder Cloudformation
interaktiv ßber die AWS-WebUI, indem man ein Template auswählt
Kosten
Zum Ausprobieren kann man sich einen kostenlosen (12 Monate) Free-Tier-Account anlegen. Will man aber Business auf der Platform betreiben, dann mÜchte man natßrlich wissen, welche Kosten auf einen zukommen. Leider ist das allerdings nicht ganz einfach ... erstens muà man natßrlich wissen, welche Last man bewältigen muà und zweitens muss man sich mit den AWS Tools ganz gut auskennen, um wirklich zuverlässige Zahlen zu bekommen.
Cost Explorer
Hier kann man den aktuellen Verbrauch, den historischen und einen Forecast sehen. Man kann hier jede Menge filtern und gruppieren.
Konzepte
Oranisationsebenen
manche Services sind Global, d. h. die Ressourcen existieren in diesem Account nur ein einziges Mal (z. B. IAM)
alle Regionen sind unabhängig voneinander und man muà bei der Nutzung der AWS Console (Web-UI) die entsprechende Region auswählen
Region (z. B. us-east-1, us-east-2, us-west-1, eu-west-1)
jede Region ist ein unterschiedlicher geografischer Bereich
in jeder region gibt es wiederum mehrere physisch isolierte Standorte (Availability Zones) ** us-east-1a ** us-east-1b ** ... ** us-east-1f
in jeder Availability Zone gibt es zumeist mehrere Data-Center
nicht alle AWS Services sind in allen Regionen vorhanden
Edge Locations: AWS unterstĂźtzt sog. Edge-Locations, die zum Cachen von Ressourcen nah (Reduktion der Latency) beim Enduser genutzt werden (z. B. von CloudFront). AWS kĂźmmert sich hier um die Replikation Ăźber sein schnelles Backbone-Netz
ELB - Elastic LoadBalancer
In AWS ist die Elastizität der groĂe Vorteil. Man kann nach Bedarf weitere Instanzen hochfahren und wieder runterfahren. Davon soll der Kunde nichts mitbekommen. Das funktioniert natĂźrlich nur, wenn die Services im Backend fĂźr den Nutzer verborgen sind. AWS bewerkstelligt das mit sog. Loadbalancern (z. B. Application Loadbalancer), mit dem der Nutzer kommuniziert. Im Hintergrund werden die Requests an die aktuell existierenden und gesunden Backend Services weitergeleitet. Die Antworten gehen dann wiederum durch den Loadbalancer zum Nutzer zurĂźck.
Auf diese Weise werden Ausfälle von Services (z. B. EC2) in Availability-Zones-under-Maintenance oder auch die Elastizität verborgen. Der ELB ist highly-scalable und hochverfßgbar - managed von AWS selbst ... hier kann nichts schiefgehen, wenn man die Ressourcen im Hintergrund sinnvoll auf Availability-Zones verteilt hat. Health-Checks sind hier ganz enstcheident, denn der ELB entscheidet mit diesen Informationen welche Komponenten im Backend fßr die Requestverarbeitung genutzt werden. Eine neue EC2 Instanz ist vielleicht schon hochgefahren, aber die Applikation steht evtl. noch nicht zur Verfßgung (weil die Initialisierung länger dauert). Dem Nutzer soll ein zuverlässiger Dienst angeboten werden ... deshalb muss hier alles sauber funktionieren.
Man kann private und public Loadbalancer haben. Ein public Loadbalancer bekommt eine Public-IP-Adresse, einen DNS-Eintrag und wird mit dem Internet-Gateway verbunden, so dass der Traffic aus dem Internet auch in die Subnetze geroutet werden kann. Ein private Loadbalancer steht nur intern im VPC zur Verfßgung ... erfßllt dort aber den gleichen Zweck wie ein Public-Loadbalancer ... nämlich die Dynamik/Elastizität in der Cloud durch einen zuverlässigen Loadbalancer auszugleichen.
Ein ELB hat folgende Komponenten:
Port (und IP-Adresse)
Target-Group
Backend Ressourcen, die vom ELB verborgen werden
Routing-Rules
hier kann man die URL-Paths verwenden, um Requests unterschielich zu routen
darĂźber lassen sich auch Sticky-Sessions abbilden
Amazon bietet folgende Arten von Loadbalancers:
Application Load Balancer (ALB)
arbeitet auf HTTP/HTTPS-Ebene (Layer 7)
unterstĂźtzt die Terminierung der SSL-Verbindung
unterstĂźtzt Sticky-Sessions Ăźber Cookies, die vom Load-Balancer generiert werden
im elastischen Umfeld will man aber eigentlich auf Stickiness verzichten
Routingoptionen
host-basiert
es kĂśnnte sein, daĂ mehrere Domains auf einen Loadbalancer geroutet werden (Ăźber DNS), dann kann der ELB Ăźber den Hostnamen ein entsprechendes Routing anbieten
pfad-basiert
Network Load Balancer (NLB)
Availability Zones
Amazon muà natßrlich auch selbst mal Wartungsarbeiten durchfßhren (oder hat auch mal ungeplante Ausfälle, z. B. durch Brand) und damit Infrastruktur vom Netz nehmen. Amazon empfiehlt die Verwendung von drei sog. Availability Zones und garantiert, daà IMMER mind. eine verfßgbar ist. Bei der Verteilung der Microservices auf die verschiedenen Zones sollte man also darauf achten, daà in jeder Zone mind. ein Knoten jedes Services deployed ist.
Der Elastic Load Balancer (ELB), der häufig der einzige Üffentliche Zugangspunkt fßr Requests ist, sorgt dafßr, daà die Requests aus dem Internet in die tatsächlich verfßgbare Availability Zones delegiert werden und so keine Requests verlorengehen.
Eine Region (z. B. eu-central-1) hat mind. 3 Availability-Zones (z. B. eu-central-1a, eu-central-1b, eu-central-1c) - Regionen und Availability Zones sind voneinander isoliert, so daĂ der Ausfall einer Region/Zone keinen EinfluĂ auf andere hat. Die Entfernung zwischen Client und Server entscheidet letztendlich Ăźber die Signallaufzeit und hat somit entscheidenden EinfluĂ auf die zu erwartende Latenz. Deshalb wird man versuchen, die Nutzer aus verschiedenen Regionen (z. B. eu-central-1, eu-west-1, us-east-1) zu bedienen.
Auto-Scaling-Group (ASG)
Vorteil einer Cloud-LĂśsung gegenĂźber Bare-Metal ist, daĂ die Cloud-LĂśsung on-demand skaliert werden kann. Eine Auto-Scaling-Group Ăźbernimmt die automatische horizontale Skalierung der Instanzen, d. h. man gibt z. B. an, daĂ man
mind. 2 Instanzen
max. 10 Instanzen
laufen lassen will. Die ASG sorgt dann aufgrund von Lastmetriken und Healthchecks fßr die automatische Erzeugung/ZerstÜrung von Instanzen. Auf diese Weise kann man dynamisch auf Lastspitzen reagieren, ohne die Kosten aus dem Ruder laufen zu lassen (denn die Instanzen werden auch reduziert, wenn keine Last anfällt).
Eine ASG braucht ein Launch-Template, um zu wissen welche EC2 Instanzen erzeugt werden sollen. Die Konfiguration des Launch-Templates ist natßrlich sehr ähnlich zur Konfiguration einer neuen EC2 Instanz (Instanz-Typ, Security-Group, EBS-Volume, IAM-Role, ...).
Die ASG muss angelegt werden und benĂśtigt dazu folgende Informationen:
das VPC
Availability-Zones
das Launch-Template
ELB + TargetGroup
Skalierungsparameter (z. B. minimum 2 Instanzen, maximum 10 Instanzen)
HealthChecks
ScalingPolicy
hier kann man besipielsweise auch CloudWatch Metriken zur Skalierungsentscheidung verwenden (z. B. CPU-Usage)
S3
Dieser Dienst bietet einen File-Server in Form von sog. S3-Buckets. Der Names des Buckets muĂ global eindeutig sein.
Monitoring
Die Messpunkte werden in einer Timeseries-Datenbank gesammelt und mit Tooling visuell dargestellt (in sog. Dashboards, die man sich selbst zusammenstellen kann). Alarme sorgen dafĂźr, dass niemand die Graphen Ăźberwachen muss.
AWS kann natßrlich nur ganz allgemeine Metriken seiner Services ßberwachen. Die Applikationsentwickler kÜnnen das Monitoring signifikant verbessern indem sie Applikationsspezifische KPIs nach Cloudwatch reporten und in das Monitoring einhängen.
CloudWatch
CloudWatch ist die AWS-interne Monitoring LĂśsung mit Metrics-Collection, Alarms, Notifications, Self-Healing, ...
Instana Integration
Logging
via Cloudwatch
Shared Responsibility Model
AWS bietet die Platform, auf der die KundenlÜsungen aufsetzen. AWS hat seinen Teil zu einem sicheren und zuverlässigen Betrieb sicherzustellen (z. B. dass die Festplatten funktionieren, die Hypervisor-Technologie mit den letzten Security-Patches laufen oder die SDKs mit den sicheren Library-Versionen laufen) aber der Kunden hat auf SEINEM Layer die Verantwortung dafßr zu ßbernehmen (z. B. dass die EC2-System mit den latest Security-Patches laufen oder welche Benutzergruppen Zugriff auf bestimmte Ressourcen bekommen).
FAQ
Frage 2: Ich habe ein Key-Pair generiert und den private Key runtergeladen - wie komme ich an den Public Key ran? Antwort 2: Der Public Key wird automatisch in dem erstellten Image beim entsprechenden User unter ~/.ssh/authorized_keys
eingetragen. Sollte man das Image gelĂśscht haben, will den Key aber fĂźr ein anderes Image wiederverwenden (und manuell in ~/.ssh/authorized_keys
eintragen), dann kann man aus dem Private Key den Public Key erzeugen per ssh-keygen -y -f publicKey.pem
.
Last updated
Was this helpful?