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. Die Erstellung beginnen.

Architektur-Übersicht

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

b. Load Balancer
Der Load Balancer verteilt Anfragen über 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, weil jeder Container alle die gleichen Eigenschaften wie der Rest der Container hat.

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 Elastic Container Service fallen keine zusätzlichen Gebühren an. Sie zahlen für die AWS-Ressourcen (z. B. EC2-Instances oder EBS-Volumes), die Sie zum Speichern und Ausführen Ihrer Anwendung erstellen.


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

break-the-monolith
  • Schritt 1. Starten Sie mit AWS CloudFormation ein ECS-Cluster

    Zunächst 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 "Stapel erstellen".
    3. Wählen Sie "Eine Vorlage auf Amazon S3 hochladen" und wählen Sie die Datei ecs.yml aus dem GitHub-Projekt unter amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.yml aus. Wählen Sie Weiter.
    4. Geben Sie als Stapelnamen BreakTheMonolith-Demo ein. Lassen Sie die Werte der anderen Parameter unverändert:
      1. Gewünschte Kapazität = 2
      2. InstanceType = t2.micro
      3. MaxSize = 2
    5. Wählen Sie Weiter.
    6. Es ist nicht notwendig, die Optionen auf dieser Seite zu ändern. Wählen Sie Next aus.
    7. Aktivieren Sie das Kontrollkästchen unten auf der nächsten Seite und wählen Sie "Erstellen". Ihr Stapel ist nun mit einem orangen CREATE_IN_PROGRESS markiert. 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 5 Minuten.
    Stapel erstellen

    ⚐ HINWEIS: Sie können AWS CloudFormation-Stapel auch mithilfe der AWS-CLI bereitstellen. Fügen Sie in Ihrer Region einfach diesen Code hinzu und führen Sie ihn aus dem Ordner amazon-ecs-nodejs-microservices/3-microservices im Terminal auf Ihrem Computer aus.

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region <region> \
       --stack-name Nodejs-Microservices \
       --capabilities CAPABILITY_NAMED_IAM
  • Schritt 2. Überprüfen Sie, ob Ihr Cluster ausgeführt wird

    Überprüfen Sie Ihren Cluster
    • Falls Sie in den Cluster klicken und die Registerkarte "Aufgaben" auswählen, wird keine Aufgabe ausgeführt.
    Aufgaben
    • Wählen Sie die Registerkarte "ECS-Instances" aus, sehen Sie die beiden von der AWS CloudFormation-Vorlage erstellten EC2-Instances.
    ECS-Instances
  • Schritt 3. Schreiben Sie eine Aufgabendefinition

    Die Aufgabendefinition teilt Amazon ECS mit, wie Sie Ihre Anwendungscontainer im Cluster bereitstellen.

    • Navigieren Sie auf der linken Seite der Amazon ECS-Konsole zum Menü "Aufgabendefinitionen".
    • Wählen Sie "Neue Aufgabendefinition erstellen" aus.
    • Name der Aufgabendefinition = api.
    • Wählen Sie "Container hinzufügen" aus.
    • Geben Sie die folgenden Parameter an.
      • Falls ein Parameter nicht definiert ist, lassen Sie ihn leer oder behalten Sie die Standardeinstellung bei: Containername = api Image = [account-id].dkr.ecr.[region].amazonaws.com/api:v1 (Dies ist die URL Ihres ECR Repository Images aus dem vorherigen Schritt).
      • 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. Speicher = Hard limit: 256 Port-Mapping = Host-Port: 0, Container-Port: 3000 CPU-Einheiten = 256
    • Wählen Sie "Hinzufügen".
    • Wählen Sie "Erstellen".
    • Ihre Aufgabenstellung wird nun in der Konsole angezeigt.
    Aufgabendefinition
  • Schritt 4. Konfigurieren Sie die Application Load Balancer: Zielgruppe

    Der Application Load Balancer (ALB) lässt Ihren 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 Load Balancer-Bereich der EC2-Konsole.
    • Sie sollten sehen, dass ein Load Balancer mit dem Namen "demo" bereits existiert.
    • Wählen Sie das Kontrollkästchen aus, um die Details des Load Balancers anzuzeigen.
    • Notieren Sie den Wert für das VPC-Attribut auf der Detailseite.
    VPC-Attribut

    Konfigurieren Sie die ALB-Zielgruppe

    • Navigieren Sie zum Zielgruppen-Bereich der EC2-Konsole.
    • Wählen Sie "Zielgruppe erstellen".
    • Konfigurieren Sie die Zielgruppe (ändern Sie die Standardwerte nicht, wenn sie hier nicht angegeben sind):
      • Name = api
      • Protokoll = HTTP
      • Port = 80
      • VPC = Wählen Sie die VPC aus, die Ihrem Load Balancer vom vorherigen Schritt entspricht. Dies ist höchstwahrscheinlich NICHT Ihre Standard-VPC.
      • Erweiterte Einstellungen für die Zustandsprüfung: Gesunder Grenzwert = 2 Ungesunder Grenzwert = 2 Timeout = 5 Intervall = 6.
    • Wählen Sie "Erstellen".
    Zielgruppen erstellen
  • Schritt 5. Konfigurieren Sie den Application Load Balancer: Empfänger

    Der Empfänger prüft die bei Ihrem ALB eingehenden Verbindungsanforderungen.

    Fügen Sie zum ALB einen Empfänger hinzu

    • Navigieren Sie zum Load Balancer-Bereich der EC2-Konsole.
    • Sie sollten sehen, dass ein Load Balancer mit dem Namen "demo" bereits existiert.
    • Wählen Sie das Kontrollkästchen aus, um die Details des Load Balancers anzuzeigen.
    • Wählen Sie die Registerkarte "Empfänger" aus.
    • Wählen Sie "Empfänger erstellen" aus:
      • Protokoll = HTTP
      • Port = 80
      • Standardzielgruppe = api
    • Klicken Sie auf "Erstellen".
    Empfänger beim ALB
  • Schritt 6. Stellen Sie den Monolith als Service bereit

    Jetzt stellen Sie den Monolith auf dem Cluster als Service bereit.

    • Navigieren Sie auf der linken Seite der Amazon ECS-Konsole zum Menü "Cluster".
    • Wählen Sie Ihren Cluster: BreakTheMonolith-Demo-ECSCluster.
    • Wählen Sie auf der Registerkarte "Services" die Option "Erstellen" aus.
    • Konfigurieren Sie den Service (ändern Sie keine Standardwerte): Servicename = api Anzahl der Aufgaben = 1
    • Wählen Sie "ELB konfigurieren":
      • ELB Typ = Application Load Balancer.
      • Wählen Sie für die IAM-Rolle BreakTheMonolith-Demo-ECSServiceRole.
      • Verwenden Sie für Ihren Load Balancer ELB-Namen = demo.
      • Wählen Sie "Zu ELB hinzufügen" aus.
    • Fügen Sie Ihren Service zur Zielgruppe hinzu:
      • Empfänger-Port = 80:HTTP
      • Name der Zielgruppe = Wählen Sie Ihre Gruppe aus: api.
    • Wählen Sie "Speichern".
    Stellen Sie Ihren Service bereit
    • Wählen Sie "Service erstellen".
    • Wählen Sie "Service anzeigen".
    optional konfigurieren

    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 Sie Ihren Monolith

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

    So finden Sie Ihre Service-URL:

    • Navigieren Sie zum Load Balancer-Bereich der EC2-Konsole.
    • Wählen Sie Ihre Load Balancer-Demo aus.
    • Kopieren Sie den Wert für den DNS-Namen und fügen Sie ihn in Ihren Browser ein.
    • Sie sollten nun die Nachricht "Bereit zum Empfangen von Anforderungen" sehen.


    Beachten Sie jeden Teil des Services:
    Basierend auf der URL leitet die node.js-Anwendung den Datenverkehr an jeden einzelnen Auftragnehmer weiter. Damit Sie einen Auftragnehmer sehen, 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. Wie zum Beispiel http://[DNS name]/api/posts/1 oder http://[DNS name]/api/users/2

    Benutzerdemo