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
Abra la consola de Elastic Beanstalk
y, en la lista Regiones, seleccione su. Región de AWS -
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.
En el panel de navegación, elija Configuration (Configuración).
-
En la categoría de configuración Database (Base de datos), seleccione Edit (Editar).
-
Seleccione un motor de base de datos y escriba el nombre de usuario y la contraseña.
-
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 |
---|---|---|
|
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. |
|
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. |
|
El nombre de la base de dato, |
En la pestaña Configuración de la RDS consola de Amazon: Nombre de base de datos. |
|
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. |
|
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.
Secciones
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:
-
mysql
para My SQL -
postgresql
para Postgre SQL -
oracle:thin
para Oracle Thin -
oracle:oci
para Oracle OCI -
oracle:oci8
para Oracle OCI 8 -
oracle:kprb
para Oracle KPRB -
sqlserver
para 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.
Abra la consola de Elastic Beanstalk
y, en la lista Regiones, seleccione su. Región de AWS -
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.
En el panel de navegación, elija Configuration (Configuración).
-
En la categoría de configuración Database (Base de datos), seleccione Edit (Editar).
-
Junto a Endpoint, selecciona el enlace a la RDS consola de Amazon.
-
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.
-
En Security group details (Detalles del grupo de seguridad), elija la pestaña Inbound (Entrada) y, a continuación, elija Edit (Editar).
-
Agregue una regla para My SQL (puerto 3306) que permita el tráfico desde su dirección IP, especificada en el formato. CIDR
-
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)