Auf einen Blick: AWS ECS und Lambda sind für die Anwendungsbereitstellung auf AWS unerlässlich. ECS orchestriert Docker-Container, während Lambda serverlose Funktionen für ereignisgesteuerte Anwendungen ermöglicht.
- ECS bietet Flexibilität bei der Verwaltung von Containern in verschiedenen Umgebungen.
- Lambda ist ideal für kleinere Anwendungen, die eine schnelle Bereitstellung ohne Infrastrukturverwaltung benötigen.
Es gibt mehrere Optionen für die Bereitstellung von Code und Anwendungen im AWS-Ökosystem. Zwei der beliebtesten Optionen für die AWS-Anwendungsbereitstellung sind:
- Elastischer Containerdienst (ECS)
- AWS Lambda
Heute schauen wir uns ECS und Lambda an, erklären, was jede Option bewirkt, und besprechen einige wichtige Überlegungen, wie man eine Option über eine andere einsetzt.
Elastic Container Services (ECS): Containerorchestrierung
ECS wird verwendet, um Docker-Container im großen Maßstab zu verwalten und bereitzustellen (Containerorchestrierung). ECS verwendet die folgenden AWS-Komponenten, um ECS-Anwendungen zu speichern und auszuführen:
- AWS ECR
- ECS-Cluster
- Aufgabendefinitionen
- ECS-Dienstplaner
- Weitere AWS-Dienste
Schauen wir mal.
Das AWS Elastic Container Repository (ECR)
ECR verwaltet, speichert, komprimiert, sichert und kontrolliert den Zugriff auf Container-Images. Alternativ können Sie Docker Hub zum Speichern und Zugriff auf Container-Images verwenden.
Ein AWS ECS-Cluster zum Ausführen containerisierter Anwendungen
Ein Cluster ist eine logische Gruppierung von Aufgaben und Containern, die mehrere verschiedene Starttypen (Infrastruktur) zum Ausführen verwenden. Cluster können enthalten:
- Elastic Cloud Compute (EC2)- Instanzen
- Amazon-verwaltete Instanzen mit AWS Fargate
- Externe Server außerhalb des Amazon-Ökosystems, die Amazon ECS Anywhere verwenden
Wenn Sie EC2-Instanzen zu einem ECS-Cluster hinzufügen, müssen Sie die EC2-Server in diesem Cluster verwalten, einschließlich der Sperrung der EC2-Sicherheit, des Zugangs, des Patches der Betriebssysteme und der Wartung durchführen. AWS Fargate ist eine serverlose Rechenumgebung, die mit ECS arbeitet. Wenn Fargate-Aufgaben zu einem ECS-Cluster hinzugefügt werden, stellt AWS die EC2-Server bereit und verwaltet sie, in denen Ihre Container laufen, sodass Sie keine separate EC2-Infrastruktur verwalten müssen. Amazon ECS Anywhere ist eine ECS-Erweiterung, die es ermöglicht, containerisierte Anwendungen auf Servern außerhalb des AWS-Ökosystems auszuführen. ECS Anywhere lädt einen Agenten auf kundenverwaltete Betriebssysteme, macht sie zu verwalteten Instanzen und ermöglicht es diesen Instanzen, sich in einem ECS-Cluster zu registrieren.
Aufgabendefinitionen
Aufgabendefinitionen, die 1–10 Container (und Parameter) beschreiben, die eine ECS-Anwendung definieren. Aufgabendefinitionen werden als JSON-Dateien gespeichert.
Der AWS ECS Service Scheduler
Dieser Dienst plant Aufgaben (Instanziierungen der Aufgabendefinitionen), die innerhalb Ihrer ECS-Cluster-Infrastruktur ausgeführt werden. Er führt Aufgaben nach einem cron-ähnlichen Zeitplan oder Ihrem eigenen benutzerdefinierten Zeitplan aus. Der Task-Scheduler auch:
- Stellt sicher, dass Aufgaben bei AWS Elastic Load Balancers (ELBs) für die Lastverteilung zwischen geclusterten Servern registriert werden.
- Er übernimmt alle Strategien zur Aufgabenverteilung.
Weitere Dienstleistungen
AWS ist auch mit anderen AWS-Diensten integriert.
Wie ECS funktioniert
Zusammengefasst startet der ECS-Service-Scheduler Aufgaben in ECS-Clustern mithilfe von Task-Definitionen, die auf Docker-Container im Elastic Container Repository oder Docker Hub gespeichert sind. Die Verwendung von ECS ist bemerkenswert, da Sie Ihren eigenen EC2-Server-Cluster definieren, AWS EC2-Server verwalten und bereitstellen lassen können (AWS Fargate), externe Server (ECS Anywhere) oder eine Kombination aus drei Bereichen verwenden können. Cluster und ECS-Aufgaben laufen in festgelegten AWS Virtual Private Clouds (VPCs) und Subnetzen.
AWS Lambda: Serverlose Funktionsbereitstellung
AWS Lambda ist hervorragend darin, kleinere On-Demand-Anwendungen auszuführen, die durch neue Ereignisse und Informationen ausgelöst werden. Lambda ist ein AWS-Service, der Code ausführt, ohne Infrastruktur bereitstellen und verwalten zu müssen. Es gibt keine EC2-Bereitstellung oder Cluster, die definiert werden müssen. Lambda kontrolliert vollständig die EC2-Instanzen, auf denen Ihr Code läuft, und skaliert sich automatisch nach Bedarf. Lambda arbeitet auf Funktions- und Codeebene folgendermaßen:
Du erstellst den Code, den du ausführen möchtest
Lambda unterstützt viele Sprachen über Lambda-Laufzeiten, darunter nodeJS, Python, Go, Java, Ruby, .Net und C#.
Du paketierst und lädst deinen Code hoch
Verpacken Sie Ihren Code in einem Zip- oder JAR-Deployment-Paket und laden Sie ihn über die Lambda-Konsole oder die AWS-CLI hoch. Sie bestimmen den Datei- und Funktionsnamen, der als Ihr Einstiegspunkt dient. Nach dem Hochladen stellt Lambda einen Amazon Resource Name (ARN) bereit, der als ID für die gerade erstellte Funktion dient. Ihre Lambda-Funktion wird aufgerufen und läuft auf EC2-Instanzen. Lambda-Funktionen können auf verschiedene Arten aufgerufen werden, darunter:
- Direkt von der Lambda-Konsole, der Lambda-API, dem AWS Software Development Kit (AWS SDK), AWS CLI und AWS-Toolkits.
- Von Triggern in einer Lambda-Ressource oder einer anderen Ressource.
- Aus einer Lambda-Ereignisquell-Mapping, die eine Lambda-Funktion aufruft. Lambda liest Ereignisse von mehreren AWS-Diensten wie Amazon DynamoDB, Amazon Simple Queue Service (SQS) usw. Ereignisquellen werden in AWS CLI oder AWS SDK erstellt.
- Von AWS-Diensten, die Lambda direkt aufrufen, darunter AWS ELB, AWS Simple Notification Service (SNS), Amazon API Gateway und mehrere andere.
Funktionen können entweder aufgerufen werden:
- Synchron, wobei Lambda nach dem Ausführen der Funktion auf eine Antwort wartet und den Antwortcode mit zusätzlichen Daten an den Client zurückgibt, was wiederholte Versuche und Fehlerantworten ermöglicht
- Asynchron, wobei der Client das Ereignis an Lambda übergibt und nicht auf den Antwortcode und die Daten wartet.
Nach dem Erstaufruf der Funktion kann Lambda bei Traffic um weitere 500 Instanzen pro Minute skalieren, bis genügend Instanzen vorhanden sind, um den Datenverkehr zu bewältigen. Das Skalieren läuft fort, bis ein Lambda-Nebenzeitenlimit erreicht ist oder Anfragen schneller eingehen, als Ihre Funktion skalieren kann. Sie können auch provisionierte Nebenläufigkeit vertragen, um Wartezeiten bei Lambda-Skalierung zu verhindern. Wenn der Datenverkehr abklingt, stoppt Lambda ungenutzte Instanzen.
Wie Lambda funktioniert
Lambda bietet serverlose Anwendungsbereitstellung, einschließlich:
- EC2-Instanz-Einrichtung
- Lastverteilung
- Zielgruppen
- Auto-Skalierung
Deine Hauptverantwortung ist es, deine Funktionen und Invocation-Konfigurationen einzurichten. Lambda erledigt den Rest. Lambda-Funktionen sind einfach einzurichten und in Bezug auf die Infrastruktur sorgenfrei.
ECS vs. Lambda: Welches ist das Richtige für Sie?
Nachdem wir uns nun angesehen haben, was jede Anwendungsbereitstellungsoption macht und wie sie funktioniert, hier einige Überlegungen bei der Wahl einer Option gegenüber der anderen.
Betrachten wir Lambda statt ECS, wenn...
- Sie haben eine kleinere Anwendung, die auf Abruf in 15 Minuten oder weniger läuft. Lambda-Funktionen sind durch einen Timeout-Wert begrenzt, der von 3 Sekunden bis 900 Sekunden (15 Minuten) konfiguriert werden kann. Lambda beendet automatisch Funktionen, die länger als ihr Timeout-Wert laufen.
- Es ist Ihnen egal, und Sie brauchen keine fortgeschrittene EC2-Instanzkonfiguration. Lambda verwaltet, bereitet und sichert EC2-Instanzen für Sie, stellt Zielgruppen, Lastverteilung und automatische Skalierung bereit. Es beseitigt die Komplexität der Verwaltung von EC2-Instanzen.
- Du solltest nur für die Kapazität bezahlen. Lambda-Gebühren werden nach Millisekunden und der Anzahl der ausgelösten Code-Zeiten gemessen. Die Kosten korrelieren mit der Nutzung. Lambda hat außerdem eine kostenlose Nutzungsstufe.
Betrachte ECS statt Lambda, wenn...
- Du betreibst Docker-Container. Obwohl Lambda jetzt Container-Image-Unterstützung bietet, ist ECS eine bessere Wahl für ein Docker-Ökosystem, besonders wenn du bereits Docker-Container erstellst.
- Du möchtest Flexibilität, um in einer verwalteten EC2-Umgebung oder in einer serverlosen Umgebung zu laufen. Du kannst deine eigenen EC2-Instanzen bereitstellen oder Amazon kann sie für dich bereitstellen. Du hast mehrere Möglichkeiten.
- Du hast Aufgaben oder Batch-Jobs, die länger als 15 Minuten laufen. Wähle ECS, wenn du mit länger laufenden Jobs arbeitest, da es das oben genannte Lambda-Timeout-Limit umgeht.
- Du musst Jobs planen. ECS bietet einen Service Scheduler für langlaufende Aufgaben und Anwendungen sowie die Möglichkeit, Aufgaben manuell auszuführen.
Im Allgemeinen eignet sich ECS am besten für den Betrieb einer Docker-Umgebung auf AWS mit Cluster-Instanzen. Lambda eignet sich am besten für die schnelle Bereitstellung kleiner, On-Demand-Anwendungen in einer serverlosen Umgebung.
Verwandte Literatur
AWS-Leitfaden
- Ein Leitfaden für Anfänger zur Beherrschung des AWS Serverless-Anwendungsmodells
- AWS Well-Architected Framework: 6 Säulen und Best Practices
- AWS Global Cloud Infrastructure: Regionen, Zonen & mehr
- Was ist Amazon VPC? Amazon Virtual Private Cloud erklärt
- Was ist EFS? Amazon Elastic File System erklärt
- AWS-Management-Tools: Was verfügbar ist und wie man auswählt
- Was sind AWS-Organisationen? Schlüsselfunktionen, Vorteile und Best Practices
- Einführung in AWS Spot-Instanzen
- Einführung in AWS Reserved Instances
- Eine Einführung in AWS Route 53
- Was ist AWS Elastic Load Balancing?
- AWS ECS vs AWS Lambda: Was ist der Unterschied & Wie wählt man aus
- AWS ECS vs. EKS: Was ist der Unterschied und wie wählt man aus?
- Was ist AWS EBS (Elastic Block Store)?
- AWS Snowball Edge: Datenübertragung mit Edge Computing
- AWS Cloud Design Patterns
- AWS Cloud Datenbanken erklärt: Innovation in der Multi-Cloud
- AWS Braket Quantum Computing: So starten Sie
- AWS vs Azure vs GCP: Vergleich der drei großen Cloud-Plattformen
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.