Añadir una instancia de Amazon RDS DB a su entorno de Java Elastic Beanstalk - AWS Elastic Beanstalk

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.

Añadir una instancia de Amazon RDS DB a su entorno de Java Elastic Beanstalk

En este tema se proporcionan instrucciones para crear un Amazon RDS mediante la consola de Elastic Beanstalk. Puede utilizar una instancia de base de datos de Amazon Relational Database Service (RDSAmazon) para almacenar los datos que la aplicación recopila y modifica. La base de datos se puede adjuntar al entorno y administrarse con Elastic Beanstalk, o bien, crearse y administrarse de forma externa.

Si es la primera vez que utiliza AmazonRDS, añada una instancia de base de datos a un entorno de prueba mediante la consola de Elastic Beanstalk y compruebe que la aplicación se puede conectar a ella.

Para agregar una instancia de base de datos al entorno
  1. Abra la consola de Elastic Beanstalk y, en la lista Regiones, seleccione su. Región de AWS

  2. En el panel de navegación, elija Environments (Entornos) y, a continuación, elija el nombre del entorno en la lista.

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

  3. En el panel de navegación, elija Configuration (Configuración).

  4. En la categoría de configuración Database (Base de datos), seleccione Edit (Editar).

  5. Seleccione un motor de base de datos y escriba el nombre de usuario y la contraseña.

  6. Para guardar los cambios, elija Aplicar en la parte inferior de la página.

Se tarda alrededor de 10 minutos en añadir una instancia de base de datos. Cuando se haya completado la actualización del entorno, el nombre de host de la instancia de base de datos y otra información de conexión estarán disponibles para su aplicación mediante las siguientes propiedades de entorno

Nombre de la propiedad Descripción Valor de la propiedad

RDS_HOSTNAME

El nombre de host de la instancia de base de datos.

En la pestaña Conectividad y seguridad de la RDS consola de Amazon: Endpoint.

RDS_PORT

El puerto en donde la instancia de base de datos acepta las conexiones. El valor predeterminado varía dependiendo del motor de base de datos.

En la pestaña Conectividad y seguridad de la RDS consola de Amazon: Puerto.

RDS_DB_NAME

El nombre de la base de dato, ebdb.

En la pestaña Configuración de la RDS consola de Amazon: Nombre de base de datos.

RDS_USERNAME

El nombre de usuario que ha configurado para la base de datos.

En la pestaña Configuración de la RDS consola de Amazon: nombre de usuario principal.

RDS_PASSWORD

La contraseña que ha configurado para la base de datos.

No está disponible como referencia en la RDS consola de Amazon.

Para obtener más información sobre cómo configurar una instancia de base de datos interna, consulte Añadir una base de datos al entorno de Elastic Beanstalk. Para obtener instrucciones sobre cómo configurar una base de datos externa para usarla con Elastic Beanstalk, consulte Uso de Elastic Beanstalk con Amazon RDS.

Para conectarse a la base de datos, añada el JAR archivo de controlador correspondiente a la aplicación, cargue la clase de controlador en el código y cree un objeto de conexión con las propiedades del entorno que proporciona Elastic Beanstalk.

Descargar el controlador JDBC

Necesitará el JAR archivo del JDBC controlador del motor de base de datos que elija. Guarde el JAR archivo en su código fuente e inclúyalo en su ruta de clases cuando compile la clase que crea las conexiones a la base de datos.

Puede encontrar el controlador más reciente para su motor de base de datos en las siguientes ubicaciones:

Para usar el JDBC controlador, llame Class.forName() para cargarlo antes de crear la conexión con DriverManager.getConnection() el código.

JDBCusa una cadena de conexión con el siguiente formato:

jdbc:driver://hostname:port/dbName?user=userName&password=password

Puede recuperar el nombre de host, el puerto, el nombre de la base de datos, el nombre de usuario y la contraseña desde las variables de entorno que Elastic Beanstalk proporciona a la aplicación. El nombre del controlador es específico del tipo de base de datos y de la versión del controlador. A continuación se muestran algunos nombres de controlador de ejemplo:

  • mysqlpara My SQL

  • postgresqlpara Postgre SQL

  • oracle:thin para Oracle Thin

  • oracle:ocipara Oracle OCI

  • oracle:oci8para Oracle OCI 8

  • oracle:kprbpara Oracle KPRB

  • sqlserverpara SQL Server

Conexión a una base de datos (plataformas Java SE)

En un entorno de Java SE, use System.getenv() para leer las variables de conexión del entorno. El siguiente código de ejemplo muestra una clase que crea una conexión a una base de datos de Postgre. SQL

private static Connection getRemoteConnection() { if (System.getenv("RDS_HOSTNAME") != null) { try { Class.forName("org.postgresql.Driver"); String dbName = System.getenv("RDS_DB_NAME"); String userName = System.getenv("RDS_USERNAME"); String password = System.getenv("RDS_PASSWORD"); String hostname = System.getenv("RDS_HOSTNAME"); String port = System.getenv("RDS_PORT"); String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password; logger.trace("Getting remote connection with connection string from environment variables."); Connection con = DriverManager.getConnection(jdbcUrl); logger.info("Remote connection successful."); return con; } catch (ClassNotFoundException e) { logger.warn(e.toString());} catch (SQLException e) { logger.warn(e.toString());} } return null; }

Conexión a una base de datos (plataformas Tomcat)

En un entorno Tomcat, las propiedades de entorno se proporcionan como propiedades del sistema accesibles con System.getProperty().

El siguiente código de ejemplo muestra una clase que crea una conexión a una base de datos de SQL Postgre.

private static Connection getRemoteConnection() { if (System.getProperty("RDS_HOSTNAME") != null) { try { Class.forName("org.postgresql.Driver"); String dbName = System.getProperty("RDS_DB_NAME"); String userName = System.getProperty("RDS_USERNAME"); String password = System.getProperty("RDS_PASSWORD"); String hostname = System.getProperty("RDS_HOSTNAME"); String port = System.getProperty("RDS_PORT"); String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password; logger.trace("Getting remote connection with connection string from environment variables."); Connection con = DriverManager.getConnection(jdbcUrl); logger.info("Remote connection successful."); return con; } catch (ClassNotFoundException e) { logger.warn(e.toString());} catch (SQLException e) { logger.warn(e.toString());} } return null; }

Si tiene problemas para establecer una conexión o ejecutar SQL sentencias, intente colocar el siguiente código en un JSP archivo. Este código establece una conexión con una instancia de base de datos, crea una tabla y escribe en ella.

<%@ page import="java.sql.*" %> <% // Read RDS connection information from the environment String dbName = System.getProperty("RDS_DB_NAME"); String userName = System.getProperty("RDS_USERNAME"); String password = System.getProperty("RDS_PASSWORD"); String hostname = System.getProperty("RDS_HOSTNAME"); String port = System.getProperty("RDS_PORT"); String jdbcUrl = "jdbc:mysql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password; // Load the JDBC driver try { System.out.println("Loading driver..."); Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver loaded!"); } catch (ClassNotFoundException e) { throw new RuntimeException("Cannot find the driver in the classpath!", e); } Connection conn = null; Statement setupStatement = null; Statement readStatement = null; ResultSet resultSet = null; String results = ""; int numresults = 0; String statement = null; try { // Create connection to RDS DB instance conn = DriverManager.getConnection(jdbcUrl); // Create a table and write two rows setupStatement = conn.createStatement(); String createTable = "CREATE TABLE Beanstalk (Resource char(50));"; String insertRow1 = "INSERT INTO Beanstalk (Resource) VALUES ('EC2 Instance');"; String insertRow2 = "INSERT INTO Beanstalk (Resource) VALUES ('RDS Instance');"; setupStatement.addBatch(createTable); setupStatement.addBatch(insertRow1); setupStatement.addBatch(insertRow2); setupStatement.executeBatch(); setupStatement.close(); } catch (SQLException ex) { // Handle any errors System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } finally { System.out.println("Closing the connection."); if (conn != null) try { conn.close(); } catch (SQLException ignore) {} } try { conn = DriverManager.getConnection(jdbcUrl); readStatement = conn.createStatement(); resultSet = readStatement.executeQuery("SELECT Resource FROM Beanstalk;"); resultSet.first(); results = resultSet.getString("Resource"); resultSet.next(); results += ", " + resultSet.getString("Resource"); resultSet.close(); readStatement.close(); conn.close(); } catch (SQLException ex) { // Handle any errors System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } finally { System.out.println("Closing the connection."); if (conn != null) try { conn.close(); } catch (SQLException ignore) {} } %>

Para mostrar los resultados, coloque el siguiente código en el cuerpo de la HTML parte del JSP archivo.

<p>Established connection to RDS. Read first two rows: <%= results %></p>

Resolución de problemas de conexión a la base de datos

Si surgen problemas al conectarse a una base de datos desde la aplicación, examine el archivo log del contenedor web y la base de datos.

Consulta de logs

Puede ver todos los registros de su entorno de Elastic Beanstalk desde Eclipse. Si no tiene abierta la vista del AWS explorador, seleccione la flecha situada junto al AWS icono naranja de la barra de herramientas y, a continuación, elija Mostrar vista del AWS explorador. Expanda AWS Elastic Beanstalk y el nombre de su entorno y, a continuación, abra el menú contextual (haga clic con el botón derecho) del servidor. Selecciona Abrir en el editor WTP del servidor.

Elija la pestaña Log (Registro) de la vista Server (Servidor) para ver los registros acumulados de su entorno. Para abrir los últimos registros, seleccione el botón Refresh (Actualizar) en la esquina superior derecha de la página.

Desplácese hacia abajo para localizar los logs de Tomcat en /var/log/tomcat7/catalina.out. Si ha cargado la página web desde nuestro ejemplo anterior varias veces, es posible que vea lo siguiente.

------------------------------------- /var/log/tomcat7/catalina.out ------------------------------------- INFO: Server startup in 9285 ms Loading driver... Driver loaded! SQLException: Table 'Beanstalk' already exists SQLState: 42S01 VendorError: 1050 Closing the connection. Closing the connection.

Toda la información que la aplicación web envía a la salida estándar aparece en el log del contenedor web. En el ejemplo anterior, la aplicación intenta crear la tabla cada vez que se carga la página. Esto hace que se detecte una SQL excepción cada vez que se cargue una página después de la primera.

Esto es aceptable porque se trata de un ejemplo. Pero en las aplicaciones reales mantenga las definiciones de base de datos en objetos del esquema, realice las transacciones desde las clases del modelo y coordine las solicitudes con servlets de controlador.

Conexión a una instancia de base de datos de RDS

Puede conectarse directamente a la RDS instancia de base de datos del entorno de Elastic Beanstalk mediante la aplicación My client. SQL

En primer lugar, abra el grupo de seguridad en la RDS instancia de base de datos para permitir el tráfico desde su ordenador.

  1. Abra la consola de Elastic Beanstalk y, en la lista Regiones, seleccione su. Región de AWS

  2. En el panel de navegación, elija Environments (Entornos) y, a continuación, elija el nombre del entorno en la lista.

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

  3. En el panel de navegación, elija Configuration (Configuración).

  4. En la categoría de configuración Database (Base de datos), seleccione Edit (Editar).

  5. Junto a Endpoint, selecciona el enlace a la RDS consola de Amazon.

  6. En la página de detalles de la instancia del RDSpanel de control, en Seguridad y red, selecciona el grupo de seguridad que empieza por rds- junto a Grupos de seguridad.

    nota

    La base de datos podría tener varias entradas etiquetadas como Security Groups (Grupos de seguridad). Usa la primera, que comienza con awseb, solo si tienes una cuenta antigua que no tiene una Amazon Virtual Private Cloud (AmazonVPC) predeterminada.

  7. En Security group details (Detalles del grupo de seguridad), elija la pestaña Inbound (Entrada) y, a continuación, elija Edit (Editar).

  8. Agregue una regla para My SQL (puerto 3306) que permita el tráfico desde su dirección IP, especificada en el formato. CIDR

  9. Seleccione Guardar. Los cambios surtirán efecto de inmediato.

Consulte de nuevo los datos de configuración de Elastic Beanstalk para el entorno y anote el punto de enlace. Utilizará el nombre de dominio para conectarse a la RDS instancia de base de datos.

Instale My SQL client e inicie una conexión a la base de datos en el puerto 3306. En Windows, instale My SQL Workbench desde la página de SQL inicio y siga las instrucciones.

En Linux, instale My SQL client mediante el administrador de paquetes de su distribución. El siguiente ejemplo funciona en Ubuntu y otros derivados de Debian.

// Install MySQL client $ sudo apt-get install mysql-client-5.5 ... // Connect to database $ mysql -h aas839jo2vwhwb.cnubrrfwfka8.us-west-2.rds.amazonaws.com -u username -ppassword ebdb Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 117 Server version: 5.5.40-log Source distribution ...

Una vez que se haya conectado, puede ejecutar SQL comandos para ver el estado de la base de datos, si se crearon las tablas y filas y otra información.

mysql> SELECT Resource from Beanstalk; +--------------+ | Resource | +--------------+ | EC2 Instance | | RDS Instance | +--------------+ 2 rows in set (0.01 sec)