In diesem Modul werden Sie die Anwendung "node.js" in mehrere miteinander verbundene Dienste aufteilen und das Bild jedes Dienstes in ein Amazon ECR-Repository übertragen. Die Erstellung beginnen.

Die Endanwendungsarchitektur nutzt Amazon Elastic Container Service und den Application Load Balancer. 

Architektur-Übersicht

a. Client
Der Client führt Datenübertragungsanfragen über Port 80 durch.

b. Load Balancer
Der Application Load Balancer (ALB) leitet den externen Datenverkehr an den richtigen Dienst. Der ALB prüft die Clientanforderung und leitet die Anforderung mithilfe der Routingregeln an eine Instanz und einen Port für die Zielgruppe weiter, die der Regel entsprechen.

c. Zielgruppen
Jeder Dienst ist mit einer Zielgruppe verknüpft, welche die Instanzen und Ports jedes Containers für diesen Dienst ausführt.

d. Containerisierte Dienste
Amazon Elastic Container Service (Amazon ECS) stellt jeden Dienst in einem Container über einen EC2-Cluster bereit. Jeder Container beinhaltet nur ein einzelnes Feature.

Isolierung von Abstürzen
Selbst die besten Entwicklerorganisationen können verheerende Abstürze in der Produktion nicht immer vermeiden. Neben der Befolgung aller empfohlenen Standardmethoden für die ordnungsgemäße Behandlung von Abstürzen bietet die Einrichtung von Microservices einen Ansatz, der die Auswirkungen solcher Abstürze begrenzen kann. Eine gute Microservice-Architektur bedeutet, dass nur ein Teil Ihres Dienstes ausfällt, wenn ein Teil Ihres Dienstes abstürzt. Der Rest Ihres Dienstes arbeitet uneingeschränkt weiter.

Isolation als Sicherheit
Wenn in einer monolithischen Anwendung eine Funktion der Anwendung eine Sicherheitsverletzung aufweist, zum Beispiel eine Schwachstelle, die Remote-Code-Ausführung ermöglicht, dann müssen Sie davon ausgehen, dass ein Angreifer auch Zugriff auf jede andere Funktion des Systems haben könnte. Das kann zum Beispiel gefährlich sein, wenn Ihr Feature zum Uploaden eines Profilbilds ein Sicherheitsproblem hat, was sich dann auf Ihre gesamte Datenbank mit Benutzerpasswörtern auswirkt. Wenn Sie Features in Microservices mithilfe von Amazon ECS aufteilen, haben Sie sicheren Zugriff auf die AWS-Resources, wenn Sie jedem Service eine IAM-Rolle zuweisen. Wenn die bewährten Methoden für Microservices befolgt werden, hat das zur Folge, dass ein Angreifer, der einen Service beeinträchtigt, nur Zugriff auf die Ressourcen dieses Services hat und von diesem Service aus nicht auf weitere Services zugreifen kann ohne sich dort erneut Zugriff zu verschaffen.

Unabhängige Skalierung
Wenn Funktionen in Microservices aufgeteilt sind, ist es möglich, die Infrastruktur und die Anzahl der Vorgänge jeder einzelnen Microservice-Klasse unabhängig von den anderen zu skalieren. Dies erleichtert die Kostenbemessung einzelner Funktionen, Funktionen, die möglicherweise zunächst optimiert werden müssen, zu erkennen sowie die zuverlässige Erhaltung der Leistung anderer Funktionen, wenn eine bestimmte Funktion beim Ressourcenbedarf nicht unter Kontrolle ist.

Entwicklungsgeschwindigkeit
Microservices senken die Risiken bei der Entwicklung, wodurch ein Team schneller vorwärts kommen kann. Bei einem Monolith kann sich jede neu hinzugefügte Funktion potenziell auf andere Funktionen auswirken, die der Monolith enthält. Entwickler müssen die Auswirkungen von jeglichem Code sorgfältig abwägen, den sie hinzufügen, und sicherstellen, dass sie nichts beeinträchtigen. Eine ordnungsgemäße Microservice-Architektur, andererseits, besteht aus neuem Code für jede neue Funktion, die Teil eines neuen Diensts wird. Entwickler können sich sicher sein, dass der Code, den sie schreiben, keine Auswirkungen auf den vorhandenen Code haben kann, außer sie erstellen wissentlich eine Verbindung zwischen zwei Microservices.

Benötigte Zeit: 20 Minuten

Verwendete Services:


Folgen Sie den Anweisungen unten, um den Monolith aufzuspalten. Klicken Sie auf jede Schrittnummer, um den Abschnitt zu erweitern.

break-the-monolith
  • Schritt 1. Bestimmung der ECR-Repositorys

    In den letzten beiden Schritten haben Sie Ihre Anwendung als Monolith, bestehend aus einen einzelnen Dienst und einem einzigen Container-Image-Repository, bereitgestellt. Um die Anwendung als drei Microservices bereitzustellen, müssen Sie drei Repositorys (einen für jeden Dienst) in Amazon ECR bereitstellen.

    Unsere drei Dienste sind:

    1. Benutzer
    2. Threads
    3. Beiträge


    Erstellen Sie das Repository:

    • Navigieren Sie zur Amazon ECR-Console.
    • Wählen Sie „Repository erstellen“ aus
    • Repository-Name:
      • Benutzer
      • Threads
      • Beiträge
    • Halten Sie die Repositorys-Information fest: [account-id].dkr.ecr.[region].amazonaws.com/[service-name]

    Wiederholen Sie diese Schritte für jeden Microservice.

    Sie sollten nun vier Repositorys in Amazon ECR haben.

    Repositorys
  • Schritt 2. Authentifizieren Sie die Docker-Anmeldung mit AWS (optional)

    Sie können diesen Schritt überspringen, wenn Sie vor kurzem Modul 1 dieses Workshops abgeschlossen haben.

    • Führen Sieaws ecr get-login --no-include-email --region [region] aus.
      Beispiel: aws ecr get-login --no-include-email --region us-west-2
    • Sie werden eine große Ausgabe erhalten, beginnend mit docker login -u AWS -p ... Kopieren Sie die gesamte Ausgabe, fügen Sie sie im Terminal ein und führen Sie sie aus.

    • Sie sollten die Meldung "Anmeldung erfolgreich" erhalten

      ⚐ HINWEIS: Wenn diese Anmeldung nicht erfolgreich ist, liegt das möglicherweise daran, dass Sie eine neuere Docker-Version haben, die -e none -Markierung abgelehnt hat. Um dies zu korrigieren, kopieren Sie die Ausgabe in Ihren Texteditor, entfernen Sie -e none vom Ende der Ausgabe und führen Sie die aktualisierte Ausgabe im Terminal aus.

  • Schritt 3. Erstellen und Übertragen von Abbildern für jeden Dienst

    Im Projektordner amazon-ecs-nodejs-microservices/3-microservices/services, werden Sie Ordner mit Dateien für jeden Dienst finden. Beachten Sie, wie jeder Microservice im Wesentlichen ein Klon des vorherigen monolithischen Dienstes ist.

    Sie können sehen, wie jeder Service jetzt spezialisiert ist, indem Sie die Datei db.json in jedem Service und im monolithischen API-Service vergleichen. Zuvor wurden Beiträge, Threads und Benutzer in einer einzigen Datenbankdatei gespeichert. Jetzt ist jeder in der Datenbankdatei für seinen jeweiligen Dienst gespeichert.

    Öffnen Sie das Terminal und ändern Sie den Pfad zum Abschnitt 3-microservices/services des GitHub-Codes. ~/amazon-ecs-nodejs-microservices/3-microservices/services

    Erstellen und taggen Sie jedes Abbild

    • Führen Sie im Terminal docker build -t [service-name] aus./[service-name] Beispiel: docker build -t posts.Beiträge
    • Nachdem das Build abgeschlossen ist, taggen Sie das Abbild, damit Sie es in das Repository verschieben können: docker tag [service-name]:latest [account-id].dkr.ecr.[region].amazonaws.com/[service-name]:v1 Beispiel: docker tag posts:latest [account-id].dkr.ecr.us-west-2.amazonaws.com/posts:v1
    • Führen Sie Docker-Push aus, um das Abbild zum ECR zu verschieben: docker push [account-id].dkr.ecr.[region].amazonaws.com/[service-name]:v1

    Wenn Sie zum ECR-Repository navigieren, sollten Ihre Abbilder dort mit v1 gekennzeichnet sein. 

    ♻ Wiederholen Sie diese Schritte für jedes Microservice-Abbild.  

    ⚐ HINWEIS: Achten Sie darauf, alle drei Abbilder zu erstellen und zu markieren.