本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立堆疊和執行應用程式
重要
AWS OpsWorks Stacks 服務已於 2024 年 5 月 26 日終止,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問,請透過 AWS re:Post
本節說明如何使用 Tomcat 技術指南實作基本堆疊設定,執行名為 SimpleJSP 的簡易 Java 伺服器頁面 (JSP) 應用程式。堆疊包含名為 TomCustom 的 Tomcat 型自訂層和 MySQL 層。SimpleJSP 會部署到 TomCustom,並顯示 MySQL 資料庫中的一些資訊。如果您尚未熟悉如何使用 AWS OpsWorks Stacks 的基本概念,您應該先閱讀 Chef 11 Linux 堆疊入門。
SimpleJSP 應用程式
SimpleJSP 應用程式會示範如何設定資料庫連線和從堆疊的 MySQL 資料庫擷取資料的基本操作。
<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>
SimpleJSP 使用 DataSource
物件與 MySQL 資料庫通訊。Tomcat 使用 Web 應用程式內容組態檔案中的資料建立和初始化 DataSource
物件,並將其繫結到邏輯名稱。它接著會使用 Java 命名及目錄界面 (JNDI) 命名服務註冊邏輯名稱。為取得適當 DataSource
物件的執行個體,您會建立 InitialContext
物件,並將資源的邏輯名稱傳遞給物件的 lookup
方法,擷取適當的物件。SimpleJSP 範例的邏輯名稱 (java:comp/env/jdbc/mydb
) 包含下列元件:
-
根命名空間 (
java
),以冒號 (:) 與名稱的剩餘部分分開。 -
任何額外的命名空間,都會以斜線 (/) 分開。
Tomcat 會自動將資源新增到
comp/env
命名空間。 -
資源名稱,定義於 web 應用程式內容組態檔案中,並以斜線與命名空間分隔。
此範例的資源名稱為
jdbc/mydb
。
為建立資料庫的連線,SimpleJSP 會執行下列作業:
-
呼叫
DataSource
物件的getConnection
方法,傳回Connection
物件。 -
呼叫
Connection
物件的createStatement
方法,建立Statement
物件,您會使用此物件與資料庫通訊。 -
透過呼叫適當的
Statement
方法與資料庫通訊。SimpleJSP 會呼叫
executeQuery
執行 SHOW DATABASES 查詢,列出伺服器的資料庫。
executeQuery
方法會傳回 ResultSet
物件,其中包含查詢的結果。SimpleJSP 會從傳回的 ResultSet
物件取得資料庫名稱,然後串連它們以建立輸出字串。最後,範例會關閉 ResultSet
、Statement
和 Connection
物件。如需 JSP 和 JDBC 的詳細資訊,請分別參考 JavaServer Pages Technology
若要搭配堆疊使用 SimpleJSP,您必須將其置放在儲存庫中。您可以使用任何支援的儲存庫,但若要搭配下列章節中討論的範例堆疊使用 SimpleJSP,您必須將其置放在公有 S3 封存中。如需如何使用其他標準儲存庫的資訊,請參閱技術指南儲存庫。
將 SimpleJSP 置放在 S3 封存儲存庫中
-
將範例程式碼複製到名為
simplejsp.jsp
的檔案,然後將檔案置放在名為simplejsp
的目錄中。 -
建立
simplejsp
目錄的.zip
存檔。 -
建立公有 Amazon S3 儲存貯體、
simplejsp.zip
上傳至儲存貯體,並將檔案設為公有。如需如何執行此任務的說明,請參閱 Amazon Simple Storage Service 入門。
建立堆疊
若要執行 SimpleJSP,您需要具有下列 layer 的堆疊。
-
支援後端 MySQL 資料庫的 MySQL layer。
-
使用 Tomcat 技術指南支援 Tomcat 伺服器執行個體的自訂 layer。
建立堆疊
-
在 AWS OpsWorks Stacks 儀表板上,按一下新增 Stack 以建立新的堆疊,然後按一下進階 >> 以顯示所有選項。設定堆疊如下。
-
名稱 – 使用者定義的堆疊名稱;此範例使用 TomStack。
-
使用自訂 Chef 技術指南 – 將切換設定為是,顯示一些其他選項。
-
儲存庫類型 – Git。
-
儲存庫 URL–
git://github.com/amazonwebservices/opsworks-example-cookbooks.git
。 -
自訂 Chef JSON – 新增下列 JSON:
{ "tomcat": { "base_version": 7, "java_opts": "-Djava.awt.headless=true -Xmx256m" }, "datasources": { "ROOT": "jdbc/mydb" } }
對於剩餘的選項,您可以接受預設值。
自訂 JSON 會執行下列操作:
-
覆寫 Tomcat 技術指南的
['base_version']
屬性,將 Tomcat 的版本設為 7。預設值為 6。 -
覆寫 Tomcat 技術指南的
['java_opts']
屬性,指定執行個體沒有標題,並將 JVM 最大堆積大小設為 256MB。預設值不會為執行 Amazon Linux 的執行個體設定任何選項。 -
指定
['datasources]
屬性值,指派 JDBC 資源名稱 (jdbc/mydb) 給 web 應用程式內容名稱 (ROOT),如 tomcat::context 中所討論。這個最後一個屬性沒有任何預設值。您必須使用自訂 JSON 設定它。
-
-
按一下 Add a layer (新增 layer)。針對 Layer type (Layer 類型),選取 MySQL。然後按一下 Add Layer (新增 Layer)。
-
按一下導覽窗格中的 Instances (執行個體),然後按一下 Add an instance (新增執行個體)。按一下 Add Instance (新增執行個體) 接受預設值。在執行個體的列上,按一下 start (啟動)。
-
返回 Layers (Layer) 頁面然後按一下 + Layer (+Layer) 以新增 layer。針對 Layer type (Layer 類型),按一下 Custom (自訂)。範例使用
TomCustom
和tomcustom
分別做為 layer 的名稱和短名。 -
在 Layers (Layer) 頁面上,針對自訂 layer,按一下 Recipes (配方) 然後按一下 Edit (編輯)。在 Custom Chef Recipes (自訂 Chef 配方) 下,將 Tomcat 技術指南配方指派給 layer 的生命週期事件,如下所示:
-
針對 Setup (安裝),輸入
tomcat::setup
然後按一下 +。 -
針對 Configure (設定),輸入
tomcat::configure
然後按一下 +。 -
針對 Deploy (部署),輸入
tomcat::deploy
然後按一下 +。然後按一下 Save (儲存)。.
-
-
按一下導覽窗格中的 Apps (應用程式),然後按一下 Add an app (新增應用程式)。指定下列選項,然後按一下 Add App (新增應用程式):
-
Name – 應用程式的名稱;範例使用 SimpleJSP,Stacks AWS OpsWorks 產生的簡短名稱將是 Simplejsp。
-
應用程式類型 – 將此選項設為其他。
AWS OpsWorks Stacks 會自動將標準應用程式類型部署至相關聯的伺服器執行個體。若您將 App type (應用程式類型) 設為「其他」, AWS OpsWorks Stacks 便只會執行部署配方,並讓它們處理部署。
-
文件根 – 將此選項設定為
ROOT
。Document root (文件根) 的值指定內容名稱。
-
儲存庫類型 – 將此選項設定為 S3 Archive。
-
儲存庫 URL – 將此設定為您先前建立的應用程式 Amazon S3 URL。
其他選項請使用預設設定。
-
-
使用執行個體頁面,將執行個體新增至 TomCustom 層並啟動它。安裝配方完成後, AWS OpsWorks Stacks 會自動在新執行個體上執行部署配方,因此啟動執行個體也會部署 SimpleJSP。
-
當 TomCustom 執行個體上線時,在 Instances (執行個體) 頁面上按一下執行個體名稱以查看詳細資訊。複製公有 IP 地址。然後建構 URL 如下:http://
publicIP
/tc/appname.jsp
。例如,此 URL 看起來會像這樣:http://50.218.191.172/tc/simplejsp.jsp
。注意
轉遞請求至 Tomcat 的 Apache URL 已設為預設
['tomcat']['apache_tomcat_bind_path']
屬性,/tc/
。SimpleJSP 文件根已設為ROOT
,為解析至/
的特殊值。URL 因此為 ".../tc/simplejsp.jsp"。 -
將先前步驟中的 URL 於您的瀏覽器內貼上。請查看下列事項:
Databases found: information_schema simplejsp test
注意
如果您的堆疊有 MySQL 執行個體, AWS OpsWorks Stacks 會自動為每個應用程式建立資料庫,並以應用程式的簡短名稱命名。