部署 Java 應用程式 - AWS OpsWorks

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

部署 Java 應用程式

重要

所以此 AWS OpsWorks Stacks 服務於 2024 年 5 月 26 日終止使用壽命,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載移轉至其他解決方案。如果您對移轉有任何疑問,請聯絡 AWS Support 團隊上 AWS Re: 郵寄或透過 AWS 高級 Support

下列主題說明如何將應用程式部署至 Java 應用程式伺服器層的執行個體。這些示例適用於JSP應用程序,但是您可以使用基本相同的過程來安裝其他類型的 Java 應用程序。

您可以從任何受支援的儲存庫部署JSP頁面。如果您想要部署WAR檔案,請注意 AWS OpsWorks 堆疊會自動擷取從 Amazon S3 或存檔部署的HTTP檔WAR案,但不會從 Git 或顛覆儲存庫擷取檔案。如果您想使用 Git 或 Subversion 來處理WAR文件,則可以執行以下操作之一:

  • 將擷取的封存檔存放至儲存庫。

  • 將WAR檔案儲存在儲存庫中,並使用 Chef 部署勾點來擷取歸檔,如以下範例所述。

您可以使用 Chef 部署勾點,在四個部署階段中的任何一階段,於執行個體上執行使用者提供的 Ruby 應用程式。應用程式名稱可決定階段。以下是一個名為 Ruby 應用程序的示例before_migrate.rb,該應用程序提取已從 Git 或 Subversion 存儲庫部署的WAR文件。該名稱會建立應用程式與 Checkout 部署勾點的關聯,以在部署操作開始時、檢查程式碼之後但在遷移之前執行。如需如何使用此範例的詳細資訊,請參閱使用 Chef 部署勾點

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

當您將更新部署到JSP應用程序時,Tomcat 可能無法識別更新,而是繼續運行現有的應用程序版本。例如,如果您將應用程序部署為僅包含JSP頁面的 .zip 文件,則可能會發生這種情況。為確保 Tomcat 執行最近部署的版本,專案的根目錄應包含包含web.xml檔案的 WEB-INF 目錄。web.xml 檔案可包含各種內容,但以下內容便足以確保 Tomcat 識別更新及執行目前部署的應用程式版本。您不需要為每次更新變更版本。若版本沒有變更,Tomcat 將會識別更新。

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

部署JSP應用程式

若要部署JSP應用程式,請指定名稱和存放庫資訊。您也可以選擇性地指定網域和SSL設定。如需如何建立應用程式的詳細資訊,請參閱新增應用程式。下列程序說明如何從公有 Amazon S3 存檔建立和部署簡單JSP頁面。如需有關如何使用其他存放庫類型 (包括私有 Amazon S3 存檔) 的資訊,請參閱應用程式來源

下面的例子顯示了JSP頁面,它只是顯示一些系統信息。

<%@ 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>
注意

下列程序假設您已熟悉建立堆疊、將執行個體新增至 layer 等等的基本知識。如果您是新手 AWS OpsWorks 堆疊,你應該先看看Chef 11 Linux 堆疊入門

若要從 Amazon S3 存檔部署JSP頁面
  1. 使用 Java 應用程式伺服器層建立堆疊將全年無休的執行個體新增至圖層,然後啟動它

  2. 將程式碼複製至名為 simplejsp.jsp 的檔案,並將檔案放入名為 simplejsp 的資料夾中,然後建立資料夾的 .zip 封存檔。名稱可以是任意名稱;您可以使用您想要的任何檔案或資料夾名稱。您也可以使用其他類型的歸檔,包括 gzip,bzip2,壓縮包或 Java 文件。WAR請注意, AWS OpsWorks 堆棧不支持未壓縮的壓縮包。若要部署多個JSP頁面,請將它們包含在同一個歸檔中。

  3. 將存檔上傳到 Amazon S3 儲存貯體,並將檔案設為公開。複製檔案以URL供日後使用。如需如何建立儲存貯體以及上傳檔案的詳細資訊,請參閱開始使用 Amazon Simple Storage Service

  4. 新增應用程式至堆疊,然後指定下列設定:

    • 名稱SimpleJSP

    • App type (應用程式類型)Java

    • Repository type (儲存庫類型)Http Archive

    • 儲存庫 URL — 存檔檔案URL的 Amazon S3。

    針對剩餘設定使用預設值,然後按一下 Add App (新增應用程式) 以建立應用程式。

  5. 應用程式部署至 Java 應用程式伺服器執行個體。

現在,您可以轉到該應用程序URL並查看該應用程序。如果您尚未指定網域,可以使用執行個體的公有 IP 位址或其公用DNS名稱URL來建構網域。若要取得執行個體的公用 IP 位址或公用DNS名稱,請前往 AWS OpsWorks 「堆疊」主控台,然後按一下「執行個體」頁面上的執行個體名稱,開啟其詳細資料

的其餘部分URL取決於應用程序的簡短名稱,這是一個小寫名稱 AWS OpsWorks 堆疊會根據您在建立應用程式時指定的 App 名稱產生。例如,簡單的簡短名稱JSP是簡單的 JSP。您可以從其詳細資訊頁面中取得應用程式的簡短名稱。

  • 如果簡短名稱是 root,則您可以使用 http://public_DNS/appname.jsphttp://public_IP/appname.jsp

  • 否則,您可以使用 http://public_DNS/app_shortname/appname.jsphttp://public_IP/app_shortname/appname.jsp

如果您已為應用程式指定網域,則URL為http://domain/appname.jsp.

對URL於這個例子會是這樣的http://192.0.2.0/simplejsp/simplejsp.jsp

如果您想要將多個應用程式部署至相同的執行個體,則不應該使用 root 做為簡短名稱。這可能會造成URL衝突,導致應用程式無法正常運作。相反地,請將不同的網域名稱指派給每個應用程式。

使用後端資料庫部署JSP應用程式

JSP頁面可以使用一個JDBCDataSource對象來連接到後端數據庫。您可以使用上節中的程序來建立和部署這類應用程式,而且只要再一個額外的步驟就可以設定連線。

以下JSP頁面顯示如何連接至DataSource物件。

<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 堆棧創建並初始化對DataSource象,將其綁定到一個邏輯名,並使用 Java 命名和目錄接口(JNDI)命名服務註冊該名稱。完整的邏輯名稱為 java:comp/env/user-assigned-name。您必須透過將自訂屬性新增至堆疊配置和部署JSON屬性來定義['opsworks_java']['datasources']屬性,以指定使用者指定名稱的部分,如下所述。

若要部署連線至我的SQL資料庫的JSP頁面
  1. 使用 Java 應用程序服務器層創建一個堆棧,向每個層添加 24/7 實例,然後啟動它

  2. 將資料庫 layer 新增至堆疊。詳細資訊取決於您使用的資料庫。

    若要在此範例中使用 My SQL 執行個體,請將 My SQL 圖層新增至堆疊,將全年無休的執行個體新增至圖層,然後啟動它

    以下範例使用 Amazon RDS (MySQL) 執行個體:

    • 指定執行個體的 [我的SQL資料庫引擎]。

    • 指派 AWS-OpsWorks-DB 主伺服器 (security_group_id AWS-OpsWorks Java 的應用程序服務器(security_group_id) 執行個體的安全群組。 AWS OpsWorks 當您在該地區建立第一個堆疊時,Stack 會為您建立這些安全群組。

    • 建立名為 simplejspdb 的資料庫。

    • 確定主要使用者名稱和密碼未包含可能會導致 Tomcat 錯誤的 & 或其他字元。

      特別是在啟動過程中,Tomcat 必須解析 Web 應用程序上下文文件,該XML文件是一個包含主密碼和用戶名的文件。如果任一字串包含字&元,剖析XML器會將其視為格式錯誤的XML實體,並擲回剖析例外狀況,以防止 Tomcat 啟動。如需 Web 應用程式內容檔案的詳細資訊,請參閱tomcat::context

    • 將我的SQL驅動程式新增至 Java 應用程式伺服器層。

    • 在堆疊中註冊RDS執行個體

    如需如何搭配使用 Amazon RDS 執行個體的詳細資訊 AWS OpsWorks 堆疊,請參閱Amazon RDS 服務層

  3. 將範例程式碼複製至名為 simplejspdb.jsp 的檔案,並將檔案放入名為 simplejspdb 的資料夾中,然後建立資料夾的 .zip 封存檔。名稱可以是任意名稱;您可以使用您想要的任何檔案或資料夾名稱。您也可以使用其他類型的封存檔,包括 gzip、bzip2 或 tarball。若要部署多個JSP頁面,請將它們包含在同一個歸檔中。如需如何從其他儲存庫類型部署應用程式的資訊,請參閱應用程式來源

  4. 將存檔上傳到 Amazon S3 儲存貯體,並將檔案設為公開。複製檔案以URL供日後使用。如需如何建立儲存貯體以及上傳檔案的詳細資訊,請參閱開始使用 Amazon Simple Storage Service

  5. 新增應用程式至堆疊,然後指定下列設定:

    • 名稱SimpleJSPDB

    • App type (應用程式類型)Java

    • 資料來源類型OpsWorks(適用於我的SQL執行個體) 或 RDS(針對 Amazon RDS 執行個體)。

    • 資料庫執行個SQL體 — 您之前建立的我的執行個體,通常名為 db-master1 (mysql),或將命名為的 Amazon RDS 執行個體 DB_instance_name (MySQL)

    • Database name (資料庫名稱)simplejspdb

    • Repository type (儲存庫類型)Http Archive

    • 儲存庫 URL — 存檔檔案URL的 Amazon S3。

    針對剩餘設定使用預設值,然後按一下 Add App (新增應用程式) 以建立應用程式。

  6. 將以下自定義JSON屬性添加到堆棧配置屬性中,其中 simplejspdb 是應用程序的簡短名稱。

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

    AWS OpsWorks 堆棧使用此映射來生成包含必要數據庫信息的上下文文件。

    如需如何將自訂JSON屬性新增至堆疊配置屬性的詳細資訊,請參閱使用自訂 JSON

  7. 應用程式部署至 Java 應用程式伺服器執行個體。

現在,您可以使用該應用程序URL查看該應用程序。如需如何建構的描述URL,請參閱部署JSP應用程式

對URL於這個例子會是這樣的http://192.0.2.0/simplejspdb/simplejspdb.jsp

注意

datasources 屬性可以包含多個屬性。每個屬性的名稱都會有應用程式簡短名稱,並設定為邏輯名稱中由使用者指派的適當部分。如果您有多個應用程序,則可以使用單獨的邏輯名稱,這需JSON要自定義如下內容。

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