Bereitstellen von Java-Anwendungen - AWS OpsWorks

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Bereitstellen von Java-Anwendungen

Wichtig

Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden deaktiviert. Wir empfehlen Kunden dringend, ihre Workloads so bald wie möglich auf andere Lösungen zu migrieren. Wenn Sie Fragen zur Migration haben, wenden Sie sich an das AWS Support Team auf AWS re:POST oder über den AWS Premium-Support.

In den folgenden Themen wird beschrieben, wie Apps auf den Instanzen eines Java App Server-Layers bereitgestellt werden. In den Beispielen werden JSP-Anwendungen verwendet, aber Sie können zum Installieren von anderen Java-Anwendungsarten grundsätzlich in gleicher Weise vorgehen.

Sie können JSP-Seiten aus einem der unterstützten Repositorys bereitstellen. Wenn Sie WAR-Dateien bereitstellen möchten, beachten Sie, dass AWS OpsWorks Stacks automatisch WAR-Dateien extrahiert, die aus einem Amazon S3- oder HTTP-Archiv bereitgestellt werden, aber nicht aus einem Git- oder Subversion-Repository. Wenn Sie Git oder Subversion für WAR-Dateien verwenden möchten, können Sie einen der folgenden Schritte ausführen:

  • Speichern Sie das extrahierte Archiv im Repository.

  • Speichern Sie die WAR-Datei im Repository und verwenden Sie zum Extrahieren des Archivs einen Chef-Bereitstellungs-Hook, wie im nachstehenden Beispiel beschrieben.

Sie können Chef-Bereitstellungs-Hooks verwenden, um vom Benutzer angegebene Ruby-Anwendungen in einer Instance in irgendeiner der vier Bereitstellungsstufen auszuführen. Die Phase wird durch den Anwendungsnamen bestimmt. Im folgenden Beispiel wird eine Ruby-Anwendung mit dem Namen before_migrate.rb beschrieben, die eine von einem Git- oder Subversion-Repository bereitgestellte WAR-Datei extrahiert. Der Name verknüpft die Anwendung mit dem Checkout-Bereitstellungs-Hook, sodass dieser zu Beginn der Bereitstellung nach erfolgter Prüfung des Codes, aber vor der Migration ausgeführt wird. Weitere Informationen zur Verwendung dieses Beispiels finden Sie unter Verwenden von Chef-Bereitstellungs-Hooks.

::Dir.glob(::File.join(release_path, '*.war')) do |archive_file| execute "unzip_#{archive_file}" do command "unzip #{archive_file}" cwd release_path end end
Anmerkung

Wenn Sie eine Aktualisierung für eine JSP-Anwendung bereitstellen, wird Tomcat die Aktualisierung möglicherweise nicht erkennen und stattdessen die vorhandene Anwendungsversion ausführen. Dies kann beispielsweise auftreten, wenn Sie die Anwendung als ZIP-Datei bereitstellen, die nur eine JSP-Seite enthält. Um sicherzustellen, dass Tomcat die zuletzt bereitgestellte Version ausführt, muss das Stammverzeichnis des Projekts das Verzeichnis "WEB-INF" mit einer Datei web.xml enthalten. Der Inhalt einer web.xml-Datei kann vielfältig sein. Nachstehendes ist jedoch ausreichend, um sicherzustellen, dass Tomcat die Aktualisierungen erkennt und die aktuell bereitgestellte Anwendungsversion ausführt. Sie müssen die Version nicht für jede Aktualisierung ändern. Tomcat erkennt die Aktualisierung auch dann, wenn sich die Version nicht geändert hat.

<context-param> <param-name>appVersion</param-name> <param-value>0.1</param-value> </context-param>

Bereitstellen einer JSP-Anwendung

Geben Sie zur Bereitstellung einer JSP-Anwendung den Namen und die Repository-Daten an. Außerdem können Sie optional Domänen und SSL-Einstellungen angeben. Weitere Informationen zum Erstellen einer Anwendung finden Sie unter Hinzufügen von Apps. Das folgende Verfahren zeigt, wie Sie eine einfache JSP-Seite aus einem öffentlichen Amazon S3 S3-Archiv erstellen und bereitstellen. Informationen zur Verwendung anderer Repository-Typen, einschließlich privater Amazon S3 S3-Archive, finden Sie unterAnwendungsquelle.

Das folgende Beispiel zeigt die JSP-Seite, auf der lediglich einige Systeminformationen aufgeführt sind.

<%@ page import="java.net.InetAddress" %> <html> <body> <% java.util.Date date = new java.util.Date(); InetAddress inetAddress = InetAddress.getLocalHost(); %> The time is <% out.println( date ); out.println("<br>Your server's hostname is "+inetAddress.getHostName()); %> <br> </body> </html>
Anmerkung

Im folgenden Verfahren wird davon ausgegangen, dass Sie bereits mit den Grundlagen zum Erstellen von Stacks, Hinzufügen von Instances zu Ebenen usw. vertraut sind. Wenn Sie AWS OpsWorks Stacks noch nicht kennen, sollten Sie zuerst nachlesenErste Schritte mit Chef 11 Linux-Stacks.

So stellen Sie eine JSP-Seite aus einem Amazon S3 S3-Archiv bereit
  1. Erstellen Sie einen Stack mit einem Java App Server-Layer, fügen Sie dem Layer eine 24/7-Instance hinzu und starten Sie ihn.

  2. Kopieren Sie den Code in eine Datei mit dem Namen simplejsp.jsp, speichern Sie die Datei in einem Verzeichnis mit dem Namen simplejsp und erstellen Sie ein .zip-Archiv des Verzeichnisses. Die Namen sind willkürlich. Sie können beliebige Datei- oder Verzeichnisnamen verwenden. Sie können auch andere Archivtypen verwenden, einschließlich gzip, bzip2, Tarball oder Java WAR. Beachten Sie, dass AWS OpsWorks Stacks keine unkomprimierten Tarballs unterstützt. Um mehrere JSP-Seiten bereitzustellen, fügen Sie diese zu demselben Archiv hinzu.

  3. Laden Sie das Archiv in einen Amazon S3 S3-Bucket hoch und veröffentlichen Sie die Datei. Kopieren Sie die URL der Datei zur späteren Verwendung. Weitere Informationen zum Erstellen von Buckets und Hochladen von Dateien finden Sie unter Erste Schritte mit Amazon Simple Storage Service

  4. Klicken Sie auf Hinzufügen einer Anwendung zum Stack und geben Sie folgende Einstellungen an:

    • Name (NameSimpleJSP

    • App typeJava

    • Repository-TypHttp Archive

    • Repository-URL — die Amazon S3 S3-URL Ihrer Archivdatei.

    Verwenden Sie die Standardwerte für die übrigen Einstellungen und klicken Sie anschließend auf Add App (App hinzufügen), um die Anwendung zu erstellen.

  5. Stellen Sie die App auf der Java App Server-Instance bereit.

Sie können jetzt die URL der Anwendung aufrufen und die Anwendung anzeigen. Wenn Sie keine Domäne angegeben haben, können Sie eine URL erstellen, indem Sie entweder die öffentliche IP-Adresse und den öffentlichen DNS-Namen der Instance verwenden. Um die öffentliche IP-Adresse oder den öffentlichen DNS-Namen einer Instanz abzurufen, gehen Sie zur AWS OpsWorks Stacks-Konsole und klicken Sie auf der Seite Instances auf den Namen der Instanz, um deren Detailseite zu öffnen.

Der Rest der URL hängt vom Kurznamen der App ab. Dabei handelt es sich um einen Namen in Kleinbuchstaben, den AWS OpsWorks Stacks aus dem Namen der App generiert, den Sie bei der Erstellung der App angegeben haben. Der Kurzname von SimpleJSP, beispielsweise, lautet simplejsp. Sie können den Kurznamen einer Anwendung aus ihrer Detailseite entnehmen.

  • Wenn der Kurzname root lautet, können Sie entweder http://public_DNS/appname.jsp oder http://public_IP/appname.jsp verwenden.

  • Andernfalls können Sie entweder http://public_DNS/app_shortname/appname.jsp oder http://public_IP/app_shortname/appname.jsp verwenden.

Wenn Sie eine Domäne für die Anwendung angegeben haben, lautet die URL http://domain/appname.jsp.

Die URL sollte in etwa wie folgt aussehen: http://192.0.2.0/simplejsp/simplejsp.jsp.

Wenn Sie mehrere Anwendungen für dieselbe Instance bereitstellen möchten, dürfen Sie root nicht als Kurznamen verwenden. Dies kann URL-Konflikte verursachen, die verhindern, dass die Anwendung ordnungsgemäß funktioniert. Weisen Sie stattdessen den Anwendungen jeweils unterschiedliche Domänennamen zu.

Bereitstellen einer JSP-Anwendung mit einer Backend-Datenbank

JSP-Seiten können ein JDBC-DataSource-Objekt verwenden, um eine Verbindung mit einer Backend-Datenbank zu erstellen. Sie können eine Anwendung erstellen und bereitstellen, indem Sie das im vorherigen Abschnitt beschriebene Verfahren anwenden. Dabei ist ein zusätzlicher Schritt auszuführen, um die Verbindung einzurichten.

Auf der folgenden JSP-Seite wird die Verbindungsherstellung zu einem DataSource-Objekt dargestellt.

<html> <head> <title>DB Access</title> </head> <body> <%@ page language="java" import="java.sql.*,javax.naming.*,javax.sql.*" %> <% StringBuffer output = new StringBuffer(); DataSource ds = null; Connection con = null; Statement stmt = null; ResultSet rs = null; try { Context initCtx = new InitialContext(); ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/mydb"); con = ds.getConnection(); output.append("Databases found:<br>"); stmt = con.createStatement(); rs = stmt.executeQuery("show databases"); while (rs.next()) { output.append(rs.getString(1)); output.append("<br>"); } } catch (Exception e) { output.append("Exception: "); output.append(e.getMessage()); output.append("<br>"); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (con != null) { con.close(); } } catch (Exception e) { output.append("Exception (during close of connection): "); output.append(e.getMessage()); output.append("<br>"); } } %> <%= output.toString() %> </body> </html>

AWS OpsWorks Stacks erstellt und initialisiert das DataSource Objekt, bindet es an einen logischen Namen und registriert den Namen bei einem Java Naming and Directory Interface (JNDI) -Namensdienst. Der vollständige logische Name lautet java:comp/env/user-assigned-name. Sie müssen den vom Benutzer zugewiesenen Teil des Namens angeben, indem Sie benutzerdefinierte JSON-Attribute zur Stack-Konfiguration und zu den Bereitstellungsattributen hinzufügen, um das Attribut ['opsworks_java']['datasources'] zu definieren, wie nachfolgend beschrieben.

So stellen Sie eine JSP-Seite bereit, die eine Verbindung mit einer MySQL-Datenbank herstellt
  1. Erstellen Sie einen Stack mit einer Java App Server-Ebene, fügen Sie jeder Ebene rund um die Uhr verfügbare Instanzen hinzu und starten Sie sie.

  2. Fügen Sie eine Datenbankebene zum Stack hinzu. Die Details hängen davon ab, welche Datenbank Sie verwenden.

    Um eine MySQL-Instanz für das Beispiel zu verwenden, fügen Sie dem Stack eine MySQL-Ebene hinzu, fügen Sie der Ebene eine 24/7-Instanz hinzu und starten Sie sie.

    Um eine Amazon RDS (MySQL) -Instance für das Beispiel zu verwenden:

    • Geben Sie eine MySQL-Datenbank-Engine für die Instance an.

    • Weisen Sie der Instance die Sicherheitsgruppen AWS- OpsWorks -DB-Master-Server (security_group_id) und AWS- OpsWorks -Java-App-Server (security_group_id) zu. AWS OpsWorks Stacks erstellt diese Sicherheitsgruppen für Sie, wenn Sie Ihren ersten Stack in der Region erstellen.

    • Erstellen Sie eine Datenbank mit dem Namen simplejspdb.

    • Stellen Sie sicher, dass der Master-Benutzername und das Passwort nicht & oder andere Zeichen enthalten, die einen Tomcat-Fehler verursachen können.

      Insbesondere während des Starts muss Tomcat die Kontextdatei der Webanwendung analysieren. Diese XML-Datei enthält den Master-Benutzernamen und das Paswort. Wenn eine der Zeichenfolgen ein &-Zeichen enthält, interpretiert der XML-Parser dies als manipuliertes XML-Objekt und löst eine Parsing-Ausnahme aus, sodass Tomcat nicht starten kann. Weitere Informationen über die Kontextdatei der Webanwendung finden Sie unter tomcat::context.

    • Fügen Sie der Java App Server-Schicht einen MySQL-Treiber hinzu.

    • Registrieren Sie die RDS-Instance mit Ihrem Stack.

    Weitere Informationen zur Verwendung von Amazon RDS-Instances mit AWS OpsWorks Stacks finden Sie unterAmazon RDS-Serviceschicht.

  3. Kopieren Sie den Beispiel-Code in eine Datei mit dem Namen simplejspdb.jsp, speichern Sie die Datei in einem Verzeichnis mit dem Namen simplejspdb und erstellen Sie ein .zip-Archiv des Verzeichnisses. Die Namen sind willkürlich. Sie können beliebige Datei- oder Verzeichnisnamen verwenden. Sie können auch andere Archivierungstypen einschließlich gzip, bzip2 oder Tarball verwenden. Um mehrere JSP-Seiten bereitzustellen, fügen Sie diese zu demselben Archiv hinzu. Weitere Informationen zur Bereitstellung von Anwendungen aus anderen Repository-Typen finden Sie unter Anwendungsquelle.

  4. Laden Sie das Archiv in einen Amazon S3 S3-Bucket hoch und veröffentlichen Sie die Datei. Kopieren Sie die URL der Datei zur späteren Verwendung. Weitere Informationen zum Erstellen von Buckets und Hochladen von Dateien finden Sie unter Erste Schritte mit Amazon Simple Storage Service

  5. Klicken Sie auf Hinzufügen einer Anwendung zum Stack und geben Sie folgende Einstellungen an:

    • Name (NameSimpleJSPDB

    • App typeJava

    • DatenquellentypOpsWorks(für eine MySQL-Instance) oder RDS (für eine Amazon RDS-Instance).

    • Datenbank-Instance — Die zuvor erstellte MySQL-Instance, die normalerweise den Namen db-master1 (mysql) trägt, oder die Amazon RDS-Instance, die DB_Instance_Name (mysql) heißen wird.

    • Datenbanknamesimplejspdb.

    • Repository-TypHttp Archive

    • Repository-URL — die Amazon S3 S3-URL Ihrer Archivdatei.

    Verwenden Sie die Standardwerte für die übrigen Einstellungen und klicken Sie anschließend auf Add App (App hinzufügen), um die Anwendung zu erstellen.

  6. Fügen Sie die folgenden benutzerdefinierten JSON-Attribute zu den Stack-Konfigurationsattributen hinzu, wobei simplejspdb der Kurzname der Anwendung ist.

    { "opsworks_java": { "datasources": { "simplejspdb": "jdbc/mydb" } } }

    AWS OpsWorks Stacks verwendet diese Zuordnung, um eine Kontextdatei mit den erforderlichen Datenbankinformationen zu generieren.

    Weitere Informationen zum Hinzufügen benutzerdefinierter JSON-Attribute zu den Stack-Konfigurationsattributen finden Sie unter Nutzen eines benutzerdefinierten JSON-Objekts.

  7. Stellen Sie die App auf der Java App Server-Instanz bereit.

Nun können Sie die Anwendung mit ihrer URL anzeigen. Eine Beschreibung zur Erstellung der URL finden Sie unter Bereitstellen einer JSP-Anwendung.

Die URL sollte in etwa wie folgt aussehen: http://192.0.2.0/simplejspdb/simplejspdb.jsp.

Anmerkung

Das datasources-Attribut kann mehrere Attribute enthalten. Jedes Attribut wird mit dem Namen des Kurznamens einer Anwendung bezeichnet und wird auf den entsprechenden, vom Benutzer zugewiesenen Teil eines logischen Namen gesetzt. Wenn Sie über mehrere Anwendungen verfügen, können Sie verschiedene logischen Namen verwenden. Dazu ist ein benutzerdefiniertes JSON-Objekt erforderlich, das in etwa wie folgt aussieht.

{ "opsworks_java": { "datasources": { "myjavaapp": "jdbc/myappdb", "simplejsp": "jdbc/myjspdb", ... } } }