Bereitstellen einer Node.js-Anwendung mit DynamoDB in Elastic Beanstalk
Dieses Tutorial und seine Beispielanwendung nodejs-example-dynamo.zip leiten Sie durch den Prozess der Bereitstellung einer Node.js-Anwendung, die das AWS-SDK für JavaScript in Node.js zur Interaktion mit dem Amazon-DynamoDB-Service verwendet. Sie erstellen eine DynamoDB-Tabelle, die sich in einer Datenbank befindet, die von der AWS Elastic Beanstalk-Umgebung entkoppelt oder extern ist. Sie werden die Anwendung auch so konfigurieren, dass sie eine entkoppelte Datenbank verwendet. In einer Produktionsumgebung empfiehlt es sich, eine Datenbank zu verwenden, die von der Elastic-Beanstalk-Umgebung entkoppelt ist, sodass sie unabhängig vom Lebenszyklus der Umgebung ist. Diese Vorgehensweise ermöglicht es Ihnen auch, Blau/Grün-Bereitstellungen durchzuführen.
Die Beispielanwendung veranschaulicht das Folgende:
-
Eine DynamoDB-Tabelle zum Speichern der vom Benutzer bereitgestellten Textdaten.
-
Die Konfigurationsdateien zum Erstellen der Tabelle.
-
Ein Amazon-Simple-Notification-Service-Thema.
-
Während der Bereitstellung Pakete mit der package.json-Datei installieren.
Abschnitte
- Voraussetzungen
- Erstellen einer Elastic Beanstalk-Umgebung
- Hinzufügen von Berechtigungen zu den Instances Ihrer Umgebung
- Bereitstellen der Beispielanwendung
- Erstellen einer DynamoDB-Tabelle
- Aktualisieren der Konfigurationsdateien der Anwendung
- Konfigurieren der Umgebung für hohe Verfügbarkeit
- Bereinigen
- Nächste Schritte
Voraussetzungen
Für dieses Tutorial sind die folgenden Voraussetzungen erforderlich:
-
Die Node.js-Laufzeiten
-
Die Standard-Paketmanager-Software von Node.js, npm
-
Der Express-Befehlszeilengenerator
-
Die Elastic Beanstalk Command Line Interface (EB CLI)
Weitere Informationen zur Installation dieser ersten drei Komponenten und zur Einrichtung Ihrer lokalen Entwicklungsumgebung finden Sie unter Einrichten Ihrer Node.js-Entwicklungsumgebung. Für dieses Tutorial müssen Sie das AWS-SDK für Node.js nicht installieren. Das wird auch im Referenzthema erwähnt.
Detaillierte Anweisungen zum Installieren und Konfigurieren der EB-CLI finden Sie unter Installieren der EB CLI und Konfigurieren der EB CLI.
Erstellen einer Elastic Beanstalk-Umgebung
Ihr Anwendungsverzeichnis
In diesem Tutorial wird ein Verzeichnis verwendet, das als nodejs-example-dynamo
für das Anwendungsquellpaket bezeichnet wird. Erstellen Sie das nodejs-example-dynamo
-Verzeichnis für dieses Tutorial.
~$ mkdir nodejs-example-dynamo
Anmerkung
Jedes Tutorial in diesem Kapitel verwendet ein eigenes Verzeichnis für das Anwendungsquellpaket. Der Verzeichnisname entspricht dem Namen der Beispielanwendung, die im Tutorial verwendet wird.
Ändern Sie Ihr aktuelles Arbeitsverzeichnis zu nodejs-example-dynamo
.
~$ cd nodejs-example-dynamo
Jetzt können wir eine Elastic-Beanstalk-Umgebung mit der Node.js und der Beispielanwendung einrichten. Wir werden die Elastic-Beanstalk-Befehlszeilenschnittstelle (EB-CLI) verwenden.
So konfigurieren Sie ein EB-CLI-Repository für Ihre Anwendung und erstellen eine Elastic-Beanstalk-Umgebung mit der Node.js-Plattform
-
Erstellen Sie ein Repository mit dem Befehl eb init.
~/nodejs-example-dynamo$
eb init --platform
node.js
--region<region>
Mit diesem Befehl wird eine Konfigurationsdatei in einem Ordner mit dem Namen
.elasticbeanstalk
generiert. Sie gibt die Einstellungen für die Erstellung von Umgebungen für Ihre Anwendung an und erstellt eine Elastic Beanstalk-Anwendung mit dem Namen des aktuellen Ordners. -
Erstellen Sie mit dem Befehl eb create eine Umgebung mit einer laufenden Beispielanwendung.
~/nodejs-example-dynamo$
eb create --sample
nodejs-example-dynamo
Mit diesem Befehl wird eine Umgebung mit Lastausgleich, den Standardeinstellungen für die Node.js-Plattform und den folgenden Ressourcen erstellt:
-
EC2 instance (EC2-Instance) – eine virtuelle Maschine von Amazon Elastic Compute Cloud (Amazon EC2), die so konfiguriert ist, dass Web-Apps auf der von Ihnen ausgewählten Plattform ausgeführt werden.
Jede Plattform führt eine spezifische Gruppe von Software, Konfigurationsdateien und Skripts zur Unterstützung einer bestimmten Sprachversion, eines Frameworks, Webcontainers oder einer Kombination daraus aus. Die meisten Plattformen verwenden entweder Apache oder NGINX als Reverse-Proxy, der vor der Web-App platziert ist, Anforderungen weiterleitet, statische Komponenten bedient und Zugriffs- und Fehlerprotokolle generiert.
-
Instance security group (Instance-Sicherheitsgruppe): Eine Amazon EC2-Sicherheitsgruppe, die so konfiguriert ist, dass eingehender Datenverkehr auf Port 80 erlaubt ist. Mit dieser Ressource kann HTTP-Datenverkehr vom Load Balancer die EC2-Instance mit Ihrer Web-App erreichen. Standardmäßig ist Datenverkehr auf anderen Ports nicht zulässig.
-
Load balancer (Load Balancer)– Ein Elastic Load Balancing Load Balancer ist für die Verteilung von Anforderungen an die Instances, auf denen Ihre Anwendung ausgeführt wird, konfiguriert. Mit einem Load Balancer müssen Ihre Instances nicht mehr direkt für das Internet zugänglich gemacht werden.
-
Load balancer security group (Load Balancer-Sicherheitsgruppe): Eine Amazon EC2-Sicherheitsgruppe, die so konfiguriert ist, dass eingehender Datenverkehr auf Port 80 erlaubt ist. Diese Ressource ermöglicht, dass HTTP-Datenverkehr aus dem Internet den Load Balancer erreicht. Standardmäßig ist Datenverkehr auf anderen Ports nicht zulässig.
-
Auto Scaling group (Auto Scaling-Gruppe) – Eine Auto Scaling-Gruppe, die so konfiguriert ist, dass sie eine Instance ersetzt, wenn diese beendet wird oder nicht verfügbar ist.
-
Amazon S3-Bucket – Ein Speicherort für Ihren Quellcode, Protokolle und andere Artefakte, die bei der Verwendung von Elastic Beanstalk erstellt werden.
-
Amazon CloudWatch alarms (Amazon CloudWatch-Alarme) – CloudWatch-Alarme, die die Verarbeitungslast auf den Instances in Ihrer Umgebung überwachen und ausgelöst werden, wenn die Last zu hoch oder zu niedrig ist. Wenn ein Alarm ausgelöst wird, wird Ihre Auto Scaling-Gruppe nach oben oder nach unten skaliert.
-
AWS CloudFormation-Stack – Elastic Beanstalk verwendet AWS CloudFormation, um die Ressourcen in Ihrer Umgebung zu starten und Konfigurationsänderungen zu verbreiten. Die Ressourcen werden in einer Vorlage definiert, die Sie in der AWS CloudFormation-Konsole
anzeigen können. -
Domainname – Ein Domainname, der auf Ihre Web-App in der Form
subdomain
.region
.elasticbeanstalk.com weiterleitet.Anmerkung
Um die Sicherheit Ihrer Elastic-Beanstalk-Anwendungen zu erhöhen, ist die Domain elasticbeanstalk.com in der Public Suffix List (PSL) registriert.
Aus Sicherheitsgründen empfehlen wir Ihnen, Cookies mit einem __Host-
-Präfix zu verwenden, falls Sie jemals sensible Cookies im Standard-Domainnamen für Ihre Elastic-Beanstalk-Anwendungen einrichten müssen. Diese Vorgehensweise hilft Ihnen dabei, Ihre Domain vor CSRF-Versuchen (Cross-Site Request Forgery Attempts, Anforderungsfälschung zwischen Websites) zu schützen. Weitere Informationen finden Sie auf der Set-Cookie-Seite im Mozilla Developer Network.
-
-
Wenn die Umgebungserstellung abgeschlossen ist, verwenden Sie den Befehl eb open, um die URL der Umgebung im Standardbrowser zu öffnen.
~/nodejs-example-dynamo$
eb open
Sie haben jetzt eine Node.js Elastic-Beanstalk-Umgebung mit einer Beispielanwendung erstellt. Sie können sie mit Ihrer eigenen Anwendung aktualisieren. Als nächstes aktualisieren wir die Beispielanwendung, um das Express-Framework zu verwenden.
Hinzufügen von Berechtigungen zu den Instances Ihrer Umgebung
Ihre Anwendung führt eine oder mehrere EC2-Instances hinter einem Load Balancer aus, wobei HTTP-Anfragen aus dem Internet verarbeitet werden. Wenn eine Anforderung empfangen wird, die die Verwendung von AWS-Services erfordert, verwendet die Anwendung die Berechtigungen der Instance, auf der sie ausgeführt wird, für den Zugriff auf diese Services.
Die Beispielanwendung verwendet Instance-Berechtigungen, um Daten in eine DynamoDB-Tabelle zu schreiben und Benachrichtigungen an das Amazon SNS-Thema mit dem SDK for JavaScript in Node.js zu senden. Fügen Sie die folgenden verwalteten Richtlinien zum standardmäßigen Instance-Profil hinzu, um den EC2-Instances in Ihrer Umgebungsberechtigung den Zugriff auf DynamoDB und Amazon SNS zu gewähren:
-
AmazonDynamoDBFullAccess
-
AmazonSNSFullAccess
So fügen Sie Richtlinien zum Instance-Standardprofil hinzu
-
Öffnen Sie die Seite Roles (Rollen)
in der IAM-Konsole. -
Wählen Sie aws-elasticbeanstalk-ec2-role aus.
-
Wählen Sie auf der Registerkarte Permissions (Berechtigungen) die Option Attach policies (Richtlinien anfügen) aus.
-
Wählen Sie die verwaltete Richtlinie für die zusätzlichen Services aus, die von der Anwendung verwendet werden. Wählen Sie in diesem Tutorial
AmazonSNSFullAccess
undAmazonDynamoDBFullAccess
. -
Wählen Sie Attach policy (Richtlinie anfügen) aus.
Weitere Informationen zum Verwalten von Instance-Profilen finden Sie unter Elastic Beanstalk Instance-Profile verwalten.
Bereitstellen der Beispielanwendung
Ihre Umgebung ist jetzt bereit für die Bereitstellung und Ausführung der Beispielanwendung für dieses Tutorial: nodejs-example-dynamo.zip .
So stellen Sie die Tutorial-Beispielanwendung bereit und führen sie aus
-
Wechseln Sie von Ihrem aktuellen Arbeitsverzeichnis in das Installationsverzeichnis
nodejs-example-dynamo
.~$
cd nodejs-example-dynamo
-
Laden Sie das Quellpaket der Beispielanwendung nodejs-example-dynamo.zip in das Anwendungsverzeichnis
nodejs-example-dynamo
herunter. -
Stellen Sie die Anwendung in Ihrer Elastic-Beanstalk-Umgebung mit dem Befehl eb deploy bereit.
~/nodejs-example-dynamo$
eb deploy
-
Wenn die Umgebungserstellung abgeschlossen ist, verwenden Sie den Befehl eb open, um die URL der Umgebung im Standardbrowser zu öffnen.
~/nodejs-example-dynamo$
eb open
Die Website sammelt Benutzerkontaktinformationen und speichert die Daten in einer DynamoDB-Tabelle. Zum Hinzufügen eines Eintrags wählen Sie Sign up today (Jetzt registrieren), geben Sie einen Namen und eine E-Mail-Adresse ein, und wählen Sie dann Sign Up! (Registrieren) aus. Die Web-App schreibt die Formularinhalte in die Tabelle und löst eine E-Mail-Benachrichtigung von Amazon SNS aus.

Aktuell ist das Amazon SNS-Thema mit einer Platzhalter-E-Mail für Benachrichtigungen konfiguriert. Sie werden die Konfiguration in Kürze aktualisieren, aber in der Zwischenzeit können Sie die DynamoDB-Tabelle und das Amazon SNS-Thema in der AWS Management Console überprüfen.
So zeigen Sie die Tabelle an
-
Öffnen Sie die Seite Tables (Tabellen)
in der DynamoDB-Konsole. -
Suchen Sie die Tabelle, die die Anwendung erstellt hat. Der Name beginnt mit awseb und enthält StartupSignupsTable.
-
Wählen Sie die Tabelle aus, klicken Sie auf Items (Elemente) und anschließend auf Start search (Suche starten), um alle Elemente in der Tabelle anzuzeigen.
Die Tabelle enthält einen Eintrag für jede E-Mail-Adresse, die auf der Anmeldungs-Website übermittelt wurde. Zusätzlich zum Schreiben in die Tabelle sendet die Anwendung eine Nachricht an ein Amazon SNS-Thema, das zwei Abonnements hat: eines für E-Mail-Benachrichtigungen an Sie und ein anderes für eine Amazon Simple Queue Service-Warteschlange, aus der eine Worker-Anwendung lesen kann, um Anfragen zu verarbeiten und E-Mails an interessierte Kunden zu senden.
So zeigen Sie das Thema an
-
Öffnen Sie die Seite Topics (Themen)
in der Amazon SNS-Konsole. -
Suchen Sie das Thema, das die Anwendung erstellt hat. Der Name beginnt mit awseb und enthält NewSignupTopic.
-
Wählen Sie das Thema, um seine Abonnements anzuzeigen.
Die Anwendung (app.js
) definiert zwei Routen. Der Stammpfad (/
) gibt eine Webseite zurück, die aus einer Embedded JavaScript (EJS)-Vorlage mit einem Formular gerendert wurde, das der Benutzer ausfüllt, um seinen Namen und seine E-Mail-Adresse zu registrieren. Durch das Übermitteln des Formulars wird eine POST-Anforderung mit den Formulardaten an das /signup
-Routing gesendet. Es schreibt einen Eintrag in die DynamoDB-Tabelle und veröffentlicht eine Nachricht im Amazon SNS-Thema, um den Eigentümer des Themas zu benachrichtigen.
Die Beispielanwendung enthält Konfigurationsdateien, mit der die DynamoDB-Tabelle, das Amazon SNS-Thema und die Amazon SQS-Warteschlange der Anwendung erstellt werden. Dadurch können Sie eine neue Umgebung erstellen und die Funktionalität sofort testen. Der Nachteil ist, dass die DynamoDB-Tabelle an die Umgebung gebunden ist. Bei einer Produktionsumgebung sollten Sie die DynamoDB-Tabelle außerhalb Ihrer Umgebung erstellen. Auf diese Weise vermeiden Sie, dass Sie sie verlieren, wenn Sie die Umgebung beenden oder ihre Konfiguration aktualisieren.
Erstellen einer DynamoDB-Tabelle
Um eine externe DynamoDB-Tabelle mit einer Anwendung zu verwenden, die in Elastic Beanstalk ausgeführt wird, erstellen Sie zuerst eine Tabelle in DynamoDB. Wenn Sie eine Tabelle außerhalb von Elastic Beanstalk erstellen, ist sie völlig unabhängig von Elastic Beanstalk und Ihren Elastic Beanstalk-Umgebungen und wird von Elastic Beanstalk nicht beendet.
Erstellen Sie die Tabelle mit folgenden Einstellungen:
-
Table name (Name der Tabelle) –
nodejs-tutorial
-
Primary key (Primärschlüssel) –
email
-
Primary key type (Primärschlüsseltyp) – Zeichenfolge
So erstellen Sie eine DynamoDB-Tabelle
-
Öffnen Sie die Seite Tables (Tabellen)
in der DynamoDB Management-Konsole. -
Wählen Sie Create table (Tabelle erstellen) aus.
-
Geben Sie einen Table name (Name der Tabelle) und einen Primary key (Primärschlüssel) ein.
-
Wählen Sie den Typ des Primärschlüssels aus.
-
Wählen Sie Erstellen aus.
Aktualisieren der Konfigurationsdateien der Anwendung
Aktualisieren Sie die Konfigurationsdateien in der Anwendungsquelle zur Verwendung der nodejs-tutorial-Tabelle, anstatt eine neue Tabelle zu erstellen.
So aktualisieren Sie die Beispielanwendung für die Verwendung in der Produktion
-
Wechseln Sie von Ihrem aktuellen Arbeitsverzeichnis in das Installationsverzeichnis
nodejs-example-dynamo
.~$
cd nodejs-example-dynamo
-
Öffnen Sie
.ebextensions/options.config
und ändern Sie die Werte der folgenden Einstellungen:-
NewSignupEmail – Ihre E-Mail-Adresse.
-
STARTUP_SIGNUP_TABLE – nodejs-tutorial
Beispiel .ebextensions/options.config
option_settings: aws:elasticbeanstalk:customoption: NewSignupEmail:
you@example.com
aws:elasticbeanstalk:application:environment: THEME: "flatly" AWS_REGION: '`{"Ref" : "AWS::Region"}`' STARTUP_SIGNUP_TABLE:nodejs-tutorial
NEW_SIGNUP_TOPIC: '`{"Ref" : "NewSignupTopic"}`' aws:elasticbeanstalk:container:nodejs: ProxyServer: nginx aws:elasticbeanstalk:container:nodejs:staticfiles: /static: /static aws:autoscaling:asg: Cooldown: "120" aws:autoscaling:trigger: Unit: "Percent" Period: "1" BreachDuration: "2" UpperThreshold: "75" LowerThreshold: "30" MeasureName: "CPUUtilization"Dies gilt für die folgenden Konfigurationen für die Anwendung:
-
Die E-Mail-Adresse, die das Amazon-SNS-Thema für Benachrichtigungen verwendet, ist auf Ihre Adresse gesetzt oder auf die, die Sie in die
options.config
-Datei eingegeben. -
Die Tabelle nodejs-tutorial wird anstelle der Tabelle verwendet, die von
.ebextensions/create-dynamodb-table.config
erstellt wurde.
-
-
Entfernen Sie
.ebextensions/create-dynamodb-table.config
.~/nodejs-tutorial$
rm .ebextensions/create-dynamodb-table.config
Wenn Sie die Anwendung das nächste Mal bereitstellen, wird die Tabelle, die von dieser Konfigurationsdatei erstellt wurde, gelöscht.
-
Stellen Sie die aktualisierte Anwendung in Ihrer Elastic-Beanstalk-Umgebung mit dem Befehl eb deploy bereit.
~/nodejs-example-dynamo$
eb deploy
-
Wenn die Umgebungserstellung abgeschlossen ist, verwenden Sie den Befehl eb open, um die URL der Umgebung im Standardbrowser zu öffnen.
~/nodejs-example-dynamo$
eb open
Bei der Bereitstellung aktualisiert Elastic Beanstalk die Konfiguration des Amazon SNS-Themas und löscht die DynamoDB-Tabelle, die erstellt wurde, als Sie die erste Version der Anwendung bereitgestellt haben.
Wenn Sie die Umgebung jetzt beenden, wird die nodejs-tutorial-Tabelle nicht gelöscht. Dadurch können Sie blaue/grüne Bereitstellungen durchführen, Konfigurationsdateien ändern oder Ihre Website offline nehmen, ohne Datenverlust zu riskieren.
Öffnen Sie Ihre Webseite in einem Browser und überprüfen Sie, ob das Formular wie erwartet funktioniert. Erstellen Sie einige Einträge und überprüfen Sie die Tabelle in der DynamoDB-Konsole.
So zeigen Sie die Tabelle an
-
Öffnen Sie die Seite Tables (Tabellen)
in der DynamoDB-Konsole. -
Suchen Sie die nodejs-tutorial-Tabelle.
-
Wählen Sie die Tabelle aus, klicken Sie auf Items (Elemente) und anschließend auf Start search (Suche starten), um alle Elemente in der Tabelle anzuzeigen.
Sie können auch sehen, dass Elastic Beanstalk die zuvor erstellte Tabelle gelöscht hat.
Konfigurieren der Umgebung für hohe Verfügbarkeit
Konfigurieren Sie abschließend für die Auto-Scaling-Gruppe der Umgebung für höhere Instance-Mindestanzahl. Führen Sie immer mindestens zwei Instances aus, damit einzelne Webserver in der Umgebung keine Fehlerquelle darstellen und damit Sie Änderungen ohne Ausfallzeit der Website bereitstellen können.
So konfigurieren Sie die Auto-Scaling-Gruppe in der Umgebung für hohe Verfügbarkeit
Öffnen Sie die Elastic-Beanstalk-Konsole
und wählen Sie in der Liste Regions (Regionen) Ihre AWS-Region aus. -
Wählen Sie im Navigationsbereich Environments (Umgebungen) aus und wählen Sie dann in der Liste den Namen Ihrer Umgebung aus.
Anmerkung
Wenn Sie viele Umgebungen haben, verwenden Sie die Suchleiste, um die Umgebungsliste zu filtern.
Wählen Sie im Navigationsbereich Configuration (Konfiguration) aus.
-
Wählen Sie in der Konfigurationskategorie Capacity (Kapazität) die Option Edit (Bearbeiten).
-
Legen Sie im Abschnitt Auto Scaling Group (Gruppe der automatischen Skalierung) für die Option Min instances (Min. Instances)
2
fest. -
Wählen Sie unten auf der Seite die Option Apply (Anwenden) aus, um die Änderungen zu speichern.
Bereinigen
Wenn Sie nicht mehr mit Elastic Beanstalk arbeiten, können Sie Ihre Umgebung beenden. Elastic Beanstalk beendet alle AWS-Ressourcen der Umgebung, z. B. Amazon-EC2-Instances, Datenbank-Instances, Lastenverteilung, Sicherheitsgruppen und Alarme.
So beenden Sie die Elastic Beanstalk-Umgebung
Öffnen Sie die Elastic-Beanstalk-Konsole
und wählen Sie in der Liste Regions (Regionen) Ihre AWS-Region aus. -
Wählen Sie im Navigationsbereich Environments (Umgebungen) aus und wählen Sie dann in der Liste den Namen Ihrer Umgebung aus.
Anmerkung
Wenn Sie viele Umgebungen haben, filtern Sie Umgebungsliste mit der Suchleiste.
-
Klicken Sie auf Actions (Aktionen) und dann auf Terminate Environment (Umgebung beenden).
-
Verwenden Sie das Dialogfeld auf dem Bildschirm, um die Beendigung der Umgebung zu bestätigen.
Mit Elastic Beanstalk können Sie ganz einfach und jederzeit eine neue Umgebung für Ihre Anwendung erstellen.
Sie können auch die durch Sie erstellten, externen DynamoDB-Tabellen löschen.
So löschen Sie eine DynamoDB-Tabelle
-
Öffnen Sie die Seite Tables (Tabellen)
in der DynamoDB-Konsole. -
Wählen Sie eine Tabelle aus.
-
Wählen Sie die Option Actions (Aktionen) und anschließend Delete table (Tabelle löschen) aus.
-
Wählen Sie Delete (Löschen) aus.
Nächste Schritte
Die Beispielanwendung verwendet Konfigurationsdateien zum Konfigurieren von Softwareeinstellungen und zum Erstellen von AWS-Ressourcen als Teil Ihrer Umgebung. Weitere Informationen über Konfigurationsdateien und Ihre Verwendung finden Sie unter Erweiterte Umgebungsanpassung mit Konfigurationsdateien (.ebextensions).
Die Beispielanwendung dieses Tutorials verwendet das Express-Web-Framework für Node.js. Weitere Informationen zu Express finden Sie in der offiziellen Dokumentation unter expressjs.com
Sofern Sie planen, die Anwendung in einer Produktionsumgebung einzusetzen, konfigurieren Sie einen benutzerdefinierten Domainnamen für die Umgebung und aktivieren Sie HTTPS für sichere Verbindungen.