建立堆疊和執行應用程式 - AWS OpsWorks

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

建立堆疊和執行應用程式

重要

AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問,請透過 AWS re:Post 或透過 AWS Premium Support 聯絡 AWS 支援 團隊。

本節說明如何使用 Tomcat 技術指南實作基本堆疊設定,以執行名為 Simple 的簡易 Java 伺服器頁面 (JSP) 應用程式JSP。堆疊包含名為 的 Tomcat 型自訂 layer TomCustom 和 MySQL layer。SimpleJSP 已部署到 TomCustom SQL,並顯示 My 資料庫的一些資訊。如果您尚未熟悉如何使用 AWS OpsWorks Stacks 的基本概念,您應該先閱讀 Chef 11 Linux 堆疊入門

簡單JSP應用程式

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 方法,擷取適當的物件。簡單JSP範例的邏輯名稱 java:comp/env/jdbc/mydb具有下列元件:

  • 根命名空間 (java),以冒號 (:) 與名稱的剩餘部分分開。

  • 任何額外的命名空間,都會以斜線 (/) 分開。

    Tomcat 會自動將資源新增到 comp/env 命名空間。

  • 資源名稱,定義於 web 應用程式內容組態檔案中,並以斜線與命名空間分隔。

    此範例的資源名稱為 jdbc/mydb

若要建立與資料庫的連線,SimpleJSP 會執行下列動作:

  1. 呼叫 DataSource 物件的 getConnection 方法,傳回 Connection 物件。

  2. 呼叫 Connection 物件的 createStatement 方法,建立 Statement 物件,您會使用此物件與資料庫通訊。

  3. 透過呼叫適當的 Statement 方法與資料庫通訊。

    executeQuery 執行SHOWDATABASES查詢的簡單JSP呼叫,其中列出伺服器的資料庫。

executeQuery 方法會傳回 ResultSet 物件,其中包含查詢的結果。SimpleJSP 從傳回的ResultSet物件取得資料庫名稱,並將其串連以建立輸出字串。最後,範例會關閉 ResultSetStatementConnection 物件。如需 JSP和 的詳細資訊JDBC,請分別參閱JavaServer 頁面技術和JDBC基本概念

若要搭配堆疊使用 SimpleJSP,您必須將其放入儲存庫。您可以使用任何支援的儲存庫,但若要搭配下一節中討論的範例堆疊使用 SimpleJSP,您必須將其放入公有 S3 封存。如需如何使用其他標準儲存庫的資訊,請參閱技術指南儲存庫

在 S3 封存儲存庫中放置簡單JSP
  1. 將範例程式碼複製到名為 simplejsp.jsp 的檔案,然後將檔案置放在名為 simplejsp 的目錄中。

  2. 建立 simplejsp 目錄的 .zip 存檔。

  3. 建立公有 Amazon S3 儲存貯體、simplejsp.zip上傳至儲存貯體,並將檔案設為公有。

    如需如何執行此任務的說明,請參閱 Amazon Simple Storage Service 入門

建立堆疊

若要執行 SimpleJSP,您需要具有下列圖層的堆疊。

  • MySQL layer,支援後端 MySQL 伺服器。

  • 使用 Tomcat 技術指南支援 Tomcat 伺服器執行個體的自訂 layer。

建立堆疊
  1. 在 Stacks AWS OpsWorks 儀表板上,按一下新增 Stack 以建立新的堆疊,然後按一下進階 >> 以顯示所有選項。設定堆疊如下。

    • Name – 使用者定義的堆疊名稱;此範例使用 TomStack。

    • 使用自訂 Chef 技術指南 – 將切換設定為,顯示一些其他選項。

    • 儲存庫類型 – Git。

    • 儲存庫 URLgit://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。

    Configuration Management interface showing Chef version options and custom JSON input field.
  2. 按一下 Add a layer (新增 layer)。針對 Layer 類型,選取 MySQL。然後按一下 Add Layer (新增 Layer)

  3. 按一下導覽窗格中的 Instances (執行個體),然後按一下 Add an instance (新增執行個體)。按一下 Add Instance (新增執行個體) 接受預設值。在執行個體的列上,按一下 start (啟動)

  4. 返回 Layers (Layer) 頁面然後按一下 + Layer (+Layer) 以新增 layer。針對 Layer type (Layer 類型),按一下 Custom (自訂)。範例使用 TomCustomtomcustom 分別做為 layer 的名稱和短名。

    Add Layer form with Custom layer type, Name, and Short name fields for creating a customized layer.
  5. Layers (Layer) 頁面上,針對自訂 layer,按一下 Recipes (配方) 然後按一下 Edit (編輯)。在 Custom Chef Recipes (自訂 Chef 配方) 下,將 Tomcat 技術指南配方指派給 layer 的生命週期事件,如下所示:

    • 針對 Setup (安裝),輸入 tomcat::setup 然後按一下 +

    • 針對 Configure (設定),輸入 tomcat::configure 然後按一下 +

    • 針對 Deploy (部署),輸入 tomcat::deploy 然後按一下 +。然後按一下 Save (儲存)

      .

    Custom Chef Recipes interface showing setup, configure, and deploy steps with options.
  6. 按一下導覽窗格中的 Apps (應用程式),然後按一下 Add an app (新增應用程式)。指定下列選項,然後按一下 Add App (新增應用程式)

    • 名稱 – 應用程式的名稱;範例使用 SimpleJSP,且 Stacks AWS OpsWorks 產生的簡短名稱將是 Simplejsp。

    • 應用程式類型 – 將此選項設為其他

      AWS OpsWorks Stacks 會自動將標準應用程式類型部署到相關聯的伺服器執行個體。若您將 App type (應用程式類型) 設為「其他」, AWS OpsWorks Stacks 便只會執行部署配方,並讓它們處理部署。

    • 文件根 – 將此選項設定為 ROOT

      Document root (文件根) 的值指定內容名稱。

    • 儲存庫類型 – 將此選項設定為 S3 Archive

    • 儲存庫 URL– 將此設定為URL您先前建立的應用程式 Amazon S3。

    其他選項請使用預設設定。

    Application settings form with fields for name, app type, document root, and source details.
  7. 使用執行個體頁面將執行個體新增至 TomCustom layer 並啟動它。安裝配方完成後, AWS OpsWorks Stacks 會自動在新的執行個體上執行部署配方,因此啟動執行個體也會部署 SimpleJSP。

  8. 當 TomCustom 執行個體在線上時,按一下執行個體頁面上的執行個體名稱以查看其詳細資訊。複製公有 IP 地址。然後建構 URL,如下所示:http://publicIP/tc/appname.jsp。在此範例中,這URL看起來會類似 http://50.218.191.172/tc/simplejsp.jsp

    注意

    轉送請求至 Tomcat URL的 Apache 會設定為預設['tomcat']['apache_tomcat_bind_path']屬性 /tc/。SimpleJSP 文件根設定為 ROOT,這是解析為 的特殊值/。因此, URL是「.../tc/simplejsp.jsp」。

  9. 將上一個步驟URL的 貼到您的瀏覽器。請查看下列事項:

    Databases found: information_schema simplejsp test
    注意

    如果您的堆疊有 MySQL 執行個體, AWS OpsWorks Stacks 會自動為每個應用程式建立資料庫,以應用程式的簡短名稱命名。