In diesem Modul verwenden Sie den Amazon Elastic Container Service (Amazon ECS), um einen verwalteten Cluster von EC2-Compute-Instances zu instanziieren und das Image als Container auf dem Cluster bereitzustellen. Beginnen Sie mit der Entwicklung

Übersicht über die Architektur

a. Client
Der Client stellt über Port 80 eine Anforderung an den Load Balancer.

b. Load Balancer
Der Load Balancer verteilt Anforderungen auf alle verfügbaren Ports.

c. Zielgruppen
Instances werden in der Zielgruppe der Anwendung registriert.

d. Container-Ports
Jeder Container führt einen einzelnen Anwendungsprozess aus, der den übergeordneten node.js-Cluster an Port 80 innerhalb seines Namespace bindet.

e. In Container verpackter node.js-Monolith
Der übergeordnete node.js-Cluster ist für die Verteilung des Datenverkehrs an die Auftragnehmer innerhalb der monolithischen Anwendung verantwortlich. Diese Architektur ist zwar in Containern verpackt, aber immer noch monolithisch, da jeder Container die genau gleichen Eigenschaften wie der Rest der Container besitzt.

Amazon Elastic Container Service (Amazon ECS) ist ein hochgradig skalierbarer, leistungsstarker Container Management Service, der Docker-Container unterstützt und es Ihnen ermöglicht, Anwendungen auf einem verwalteten Cluster von Amazon EC2-Instances einfach auszuführen. Mit einfachen API-Befehlen können Sie Docker-aktivierte Anwendungen starten und beenden sowie den gesamten Zustand Ihres Clusters abfragen. Außerdem erhalten Sie Zugang zu vielen bekannten Funktionen wie beispielsweise Sicherheitsgruppen, Elastic Load Balancing, EBS-Volumes und IAM-Rollen.

Mit Amazon ECS können Sie die Platzierung von Containern in Ihrem Cluster entsprechend Ihrem Ressourcenbedarf und Ihren Verfügbarkeitserfordernissen planen. Außerdem können Sie Ihren eigenen Planer oder Planer von Drittanbietern integrieren, um geschäftliche oder anwendungsspezifische Anforderungen zu erfüllen.

Für die Nutzung von Amazon ECS fallen keine zusätzlichen Gebühren an. Sie zahlen für AWS-Ressourcen (z. B. EC2-Instances oder EBS-Volumes), die Sie zum Speichern und Betreiben Ihrer Anwendung erstellen.


Befolgen Sie die Schritt-für-Schritt-Anleitung unten, um die node.js-Anwendung mit Amazon ECS bereitzustellen. Klicken Sie auf die Nummer eines jeweiligen Schritts, um den Abschnitt zu erweitern.

break-the-monolith
  • Schritt 1: Starten eines ECS Clusters mit AWS CloudFormation

    Erstellen Sie einen Amazon ECS-Cluster, der hinter einem Application Load Balancer bereitgestellt wird.

    1. Navigieren Sie zur AWS CloudFormation-Konsole.
    2. Wählen Sie Create stack (Stapel erstellen).
    3. Wählen Sie Upload a template file (Eine Vorlage hochladen) und wählen Sie die Datei ecs.yml aus dem GitHub-Projekt aus amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.yml aus. Klicken Sie dann auf Next (Weiter).
    4. Geben Sie als Stapelnamen BreakTheMonolith-Demo ein. Stellen Sie sicher, dass die anderen Parameter die folgenden Werte haben:
      1. Gewünschte Kapazität = 2
      2. InstanceType = t2.micro
      3. MaxSize = 2
    5. Klicken Sie auf Next (Weiter).
    6. Lassen Sie die Werte auf der Seite Configure stack options (Stapeloptionen konfigurieren) unverändert und klicken Sie dann auf Next (Weiter).
    7. Bestätigen Sie im unteren Bereich der Seite Review BreakTheMonolith-Demo (Überprüfung der BreakTheMonolith-Demo) die Capabilities statement (Funktionserklärung), indem Sie das Kontrollkästchen aktivieren, und wählen Sie dann Create stack (Stapel erstellen).

    Ihr Stapel wird mit dem Status CREATE_IN_PROGRESS angezeigt. Sie können die Aktualisierungsschaltfläche oben rechts auf dem Bildschirm auswählen, um den Fortschritt zu überprüfen. Dieser Vorgang dauert normalerweise weniger als fünf Minuten.

    Stapel erstellen

    ⚐ HINWEIS: Sie können AWS CloudFormation-Stapel auch mithilfe der AWS Command Line Interface (AWS CLI) bereitstellen. Führen Sie den folgenden Code aus dem Ordner amazon-ecs-nodejs-microservices/3-microservices im Terminal auf Ihrem Computer aus und ersetzen Sie [Region] mit Ihrer AWS-Region.

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region [region] \
       --stack-name BreakTheMonolith-Demo \
       --capabilities CAPABILITY_NAMED_IAM
  • Schritt 2: Überprüfen der Ausführung Ihres Clusters

    Amazon ECS Überprüfen des Clusters
    • Wählen Sie den Cluster BreakTheMonolith-Demo und wählen Sie dann die Registerkarte Tasks (Aufgaben) aus, um sicherzustellen, dass keine Aufgaben ausgeführt werden.
    Amazon ECS Cluster-Aufgaben
    • Wählen Sie die Registerkarte ECS-Instances aus, um die beiden von der AWS CloudFormation-Vorlage erstellten Amazon EC2-Instances zu überprüfen.
      ⚐ Hinweis: Wenn Sie die Meldung erhalten, dass der ECS-Agent veraltet ist, klicken Sie auf Learn more (Weitere Informationen), um Anweisungen zum Aktualisieren des ECS-Agenten zu erhalten.
    Amazon ECS-Instances
  • Schritt 3: Erstellen einer Aufgabendefinition

    Aufgabendefinitionen informieren darüber, wie Amazon ECS die Anwendungscontainer im Cluster bereitstellt.

    • Navigieren Sie auf der linken Seite der Amazon ECS-Konsole zum Menü Task Definitions (Aufgabendefinitionen).
    • Wählen Sie Create new Task Definition (Neue Aufgabendefinition erstellen) aus.
    • Wählen Sie auf der Seite Select launch type compatibility (Kompatibilität des Starttyps auswählen) die Option EC2 aus und dann Next step (Nächster Schritt).
    • Befolgen Sie auf der Seite Configure task and container definitions (Aufgaben- und Containerdefinitionen konfigurieren) die folgenden Schritte:
      • Geben Sie im Feld Task Definition Name (Aufgabendefintionsname) api ein.
      • Navigieren Sie zu Container Definitions (Containerdefinitionen) und wählen Sie Add container (Container hinzufügen) aus.
      • Im Feld Add container (Container hinzufügen):
        • Wenn ein Parameter nicht definiert ist, können Sie ihn entweder leer lassen oder die Standardeinstellungen dafür beibehalten.
        • Geben Sie im Feld Container name (Containername) api ein.
        • Geben Sie im Feld Image [account-ID].dkr.ecr.[region].amazonaws.com/api:v1 ein.
          Ersetzen Sie [Konto-ID] und [Region] mit Ihren spezifischen Information. Stellen Sie sicher, dass die Markierung v1 dem Wert entspricht, den Sie in Modul 1 verwendet haben, um das Image zu markieren und zu verschieben. Dies ist die URL Ihres ECR-Repository-Images, das im vorherigen Modul erstellt wurde.
        • Stellen Sie sicher, dass im Feld Memory Limits (Speicherlimits) Hard Limit ausgewählt ist, und geben Sie als Wert 256 ein.
        • Unter Port-Mappings: Host-Port = 0 und Container-Port = 3000.
        • Navigieren Sie zu ENVIRONMENT (UMGEBUNG): CPU-Einheiten = 256.
    • Wählen Sie Add (Hinzufügen).
      Sie werden auf die Seite Configure task and container definitions (Aufgaben- und Containerdefinitionen konfigurieren) zurückgeleitet.
    • Wählen Sie Create (Erstellen) im unteren Bereich der Seite aus.

    Ihre Aufgabendefinition wird nun in der Konsole angezeigt.

    Aufgabendefinition
  • Schritt 4: Konfigurieren des Application Load Balancer: Zielgruppe

    Mithilfe des Application Load Balancer (ALB) kann Ihr Service den eingehenden Datenverkehr akzeptieren. Der ALB leitet den Datenverkehr automatisch an Container-Instances weiter, die auf dem Cluster ausgeführt werden, und verwendet diese als Zielgruppe.

    Überprüfen Sie Ihren VPC-Namen: Wenn Sie dieses AWS-Konto nicht zum ersten Mal nutzen, haben Sie möglicherweise mehrere VPCs. Es ist wichtig, dass Sie Ihre Zielgruppe mit der richtigen VPC konfigurieren.

    • Navigieren Sie zum Abschnitt "Load Balancer" der EC2-Konsole.
    • Hier finden Sie einen Load Balancer mit dem Namen demo.
    • Aktivieren Sie das Kontrollkästchen neben demo, um die Details des Load Balancer anzuzeigen.
    • Suchen Sie auf der Registerkarte Description (Beschreibung) das VPC-Attribut (in diesem Format: vpc-xxxxxxxxxxxxxxxxx).
      ⚐ Hinweis: Sie benötigen das VPC-Attribut beim Konfigurieren der ALB-Zielgruppe im nächsten Schritt.
    VPC-Attribut

    Konfigurieren der ALB-Zielgruppe

    • Navigieren Sie zum Abschnitt "Zielgruppe" der EC2-Konsole.
    • Wählen Sie Create target group (Zielgruppe erstellen) aus.
    • Konfigurieren Sie die Zielgruppe mit den folgenden Parametern (behalten Sie die Standardwerte für Parameter bei, die nicht in dieser Auflistung erscheinen):
      • Geben Sie als Target group name (Zielgruppennamen) api ein.
      • Wählen Sie als Protocol (Protokoll) HTTP aus.
      • Geben Sie als Port den Wert 80 ein.
      • Wählen Sie jenen Wert als VPC aus, der dem Wert des Load Balancer vom vorherigen Schritt entspricht. Dies ist höchstwahrscheinlich NICHT Ihr Standard-VPC.
      • Navigieren Sie zu den Advanced health check settings (Erweiterte Einstellungen für die Zustandsprüfung) und ändern Sie gegebenenfalls die folgenden Parameter: 
        • Geben Sie als Healthy threshold (Gesunden Grenzwert) den Wert 2 ein.
        • Geben Sie als Unhealthy threshold (Ungesunden Grenzwert) den Wert 2 ein.
        • Geben Sie als Timeout den Wert 5 ein.
        • Geben Sie als Interval (Intervall) den Wert 6 ein.
    • Wählen Sie Create (Erstellen) aus.
    Zielgruppen erstellen
  • Schritt 5: Konfigurieren des Application Load Balancer: Listener

    Der ALB-Listener prüft die bei Ihrem ALB eingehenden Verbindungsanforderungen.

    Fügen Sie zum ALB einen Listener hinzu

    • Navigieren Sie zum Abschnitt "Load Balancer" der EC2-Konsole.
    • Aktivieren Sie das Kontrollkästchen neben demo, um die Details des Load Balancer anzuzeigen.
    • Wählen Sie die Registerkarte Listeners aus.
    • Wählen Sie Add listener (Listener hinzufügen) und bearbeiten Sie gegebenenfalls die folgenden Parameter:
      • Wählen Sie als Protocol:port (Protokoll:Port) HTTP aus und geben Sie den Wert 80 ein.
      • Wählen Sie als Default action(s) (Standardaktionen) Forward to (Weiterleiten an) aus und geben Sie im Feld Target group (Zielgruppe) api ein.
    • Klicken Sie auf Save (Speichern).
    Listener zum ALB
  • Schritt 6: Bereitstellen des Monolithen als Service

    Stellen Sie den Monolithen als Service auf dem Cluster bereit.

    • Navigieren Sie zur Amazon ECS-Konsole und wählen Sie in der linken Menüleiste Clusters (Cluster) aus.
    • Wählen Sie den Cluster BreakTheMonolith-Demo und dann die Registerkarte Services aus und klicken Sie anschließend auf Create (Erstellen).
    • Auf der Seite Configure service (Service konfigurieren) bearbeiten Sie die folgenden Parameter (behalten Sie die Standardwerte für unten nicht aufgeführte Parameter bei): 
      • Wählen Sie als Launch type (Starttyp) EC2 aus.
      • Geben Sie als Service name (Servicenamen) api ein. 
      • Geben Sie unter Number of tasks (Anzahl der Aufgaben) 1 ein.
      • Klicken Sie auf Next step (Nächster Schritt).
    • Wählen Sie auf der Seite Configure network (Netzwerk konfigurieren) im Abschnitt Load balancing Application Load Balancer aus.
      Weitere Parameters erscheinen: Service IAM role (Service-IAM-Rolle) und Load balancer name (Load Balancer-Name).
      • Wählen Sie unter Service IAM role (Service-IAM-Rolle) BreakTheMonolith-Demo-ECSServiceRole aus.
      • Stellen Sie sicher, dass unter Load balancer name (Load Balancer-Name) demo ausgewählt ist.
    • Wählen Sie im Abschnitt Container to load balance (Container mit Load Balancer) Add to load balancer (Zu Load Balancer hinzufügen).
      Zusätzliche Informationen mit der Bezeichnung api:3000 werden angezeigt.
    • Gehen Sie im Abschnitt api:3000 wie folgt vor:
      • Wählen Sie als Production listener port (Port des Produktions-Listener) 80:HTTP aus.
      • Wählen Sie als Target group name (Zielgruppennamen) Ihre Gruppe aus: api.
      • Klicken Sie auf Next step (Nächster Schritt).
    • Behalten Sie auf der Seite Set Auto Scaling (Auto Scaling festlegen) die Standardeinstellungen bei und klicken Sie auf Next step (Nächster Schritt).
    • Überprüfen Sie auf der Seite Review (Überprüfen) die Einstellungen und wählen Sie dann Create Service (Service erstellen) aus.
    • Wenn der Service erstellt wurde, wählen Sie View Service (Service anzeigen).
    Amazon ECS Service API

    Gut gemacht! Sie haben jetzt einen laufenden Service. Es kann einige Minuten dauern, bis der Container bereit ist und mit dem Empfang des Datenverkehrs beginnt.

  • Schritt 7: Testen Ihres Monolithen

    Testen Sie Ihre Bereitstellung, indem Sie überprüfen, ob der Service im Internet verfügbar ist und Sie ihn anpingen können.

    So finden Sie Ihre Service-URL:

    • Navigieren Sie zum Abschnitt Load Balancers der EC2-Konsole.
    • Wählen Sie Ihre Load Balancer-Demo aus.
    • Kopieren Sie auf der Registerkarte Description (Beschreibung) den DNS-Namen und fügen Sie ihn in ein neues Browser-Fenster ein.
    • Die Nachricht Ready to receive requests(Bereit zum Empfangen von Anforderungen) wird nun angezeigt.


    Beachten Sie jeden Teil des Services:
    Basierend auf der URL leitet die node.js-Anwendung den Datenverkehr an jeden einzelnen Auftragnehmer weiter. Um einen Auftragnehmer anzuzeigen, fügen Sie einfach den Namen des Auftragnehmers api/[Name-des-Auftragnehmers] am Ende Ihres DNS-Namens wie folgt ein:

    • http://[DNS-Name]/api/users
    • http://[DNS-Name]/api/threads
    • http://[DNS-Name]/api/posts

    Sie können am Ende der URL auch eine Datensatznummer hinzufügen, um zu einem bestimmten Datensatz einen Drilldown durchzuführen. Zum Beispiel: http://[DNS-Name]/api/posts/1 oder http://[DNS-Name]/api/users/2

    Benutzer-Demo