创建堆栈并运行应用程序 - AWS OpsWorks

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建堆栈并运行应用程序

重要

AWS OpsWorks Stacks 不再接受新客户。在 2024 年 5 月 26 日之前,现有客户将能够正常使用 OpsWorks 控制台、API、CLI 和 CloudFormation 资源,届时它们将停产。为准备此过渡,我们建议您尽快将堆栈过渡到AWS Systems Manager。有关更多信息,请参阅 AWS OpsWorks Stacks 生命周期终止常见问题解答将 AWS OpsWorks Stacks 应用程序迁移到 AWS Systems Manager Application Manager

这部分介绍如何使用 Tomcat 说明书实施可运行名为 SimpleJSP 的简单的 Java 服务器页面 (JSP) 应用程序的基本堆栈设置。该堆栈由一个名为的基于 Tomcat 的自定义层和 TomCustom 一个 MySQL 层组成。SimpleJSP 已部署到 MySQL 数据库 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 将执行以下操作:

  1. 调用 DataSource 对象的 getConnection 方法,该方法将返回一个 Connection 对象。

  2. 调用 Connection 对象的 createStatement 方法以创建一个 Statement 对象,您可以使用该对象来与数据库通信。

  3. 通过调用相应的 Statement 方法与数据库进行通信。

    SimpleJSP 调用 executeQuery 以执行 SHOW DATABASES 查询,这会列出服务器的数据库。

executeQuery 方法将返回一个包含查询结果的 ResultSet 对象。SimpleJSP 从返回的 ResultSet 对象中获取数据库名称,并将这些名称联接起来创建一个输出字符串。最后,该示例关闭 ResultSetStatementConnection 对象。有关 JSP 和 JDBC 的更多信息,请分别参见 P JavaServer ages Tech nology 和 JD BC 基础知识。

要将 SimpleJSP 与堆栈一起使用,您必须将其放到存储库中。您可以使用任何受支持的存储库,但要将 SimpleJSP 与以下部分中讨论的示例堆栈一起使用,您必须将其放到公有 S3 存档中。有关如何使用其他标准存储库的信息,请参阅说明书存储库

将 SimpleJSP 放到 S3 存档存储库中
  1. 将示例代码复制到名为 simplejsp.jsp 的文件中,并将该文件放到名为 simplejsp 的目录中。

  2. 创建 simplejsp 目录的 .zip 存档。

  3. 创建一个 Amazon S3 存储桶,将 simplejsp.zip 上传到该存储桶,并将该文件设置为公有。

    有关如何执行此任务的说明,请参阅 Amazon Simple Storage Service 入门

创建堆栈

要运行 SimpleJSP,您需要一个包含以下层的堆栈。

  • 一个支持后端 MySQL 服务器的 MySQL 层。

  • 一个使用 Tomcat 说明书以支持 Tomcat 服务器实例的自定义层。

要创建 堆栈,请执行以下操作:
  1. 在 AWS OpsWorks Stacks 控制面板上,单击 Add Stack (添加堆栈) 以创建一个新的堆栈,然后单击 Advanced >> (高级 >>) 以显示所有选项。按如下所示配置堆栈。

    • 名称-用户定义的堆栈名称;本示例使用 TomStack。

    • 使用自定义 Chef 说明书 -将切换设置为 ,这会显示一些其他选项。

    • Repository type - 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 设置该属性。

  2. 单击 Add a layer。对于 Layer type,选择 MySQL。然后单击 Add Layer

  3. 在导航窗格中,单击 Instances,然后单击 Add an instance。单击 Add Instance 以接受默认值。在该实例对应的行中,单击 start

  4. 返回 Layers 页面并单击 + Layer 以添加层。对于 Layer type (层类型),单击 Custom (自定义)。该示例分别使用 TomCustomtomcustom 作为层的名称和短名称。

  5. Layers 页面上,对于自定义层,单击 Recipes,然后单击 Edit。在 Custom Chef Recipes 下,将 Tomcat 说明书配方分配给层的生命周期事件,如下所示:

    • 对于 Setup (设置),键入 tomcat::setup 并单击 +

    • 对于 Configure (配置),键入 tomcat::configure 并单击 +

    • 对于 Deploy (部署),键入 tomcat::deploy 并单击 +。然后单击 Save (保存)

      .

  6. 在导航窗格中,单击 Apps,然后单击 Add an app。指定以下选项,然后单击 Add App

    • 名称 -应用程序的名称;在该示例中为 SimpleJSP,AWS OpsWorks Stacks 生成的短名称为 simplejsp。

    • 应用程序类型 -将此选项设置为 其他

      AWS OpsWorks Stacks 自动将标准应用程序类型部署到关联的服务器实例。如果您将 App type (应用程序类型) 设置为“other (其他)”,AWS OpsWorks Stacks 将仅运行 Deploy 配方,并使这些配方处理部署作业。

    • Document root-将此选项设置为 ROOT

      Document root 值指定上下文名称。

    • 存储库类型 -将此选项设置为 S3 存档

    • 存储库 URL -将此选项设置为您之前创建的应用程序的 URL。

    为其他选项使用默认设置。

  7. 使用 “实例” 页面向 TomCustom 图层添加实例并启动该实例。 AWS OpsWorksStacks 在 Setup 配方完成后,在新的实例上运行 Deploy 配方,因此,启动该实例还会部署 SimpleJSP。

  8. 当 TomCustom 实例处于联机状态时,在 “实例” 页面上单击实例名称以查看其详细信息。复制公有 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”。

  9. 将上一步骤中的 URL 粘贴到您的浏览器中。您将看到以下内容:

    Databases found: information_schema simplejsp test
    注意

    如果您的堆栈拥有一个 MySQL 实例,AWS OpsWorks Stacks 将自动为每个应用程序创建一个数据库,并以该应用程序的短名称对数据库进行命名。