Elastic Beanstalk Tomcat-Plattform verwenden - AWS Elastic Beanstalk

Elastic Beanstalk Tomcat-Plattform verwenden

Wichtig

AWS Elastic Beanstalk installiert Log4j aus den Amazon Linux-Standardpaketrepositorys auf seinen Tomcat-Plattformen für Amazon Linux 1 und Amazon Linux 2. Die Versionen von Log4j, die in den Repositorys Amazon Linux 1 und Amazon Linux 2 verfügbar sind, sind in ihrer Standardkonfiguration nicht betroffen von CVE-2021-44228 oder CVE-2021-45046.

Wenn Sie Konfigurationsänderungen an der Verwendung von log4j durch Ihre Anwendung vorgenommen oder neuere Versionen von log4j installiert haben, empfehlen wir Ihnen, Maßnahmen zu ergreifen, um den Code Ihrer Anwendung zu aktualisieren, um dieses Problem zu beheben.

Aus Vorsicht veröffentlichte Elastic Beanstalk neue Plattformversionen, die die neuesten Amazon-Linux-Standardpaketrepositorys verwenden, darunter das Log4j Hotpatch-JDK, in unserer Veröffentlichung der Amazon-Linux-Plattform vom 21. Dezember 2021. Wenn Sie die log4j-Installation als Anwendungsabhängigkeit angepasst haben, empfehlen wir Ihnen, auf die neueste Elastic-Beanstalk-Plattformversion zu aktualisieren, um die Risiken aus CVE-2021-44228 oder CVE-2021-45046 zu mindern. Sie können im Rahmen normaler Update-Praktiken auch automatisierte verwaltete Updates aktivieren.

Weitere Informationen zu sicherheitsbezogenen Softwareupdates für Amazon Linux finden Sie unter Amazon-Linux-Sicherheitszentrum.

Die AWS Elastic Beanstalk Tomcat-Plattform umfasst eine Reihe von Plattformversionen für Java-Webanwendungen, die in einem Tomcat-Webcontainer ausgeführt werden können. Tomcat läuft hinter einem nginx-Proxy-Server. Jede Plattformvariante entspricht einer Hauptversion von Tomcat, z. B. Java 8 mit Tomcat 8.

In der Elastic Beanstalk-Konsole sind Konfigurationsoptionen für das Ändern der Konfiguration einer ausgeführten Umgebung verfügbar. Um zu verhindern, dass die Umgebungskonfiguration beim Beenden verloren geht, können Sie gespeicherte Konfigurationen verwenden, um Ihre Einstellungen zu speichern und sie später für eine andere Umgebung zu übernehmen.

Zum Speichern der Einstellungen im Quellcode können Sie Konfigurationsdateien einschließen. Die Einstellungen in Konfigurationsdateien werden jedes Mal verwendet, wenn Sie eine Umgebung erstellen oder Ihre Anwendung bereitstellen. Mit Konfigurationsdateien können Sie auch Pakete installieren, Skripts ausführen und andere Instance-Anpassungen bei Bereitstellungen vornehmen.

Die Elastic Beanstalk Tomcat-Plattform beinhaltet einen Reverse-Proxy-Server, der Anforderungen an die Anwendung weiterleitet. Sie können Konfigurationsoptionen verwenden, um den Proxy-Server zur Verarbeitung statischer Komponenten aus einem Ordner im Quellcode zu konfigurieren und so die Auslastung für die Anwendung zu reduzieren. In erweiterten Szenarien können Sie eigene .conf-Dateien in das Quell-Bundle einbinden, um die Proxy-Konfiguration von Elastic Beanstalk zu erweitern oder zu überschreiben.

Anmerkung

Elastic Beanstalk unterstützt nginx (Standard) und Apache HTTP Server als Proxy-Server auf der Tomcat-Plattform. Wenn Ihre Elastic Beanstalk Tomcat-Umgebung einen Branch der Amazon-Linux-AMI-Plattform (vor Amazon Linux 2) verwendet, haben Sie auch die Möglichkeit, Apache HTTP Server Version 2.2 zu verwenden. Apache (neueste) ist der Standardwert für diese älteren Plattformzweige.

Am 18. Juli 2022 stellte Elastic Beanstalk den Status aller Plattformzweige auf Basis von Amazon-Linux-AMI (AL1) auf außer Betrieb genommen. Weitere Informationen zur Migration zu einem aktuellen und vollständig unterstützten Plattformzweig für Amazon Linux 2023 finden Sie unter Migrieren der Elastic-Beanstalk-Linux-Anwendung zu Amazon Linux 2023 oder Amazon Linux 2.

Java-Anwendungen müssen in einem Webanwendungsarchiv (WAR-Datei) mit einer bestimmten Struktur platziert werden. Weitere Informationen zur erforderlichen Struktur und deren Bezug zur Projektverzeichnisstruktur finden Sie unter Strukturieren Ihres Projektordners.

Für die Ausführung von mehreren Anwendungen auf demselben Webserver können Sie in einem einzigen Quell-Bundle mehrere WAR-Dateien bündeln. Jede Anwendung in einem Quell-Bundle mit mehreren WAR-Dateien wird je nach dem WAR-Dateinamen entweder mit dem Stammpfad (ROOT.war mit myapp.elasticbeanstalk.com/) oder mit einem direkt darunter liegenden Pfad (app2.war mit myapp.elasticbeanstalk.com/app2/) ausgeführt. In einem Quell-Bundle mit einer einzigen WAR-Datei wird die Anwendung immer mit dem Stammpfad ausgeführt.

Die in der Elastic Beanstalk-Konsole angewendeten Einstellungen überschreiben die entsprechenden Einstellungen in Konfigurationsdateien, wenn vorhanden. So sind Standardeinstellungen in Konfigurationsdateien möglich, die Sie mit umgebungsspezifischen Einstellungen in der Konsole überschreiben können. Für weitere Informationen zur Rangfolge und zu anderen Methoden zum Ändern der Einstellungen siehe Konfigurationsoptionen.

Details zu den verschiedenen Möglichkeiten für das Erweitern einer Linux-basierten Elastic Beanstalk-Plattform finden Sie unter Erweitern von Elastic Beanstalk-Linux-Plattformen.

Konfigurieren Ihrer Tomcat-Umgebung

Die Elastic Beanstalk Tomcat-Plattform bietet einige plattformspezifische Optionen zusätzlich zu den Standard-Optionen, die allen Plattformen gemeinsam sind. Mit diesen Optionen können Sie die JVM (Java Virtual Machine) konfigurieren, die auf den Webservern der Umgebung ausgeführt wird, und die Systemeigenschaften definieren, die Zeichenfolgen mit Konfigurationsinformationen für die Anwendung bereitstellen.

Mit der Elastic Beanstalk-Konsole können Sie die Protokollrotation für Amazon S3 aktivieren und Variablen konfigurieren, die die Anwendung in der Umgebung lesen kann.

So konfigurieren Sie Ihre Tomcat-Umgebung in der Elastic Beanstalk-Konsole:
  1. Öffnen Sie die Elastic-Beanstalk-Konsole und wählen Sie in der Liste Regions (Regionen) Ihre AWS-Region aus.

  2. 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.

  3. Wählen Sie im Navigationsbereich Configuration (Konfiguration) aus.

  4. Wählen Sie in der Konfigurationskategorie Updates, monitoring and logging  (Updates, Überwachung und Protokolle) die Option Edit (Bearbeiten) aus.

Containeroptionen

Sie können die folgenden plattformspezifischen Optionen angeben:

  • Proxy server (Proxy-Server) – Der Proxy-Server, der in Ihren Umgebungs-Instances verwendet werden soll. Standardmäßig wird nginx verwendet.

JVM-Containeroptionen

Über die Heap-Größe in der JVM wird bestimmt, wie viele Objekte die Anwendung im Speicher erstellen kann, bevor eine garbage collection (Speicherbereinigung) erfolgt. Sie können die Ursprüngliche JVM-Heap-Größe (-Xms option) und eine Maximale JVM-Heap-Größe (-Xmx-Option) ändern. Wenn Sie einen höheren Wert für die anfängliche Heap-Größe angeben, können mehr Objekte erstellt werden, bevor eine Speicherbereinigung ausgeführt wird. Jedoch dauert es länger, bis der Heap im Rahmen der Garbage Collection (Speicherbereinigung) komprimiert ist. Die maximale Heap-Größe gibt die maximale Größe des Arbeitsspeichers an, die bei einer großen Auslastung von der JVM für die Heap-Erweiterung zugewiesen werden kann.

Anmerkung

Der verfügbare Speicher hängt vom Amazon EC2-Instance-Typ ab. Weitere Informationen zu den für die Elastic Beanstalk-Umgebung verfügbaren EC2-Instance-Typen finden Sie unter Instance Types (Instance-Typen) im Amazon Elastic Compute Cloud-Benutzerhandbuch für Linux-Instances.

Der JVM-Heap verfügt über einen Bereich für permanente Generierung, in dem Klassendefinitionen und zugehörige Metadaten gespeichert werden. Um die Größe für die permanente Generierung zu ändern, geben Sie in der Option Maximale JVM-PermGen-Größe (-XX:MaxPermSize) die neue Größe ein. Diese Einstellung gilt nur für Java 7 und frühere Versionen. Diese Option war in JDK 8 veraltet und wurde durch die Option maxMetaSpace Size (-XX:MaxMetaspaceSize) ersetzt.

Wichtig

JDK 17 hat die Unterstützung der -XX:MaxPermSize Java-Option entfernt. Die Verwendung dieser Option in einer Umgebung, die auf einem Elastic-Beanstalk-Plattformzweig mit Corretto 17 läuft, führt zu einem Fehler. Elastic Beanstalk veröffentlichte am 13. Juli 2023 seinen ersten Plattformzweig, auf dem Tomcat mit Corretto 17 ausgeführt wird.

Weitere Informationen finden Sie in den folgenden Ressourcen.

Weitere Informationen zu Elastic-Beanstalk-Plattformen und ihren Komponenten finden Sie unter Unterstützte Plattformen im AWS Elastic Beanstalk-Plattformhandbuch.

Protokolloptionen

Im Abschnitt mit den Protokolloptionen sind zwei Einstellungen vorhanden:

  • Instance profile (Instance-Profil) – Gibt das Instance-Profil an, das zum Zugriff auf den entsprechenden Amazon S3-Bucket der Anwendung berechtigt ist.

  • Enable log file rotation to Amazon S3 (Protokolldateirotation für Amazon S3 aktivieren) – Gibt an, ob die Protokolldateien für die Amazon-EC2-Instances der Anwendung in den der Anwendung zugeordneten Amazon-S3-Bucket kopiert werden.

Statische Dateien

Um die Leistung zu verbessern, können Sie den Abschnitt Static files (Statische Dateien) benutzen, um den Proxy-Server so zu konfigurieren, dass er statische Dateien (z. B. HTML oder Bilder) aus Verzeichnissen innerhalb Ihrer Webanwendung bereitstellt. Legen Sie für jedes Verzeichnis den virtuellen Pfad zum Verzeichnis-Mapping fest. Wenn der Proxy-Server eine Anfrage nach einer Datei unter dem angegebenen Pfad erhält, stellt er die Datei direkt bereit, anstatt die Anfrage an Ihre Anwendung weiterzuleiten.

Weitere Informationen zum Konfigurieren statischer Dateien mit der Elastic Beanstalk-Konsole finden Sie unter Bereitstellen von statischen Dateien.

Umgebungseigenschaften

Im Bereich Environment Properties (Umgebungseigenschaften) können Sie die Einstellungen für die Umgebungskonfiguration der Amazon-EC2-Instances angeben, auf denen die Anwendung ausgeführt wird. Umgebungseigenschaften werden als Schlüssel-Wert-Paare an die Anwendung weitergeleitet.

Die Tomcat-Plattform definiert für Tomcat-Umgebungen die Platzhaltereigenschaft JDBC_CONNECTION_STRING, um eine Verbindungszeichenfolge an eine externe Datenbank zu übergeben.

Anmerkung

Wenn Sie eine RDS DB-Instance an Ihre Umgebung anhängen, konstruieren Sie die JDBC-Verbindungszeichenfolge dynamisch aus den Eigenschaften der Amazon Relational Database Service (Amazon RDS)-Umgebung, die von Elastic Beanstalk bereitgestellt werden. Verwenden Sie JDBC_CONNECTION_STRING nur für Datenbank-Instances, die nicht mithilfe von Elastic Beanstalk bereitgestellt werden.

Weitere Informationen zur Verwendung von Amazon RDS mit Ihrer Java-Anwendung finden Sie unter Hinzufügen einer Amazon RDS-DB-Instance zur Java-Anwendungsumgebung.

In der Tomcat-Umgebung mit Elastic Beanstalk-Ausführung kann über auf die Umgebungsvariablen zugegriffen werde System.getProperty(). Beispielsweise können Sie mit folgendem Code eine Eigenschaft mit dem Namen API_ENDPOINT als Variable lesen.

String endpoint = System.getProperty("API_ENDPOINT");

Weitere Informationen finden Sie unter Umgebungseigenschaften und andere Softwareeinstellungen.

Tomcat-Konfigurations-Namespaces

Mithilfe einer Konfigurationsdatei können Sie im Rahmen der Bereitstellung Konfigurationsoptionen festlegen und andere Instance-Konfigurationsaufgaben ausführen. Konfigurationsoptionen können durch den Elastic Beanstalk-Service oder die verwendete Plattform definiert und in Namespaces organisiert werden.

Die Tomcat-Plattform unterstützt neben den unterstützten Optionen für alle Elastic Beanstalk-Umgebungen auch Optionen in den folgenden Namespaces:

  • aws:elasticbeanstalk:container:tomcat:jvmoptions – Ändern von JVM-Einstellungen. Die Optionen in diesem Namespace entsprechen wie folgt den Optionen in der Managementkonsole:

    • XmsJVM-Befehlszeilenoptionen

    • JVM OptionsJVM-Befehlszeilenoptionen

  • aws:elasticbeanstalk:environment:proxy – Wählen Sie den Proxy-Server der Umgebung aus.

In der folgenden Beispielkonfigurationsdatei wird die Verwendung von Tomcat-spezifischen Konfigurationsoptionen veranschaulicht.

Beispiel .ebextensions/tomcat-settings.config
option_settings: aws:elasticbeanstalk:container:tomcat:jvmoptions: Xms: 512m JVM Options: '-Xmn128m' aws:elasticbeanstalk:application:environment: API_ENDPOINT: mywebapi.zkpexsjtmd.us-west-2.elasticbeanstalk.com aws:elasticbeanstalk:environment:proxy: ProxyServer: apache

Elastic Beanstalk bietet zahlreiche Konfigurationsoptionen für die Anpassung Ihrer Umgebung. Neben den Konfigurationsdateien können Sie die Konfigurationsoptionen auch unter Verwendung der Konsole, gespeicherter Konfigurationen, der EB CLI oder der AWS CLI einrichten. Weitere Informationen finden Sie unter Konfigurationsoptionen.

Falls Ihre Elastic Beanstalk Tomcat-Umgebung eine Amazon Linux AMI-Plattformversion (vor Amazon Linux 2) verwendet, lesen Sie die zusätzlichen Informationen in diesem Abschnitt.

Hinweise
  • Die Informationen in diesem Thema beziehen sich nur auf Plattformverzweigungen auf Basis von Amazon Linux AMI (AL1). AL2023/AL2-Plattformzweige sind mit früheren Plattformversionen von Amazon Linux AMI (AL1) inkompatibel und erfordern andere Konfigurationseinstellungen.

  • Am 18. Juli 2022 stellte Elastic Beanstalk den Status aller Plattformzweige auf Basis von Amazon-Linux-AMI (AL1) auf außer Betrieb genommen. Weitere Informationen zur Migration zu einem aktuellen und vollständig unterstützten Plattformzweig für Amazon Linux 2023 finden Sie unter Migrieren der Elastic-Beanstalk-Linux-Anwendung zu Amazon Linux 2023 oder Amazon Linux 2.

Die Tomcat Amazon Linux AMI-Plattform unterstützt zusätzliche Optionen in den folgenden Namespaces:

  • aws:elasticbeanstalk:container:tomcat:jvmoptions – Zusätzlich zu den oben auf dieser Seite für diesen Namespace erwähnten Optionen unterstützen ältere Amazon Linux-AMI-Plattformversionen auch Folgendes:

    • XX:MaxPermSizeMaximale Größe für die permanente JVM-Generierung

  • aws:elasticbeanstalk:environment:proxy – Konfigurieren Sie nicht nur den Proxy-Server, sondern auch die Antwortkomprimierung.

In der folgenden Beispielkonfigurationsdatei wird die Verwendung der Proxy-Namespace-Konfigurationsoptionen veranschaulicht.

Beispiel .ebextensions/tomcat-settings.config
option_settings: aws:elasticbeanstalk:environment:proxy: GzipCompression: 'true' ProxyServer: nginx

Um .ebextensions-Konfigurationsdateien bereitzustellen, schließen Sie sie in Ihre Anwendungsquelle ein. Fügen Sie für eine einzelne Anwendung .ebextensions zu einer komprimierten WAR-Datei hinzu, indem Sie den folgenden Befehl ausführen:

zip -ur your_application.war .ebextensions

Für eine Anwendung, die mehrere WAR-Dateien benötigt, finden Sie weitere Anweisungen unter Bündeln mehrerer WAR-Dateien für Tomcat-Umgebungen.