In diesem Modul erstellen Sie das Container-Image für Ihre monolithische node.js-Anwendung und pushen es zur Amazon Elastic Container Registry. Beginnen Sie mit der Entwicklung

Bereitstellen in Amazon ECR

Mit Containern können Sie Code, Konfigurationen und Abhängigkeiten einer Anwendung in einfach zu handhabende Bausteine verpacken, die Umgebungskonsistenz, operative Effizienz, Entwicklerproduktivität und Versionskontrolle bieten. Container ermöglichen es, dass Anwendungen schnell, zuverlässig und konsistent bereitgestellt werden, unabhängig von der Bereitstellungsumgebung.

Übersicht über die Architektur

Geschwindigkeit
Die Aktivierung eines Containers mit einer neuen Version von Code kann ohne nennenswerten Aufwand für die Bereitstellung erfolgen. Die Arbeitsgeschwindigkeit wird verbessert, da Code, der in einem Container auf dem lokalen Rechner eines Entwicklers erstellt wurde, durch einfaches Verschieben des Containers leicht auf einen Testserver verschoben werden kann. Zur Erstellungszeit kann dieser Container mit anderen Containern verknüpft werden, die zur Ausführung des Anwendungsstacks erforderlich sind.

Abhängigkeitskontrolle und verbesserte Pipeline
Ein Docker-Container-Image ist eine Kopie mit dem Code und den Abhängigkeiten einer Anwendung zu einem bestimmten Zeitpunkt. Das ermöglicht es einem Entwicklungsteam, eine Standard-Pipeline für den Anwendungslebenszyklus zu erstellen. Beispiel:

  1. Die Entwickler erstellen und betreiben den Container vor Ort.
  2. Der Continuous Integration Server führt den gleichen Container aus und nimmt Integrationstests damit vor, um sicherzustellen, dass er die Erwartungen erfüllt.
  3. Der gleiche Container wird in eine Staging-Umgebung gesendet, wo sein Laufzeitverhalten mit Lasttests oder manueller QA überprüft werden kann.
  4. Der gleiche Container wird zur Produktion gesendet.

Die Möglichkeit, genau denselben Container zu erstellen, zu testen, zu senden und durch alle Phasen der Integrations- und Bereitstellungspipeline zu führen, erleichtert die Bereitstellung einer qualitativ hochwertigen, zuverlässigen Anwendung erheblich.

Dichte und Ressourceneffizienz
Container ermöglichen eine verbesserte Ressourceneffizienz, indem mehrere heterogene Prozesse auf einem einzigen System ausgeführt werden können. Die Ressourceneffizienz ist ein natürliches Ergebnis der Isolations- und Zuweisungsmethoden, die Container verwenden. Container können darauf beschränkt werden, bestimmte Mengen an CPU-Leistung und Speicher eines Hosts zu verbrauchen. Wenn Sie wissen, welche Ressourcen ein Container benötigt und welche Ressourcen vom zugrunde liegenden Hostserver zur Verfügung stehen, können Sie die Rechenressourcen, die Sie mit kleineren Hosts verwenden, richtig dimensionieren oder die Dichte der Prozesse, die auf einem einzelnen großen Host laufen, erhöhen, die Verfügbarkeit steigern und den Ressourcenverbrauch optimieren.

Flexibilität
Die Flexibilität der Docker-Container beruht auf der Portierbarkeit, einfachen Bereitstellung und geringen Größe. Im Gegensatz zur Installation und Konfiguration, die bei einer VM erforderlich sind, können die Paketierungsdienste in Containern leicht zwischen Hosts verschoben, vor dem Ausfall anderer benachbarter Dienste isoliert und vor fehlerhaften Patches oder Software-Upgrades auf dem Hostsystem geschützt werden. 

Veranschlagte Zeit: 20 Minuten

Verwendete Services:


Im ersten Teil dieses Tutorials erstellen Sie das Docker-Container-Image für Ihre monolithische node.js-Anwendung und pushen es zur Amazon Elastic Container Registry (Amazon ECR). Klicken Sie auf die Nummer eines beliebigen Schritts, um den Bereich zu erweitern.

break-the-monolith
  • Schritt 1: Einrichten

    In den nächsten Schritten werden Sie Docker, GitHub, Amazon Elastic Container Service (Amazon ECS) und Amazon ECR verwenden, um Code in Containern bereitzustellen. Stellen Sie sicher, dass Sie über die folgenden Arbeitsmittel verfügen, um die Schritte auszuführen.

    1. Ein AWS-Konto: Wenn Sie noch kein AWS-Konto haben, können Sie sich hier anmelden. Alle Übungen in diesem Tutorial sind so konzipiert, dass sie im kostenlosen Kontingent von AWS enthalten sind.
      ⚐ Hinweis: Für einige der Dienste, die Sie nutzen werden, kann es erforderlich sein, dass Ihr Konto länger als 12 Stunden aktiv ist. Wenn Sie mit bestimmten Diensten Schwierigkeiten haben und ein neu erstelltes Konto haben, warten Sie bitte ein paar Stunden und versuchen Sie es erneut.
    2. Installieren von Docker: Sie werden Docker verwenden, um die Image-Dateien zu erstellen, die in Ihren Containern ausgeführt werden. Docker ist ein Open-Source-Projekt. Sie können es für Mac oder für Windows herunterladen.
      Nachdem Docker installiert ist, können Sie überprüfen, ob es läuft, indem Sie Docker --version in das Terminal eingeben. Es sollte die Versionsnummer angezeigt werden, z. B.: Docker Version 19.03.5, Build 633a0ea.
    3. Installieren der AWS CLI:
      • Sie werden die AWS CLI (Command Line Interface; Befehlszeilenschnittstelle) verwenden, um die Images zu Amazon ECR zu pushen. Sie können sich hier über die AWS CLI informieren und sie herunterladen.
      • Nachdem die AWS CLI installiert ist, überprüfen Sie, ob sie läuft, indem Sie aws --version in das Terminal eingeben. Es sollte die Versionsnummer angezeigt werden, z. B.: aws-cli/1.16.217 Python/2.7.16 Darwin/18.7.0 botocore/1.12.207.
      • Wenn Sie die AWS CLI bereits installiert haben, führen Sie den folgenden Befehl im Terminal aus, um sicherzustellen, dass sie auf die neueste Version aktualisiert wird: pip install awscli --upgrade --user
      • Wenn Sie die AWS CLI noch nie zuvor verwendet haben, müssen Sie möglicherweise Ihre Anmeldeinformationen konfigurieren.
    4. Ein Texteditor: Wenn Sie nicht bereits über einen Texteditor zum Programmieren verfügen, installieren Sie einen in Ihrer lokalen Umgebung. Atom ist ein einfacher Open-Source-Texteditor von GitHub, der bei Entwicklern sehr beliebt ist.
  • Schritt 2: Herunterladen und Öffnen des Projekts

    Herunterladen des Codes von GitHub: Navigieren Sie zu https://github.com/awslabs/amazon-ecs-nodejs-microservices und wählen Sie Clone or download (Klonen oder herunterladen), um das GitHub-Repository in Ihre lokale Umgebung herunterzuladen. Sie können auch GitHub Desktop oder Git verwenden, um das Repository zu klonen.

    Öffnen der Projektdateien: Starten Sie Atom, wählen Sie Projektordner hinzufügen und wählen Sie dann den Ordner, in dem Sie das Repository amazon-ecs-nodejs-microservices gespeichert haben. Dadurch wird das gesamte Projekt zu Atom hinzugefügt, sodass Sie einfach damit arbeiten können.

    In Ihrem Projektordner sollten Sie Ordner für Infrastruktur und Services sehen. Die Infrastruktur enthält den AWS CloudFormation-Infrastruktur-Konfigurationscode, den Sie im nächsten Schritt verwenden werden. Services enthält den Code, der die node.js-Anwendung bildet.

    Nehmen Sie sich ein paar Minuten Zeit, um die Dateien durchzusehen und sich mit den verschiedenen Aspekten der Anwendung, einschließlich der Datenbank db.json, dem Server server.jspackage.json und der Anwendung Dockerfile, vertraut zu machen.

    Microservices-Projekt
  • Schritt 3: Bereitstellung eines Repository

    Erstellen des Repository:

    • Navigieren Sie zur Amazon ECR-Konsole.
    • Wählen Sie auf der Seite Repositories die Option Repository erstellen.
    • Geben Sie auf der Seite "Repository erstellen" den folgenden Namen für Ihr Repository ein: api.
      ⚐ Hinweis: Belassen Sie unter Tag-Unveränderlichkeit die Standardeinstellungen.
    • Wählen Sie Repository erstellen aus.

    Wenn das Repository erstellt wurde, erhalten Sie eine Bestätigungsmeldung mit der Repository-Adresse. Die Repository-Adresse hat das folgende Format: [account-ID].dkr.ecr.[region].amazonaws.com/[repo-name]. [account-ID], [region] und [repo-name] hängen von Ihrer spezifischen Einrichtung ab.

    ⚐ Hinweis: Sie werden die Adresse des Repository noch mehrmals in diesem Tutorial benötigen.

    Erstellen
  • Schritt 4: Erstellen und Pushen des Docker-Images

    Greifen Sie auf Ihr Terminal zu und navigieren Sie zum folgenden Verzeichnis: ~/amazon-ecs-nodejs-microservices/2-containerized/services/api.

    Verwenden Sie das Terminal zur Authentifizierung der Docker-Anmeldung:

    1. Führen Sie $(aws ecr get-login --no-include-email --region [your-region]) aus. Ersetzen Sie [your-region], z. B.: $(aws ecr get-login --no-include-email --region us-west-2). Konfigurieren Sie bei Bedarf Ihre Anmeldeinformationen.
      Wenn die Authentifizierung erfolgreich war, erhalten Sie die Bestätigungsnachricht:  Anmeldung erfolgreich.
    2. Um das Image zu erstellen, führen Sie den folgenden Befehl im Terminal aus: docker build -t api .
      ⚐ Hinweis: Der Punkt (.) nach api ist notwendig.
    3. Nachdem die Erstellung abgeschlossen ist, fügen Sie ein Tag zum Image hinzu, damit Sie es zum Repository pushen können: docker tag api:latest [account-ID].dkr.ecr.[region].amazonaws.com/api:v1 
      ⚐ Hinweis: Ersetzen Sie die Platzhalter [account-ID] und [region] mit Ihren spezifischen Informationen.
      ⚐ Profitipp:  :v1 repräsentiert die Version des Image-Builds. Jedes Mal, wenn Sie das Image erstellen, sollten Sie diese Versionsnummer inkrementieren. Wenn Sie ein Skript verwenden würden, könnten Sie eine automatische Nummer, wie z. B. einen Zeitstempel, als Tag für das Image verwenden. Hierbei handelt es sich um eine bewährte Methode, mit der Sie in Zukunft problemlos zu einem früheren Container-Image zurückkehren können.
    4. Pushen Sie das Image zur Amazon ECR durch Ausführen von: docker push [account-id].dkr.ecr.[region].amazonaws.com/api:v1
      ⚐ Hinweis: Ersetzen Sie die Platzhalter [account-ID] und [region] mit Ihren spezifischen Informationen.

    Wenn Sie zu Ihrem Amazon ECR-Repository navigieren, sollten Sie Ihr Image mit dem Tag v1 sehen.

    Amazon ECR-Image-Tag