Implementación de aplicaciones Java - AWS OpsWorks

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Implementación de aplicaciones Java

importante

El AWS OpsWorks Stacks servicio llegó al final de su vida útil el 26 de mayo de 2024 y se ha desactivado tanto para los clientes nuevos como para los existentes. Recomendamos encarecidamente a los clientes que migren sus cargas de trabajo a otras soluciones lo antes posible. Si tienes preguntas sobre la migración, ponte en contacto con el AWS Support equipo en AWS Re:post o a través de Premium AWS Support.

En los temas siguientes se describe cómo implementar aplicaciones en las instancias de una capa del servidor de aplicaciones de Java. Los ejemplos se refieren a aplicaciones JSP, aunque básicamente se sigue el mismo procedimiento para instalar otros tipos de aplicaciones Java.

Puede implementar páginas JSP desde cualquiera de los repositorios admitidos. Si quieres implementar archivos WAR, ten en cuenta que AWS OpsWorks Stacks extrae automáticamente los archivos WAR desplegados desde un archivo HTTP o Amazon S3, pero no desde un repositorio de Git o Subversion. Si desea utilizar Git o Subversion para archivos WAR, puede ejecutar una de las acciones siguientes:

  • Guardar el archivo extraído en el repositorio.

  • Guardar el archivo WAR en el repositorio y utilizar un enlace de implementación de Chef para extraer el archivo, tal y como se muestra en el siguiente ejemplo.

Puede utilizar los enlaces de implementación de Chef para ejecutar las aplicaciones Ruby facilitadas por el usuario, en una instancia de cualquiera de las cuatro fases de la implementación. El nombre de la aplicación determina la etapa. A continuación, mostramos un ejemplo de una aplicación Ruby denominada before_migrate.rb, que extrae un archivo WAR que se ha implementado desde un repositorio Git o Subversion. El nombre asocia la aplicación al enlace de implementación Checkout para que se ejecute al principio de la operación de implementación, después de verificar el código, pero antes de la migración. Para obtener más información sobre cómo usar este ejemplo, consulte Uso de enlaces de implementación 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
nota

Cuando implemente una actualización en una aplicación JSP, es posible que Tomcat no reconozca la actualización y, en su lugar, siga ejecutando la versión de la aplicación existente. Este caso puede producirse, por ejemplo, si implementa su aplicación como un archivo .zip que contiene únicamente una página JSP. Para asegurarse de que Tomcat ejecute la última versión implementada, el directorio raíz del proyecto debe incluir un directorio WEB-INF que contenga un archivo web.xml. Un archivo web.xml puede tener una gran variedad de contenidos, pero lo que sigue es suficiente para asegurarse de que Tomcat reconozca las actualizaciones y ejecute la versión de la aplicación implementada actualmente. No es necesario que cambie la versión en cada actualización. Tomcat reconoce la actualización incluso si la versión no ha cambiado.

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

Implementación de una aplicación JSP

Para implementar una aplicación JSP, especifique el nombre e información del repositorio. Opcionalmente, puede especificar dominios y parámetros de SSL. Para obtener más información sobre cómo crear una aplicación, consulte Agregar aplicaciones. En el siguiente procedimiento se muestra cómo crear e implementar una sencilla página JSP desde un archivo público de Amazon S3. Para obtener más información sobre cómo utilizar otros tipos de repositorios, incluidos archivos privados de Amazon S3, consulte Origen de las aplicaciones.

El siguiente ejemplo muestra la página JSP, que simplemente muestra parte de la información del sistema.

<%@ 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>
nota

En el siguiente procedimiento se presupone que ya está familiarizado con los conceptos básicos de la creación de pilas, adición de instancias a las capas, etc. Si eres nuevo en AWS OpsWorks Stacks, primero deberías ver. Introducción a las pilas de Linux en Chef 11

Para implementar una página JSP desde un archivo de Amazon S3
  1. Cree una pila con una capa del servidor de aplicaciones de Java, añada una instancia de funcionamiento ininterrumpido a la capa e iníciela.

  2. Copie el código en un archivo denominado simplejsp.jsp, ponga el archivo en una carpeta llamada simplejsp y cree un archivo .zip de la carpeta. Los nombres son arbitrarios; puede utilizar cualquier nombre de archivo o de carpeta que desee. También puede utilizar otros tipos de archivo, como gzip, bzip2, tar o Java WAR. Ten en cuenta que AWS OpsWorks Stacks no admite archivos tar sin comprimir. Para implementar varias páginas JSP, inclúyalas en el mismo archivo.

  3. Cargue el archivo en un bucket de Amazon S3 y hágalo público. Copie la dirección URL del archivo para usarla más tarde. Para obtener más información acerca de cómo crear buckets y cargar archivos, vaya a Comenzar a utilizar Amazon Simple Storage Service.

  4. Añada una aplicación a la pila y especifique los parámetros siguientes:

    • Nombre: SimpleJSP

    • App type: Java

    • Repository typeHttp Archive

    • URL de repositorio: la dirección URL de Amazon S3 del fichero de archivo.

    Utilice la configuración predeterminada para el resto de los valores y haga clic en Add App (Añadir aplicación) para crear la aplicación.

  5. Implemente la aplicación en la instancia del servidor de aplicaciones de Java.

A partir de ahora ya puede ir a la dirección URL de la aplicación y ver la aplicación. Si no ha especificado un dominio, puede crear una dirección URL usando la dirección IP pública de la instancia o su nombre de DNS público. Para obtener la dirección IP pública o el nombre DNS público de una instancia, ve a la consola AWS OpsWorks Stacks y haz clic en el nombre de la instancia en la página de instancias para abrir su página de detalles.

El resto de la URL depende del nombre abreviado de la aplicación, que es un nombre en minúsculas que AWS OpsWorks Stacks genera a partir del nombre de la aplicación que especificaste al crearla. Por ejemplo, el nombre abreviado de SimpleJSP es simplejsp. Puede obtener el nombre abreviado de una aplicación en su página de detalles.

  • Si el nombre abreviado es root, puede utilizar http://public_DNS/appname.jsp o http://public_IP/appname.jsp.

  • De lo contrario, puede utilizar http://public_DNS/app_shortname/appname.jsp o http://public_IP/app_shortname/appname.jsp.

Si ha especificado un dominio para la aplicación, la dirección URL es http://domain/appname.jsp.

La dirección URL del ejemplo sería algo parecido a http://192.0.2.0/simplejsp/simplejsp.jsp.

Si desea implementar varias aplicaciones en la misma instancia, no utilice root como nombre abreviado. Podrían producirse conflictos de URL que impidan que las aplicaciones funcionen correctamente. En su lugar, asigne un nombre de dominio diferente a cada aplicación.

Implementación de una aplicación JSP en una base de datos backend

Las páginas JSP pueden utilizar un objeto JDBC DataSource para conectarse a una base de datos backend. Este tipo de aplicación se crea y se implementa aplicando el procedimiento de la sección anterior, con un paso adicional para configurar la conexión.

En la página JSP siguiente se muestra cómo conectarse a un objeto 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 Stacks crea e inicializa el DataSource objeto, lo vincula a un nombre lógico y registra el nombre en un servicio de nombres de la interfaz de nombres y directorios de Java (JNDI). El nombre lógico completo es java:comp/env/user-assigned-name. Debe especificar la parte asignada por el usuario añadiendo atributos personalizados JSON a los atributos de configuración y de implementación de la pila para definir el atributo ['opsworks_java']['datasources'], tal y como se describe a continuación.

Para implementar una página JSP que se conecte a una base de datos MySQL
  1. Cree una pila con una capa del servidor de aplicaciones de Java, añada instancias de funcionamiento ininterrumpido a cada capa e iníciela.

  2. Añada una capa de la base de datos a la pila. Los detalles dependerán de la base de datos que utilice.

    Para utilizar una instancia de MySQL para el ejemplo, añada una capa MySQL a la pila, añada una instancia de funcionamiento ininterrumpido a la capa e iníciela.

    Para utilizar una instancia Amazon RDS (MySQL) para el ejemplo:

    • Especifique un motor de base de datos MySQL para la instancia.

    • Asigne los grupos de seguridad AWS- OpsWorks -DB-Master-Server (security_group_id) y AWS OpsWorks - -Java-App-Server (security_group_id) a la instancia. AWS OpsWorks Stacks crea estos grupos de seguridad automáticamente cuando creas tu primera pila en la región.

    • Cree una base de datos denominada simplejspdb.

    • Asegúrese de que el nombre de usuario y la contraseña maestros no contengan & u otros caracteres que puedan producir un error de Tomcat.

      En especial, en el momento del arranque, Tomcat analiza el archivo de contexto de aplicación web, que es un archivo XML que contiene el nombre de usuario y la contraseña maestros. Si una de estas dos cadenas contiene un carácter &, el analizador XML la tratará como una entidad XML formada incorrectamente y generará una excepción de análisis, que impedirá que Tomcat se inicie. Para obtener más información sobre el archivo de contexto de la aplicación web, consulte tomcat::context.

    • Añada un controlador MySQL a la capa del servidor de aplicaciones de Java.

    • Registre la instancia de RDS en la pila.

    Para obtener más información sobre cómo utilizar las instancias de Amazon RDS con AWS OpsWorks Stacks, consulte. Capa de servicios de Amazon RDS

  3. Copie el código de ejemplo en un archivo denominado simplejspdb.jsp, ponga el archivo en una carpeta llamada simplejspdb y cree un archivo .zip de la carpeta. Los nombres son arbitrarios; puede utilizar cualquier nombre de archivo o de carpeta que desee. También puede utilizar otros tipos de archivos, como gzip, bzip2 o tar. Para implementar varias páginas JSP, inclúyalas en el mismo archivo. Para obtener información acerca de cómo implementar aplicaciones de otros tipos de repositorios, consulte Origen de las aplicaciones.

  4. Cargue el archivo en un bucket de Amazon S3 y hágalo público. Copie la dirección URL del archivo para usarla más tarde. Para obtener más información acerca de cómo crear buckets y cargar archivos, vaya a Comenzar a utilizar Amazon Simple Storage Service.

  5. Añada una aplicación a la pila y especifique los parámetros siguientes:

    • Nombre: SimpleJSPDB

    • App type: Java

    • Tipo de fuente de datos: OpsWorks(para una instancia de MySQL) o RDS (para una instancia de Amazon RDS).

    • Instancia de base de datos: la instancia de MySQL creada anteriormente, que suele llamarse db-master1(mysql) o la instancia de Amazon RDS, que se llamará DB_instance_name (mysql).

    • Nombre de base de datossimplejspdb.

    • Repository typeHttp Archive

    • URL de repositorio: la dirección URL de Amazon S3 del fichero de archivo.

    Utilice la configuración predeterminada para el resto de los valores y haga clic en Add App (Añadir aplicación) para crear la aplicación.

  6. Agregue los siguientes atributos JSON personalizados a los atributos de configuración de la pila, donde simplejspdb es el nombre abreviado de la aplicación.

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

    AWS OpsWorks Stacks usa este mapeo para generar un archivo de contexto con la información de base de datos necesaria.

    Para obtener más información sobre cómo añadir atributos JSON personalizados a los atributos de configuración de la pila, consulte Uso de un JSON personalizado.

  7. Implemente la aplicación en la instancia del servidor de aplicaciones de Java.

A partir de ahora, puede utilizar la dirección URL de la aplicación para ver la aplicación. Para obtener una descripción de cómo construir la dirección URL, consulte Implementación de una aplicación JSP.

La dirección URL del ejemplo sería algo parecido a http://192.0.2.0/simplejspdb/simplejspdb.jsp.

nota

El atributo datasources puede contener varios atributos. Cada atributo se denomina con un nombre abreviado de aplicación y se define con la parte apropiada, asignada por el usuario, de un nombre lógico. Si tiene varias aplicaciones, puede utilizar nombres lógicos independientes, que requieren un JSON personalizado como el siguiente.

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