AWS ECS vs. AWS Lambda: Was ist der Unterschied und wie man auswählt

AWS ECS vs. AWS Lambda: Was ist der Unterschied und wie man auswählt

  • Cloud
6 Minuten Lesezeit Aktualisiert May 6, 2021

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.

AWS ECS

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:

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.

AWS Lambda

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

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Cloud

Interessieren Sie sich für mehr von BMC?

The Brief ist unsere monatliche E-Mail zum Mainframe und zur Enterprise-Orchestrierung: Recherchen, Kundenberichte, Produktnachrichten, Events.

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Sie haben The Brief abonniert

Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.