Aggiungere un'istanza Amazon RDS DB all'ambiente Java Elastic Beanstalk - AWS Elastic Beanstalk

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Aggiungere un'istanza Amazon RDS DB all'ambiente Java Elastic Beanstalk

Questo argomento fornisce istruzioni per creare un Amazon RDS utilizzando la console Elastic Beanstalk. Puoi utilizzare un'istanza database Amazon Relational Database Service (Amazon RDS) per archiviare i dati raccolti e modificati dall'applicazione. Il database può essere collegato all'ambiente e gestito da Elastic Beanstalk oppure può essere creato e gestito esternamente.

Se utilizzi Amazon RDS per la prima volta, aggiungi un'istanza database in un ambiente di test con la console Elastic Beanstalk e verifica che la tua applicazione sia in grado di connettersi a essa.

Per aggiungere un'istanza database al tuo ambiente
  1. Apri la console Elastic Beanstalk e, nell'elenco Regioni, seleziona la tua. Regione AWS

  2. Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

  3. Nel pannello di navigazione, selezionare Configuration (Configurazione).

  4. Nella categoria di configurazione del Database, scegliere Edit (Modifica).

  5. Scegliere un motore di database e immettere un nome utente e una password.

  6. Per salvare le modifiche scegli Apply (Applica) nella parte inferiore della pagina.

L'aggiunta di un'istanza database richiede circa 10 minuti. Quando l'aggiornamento dell'ambiente è completo, il nome host dell'istanza database e altre informazioni di connessione sono disponibili per la tua applicazione tramite le seguenti proprietà dell'ambiente:

Nome proprietà Descrizione Valore proprietà

RDS_HOSTNAME

Il nome host dell'istanza DB.

Nella scheda Connectivity & security (Connettività e sicurezza) della console Amazon RDS: Endpoint.

RDS_PORT

La porta su cui l'istanza database accetta le connessioni. Il valore predefinito varia tra i motori di database.

Nella scheda Connectivity & security (Connettività e sicurezza) della console Amazon RDS: Port (Porta).

RDS_DB_NAME

Il nome del database, ebdb.

Nella scheda Configuration (Configurazione) della console Amazon RDS: DB Name (Nome DB).

RDS_USERNAME

Il nome utente configurato per il database.

Nella scheda Configuration (Configurazione) della console Amazon RDS: Master username (Nome utente master).

RDS_PASSWORD

La password configurata per il database.

Non disponibile per riferimento nella console Amazon RDS.

Per ulteriori informazioni sulla configurazione di una istanza database interna, consulta Aggiunta di un database all'ambiente Elastic Beanstalk. Per istruzioni su come configurare un database esterno per l'uso con Elastic Beanstalk, consulta Utilizzo di Elastic Beanstalk con Amazon RDS.

Per connetterti al database, aggiungi il file JAR driver appropriato all'applicazione, carica la classe del driver nel codice e crea un oggetto di connessione con le proprietà dell'ambiente fornite da Elastic Beanstalk.

Download del driver JDBC

Avrai bisogno del file JAR del driver JDBC per il motore di database scelto. Salva il file JAR nel tuo codice sorgente e includilo nel tuo classpath quando compili la classe che crea le connessioni al database.

Puoi trovare il driver più recente per il motore di database nelle seguenti posizioni:

Per usare il driver JDBC, effettuare la chiamata a Class.forName() per caricarlo prima di creare la connessione con DriverManager.getConnection() nel codice.

JDBC utilizza una stringa di connessione nel formato seguente:

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

Puoi recuperare il nome host, la porta, il nome del database, il nome utente e la password dalle variabili di ambiente che Elastic Beanstalk fornisce alla tua applicazione. Il nome del driver è specifico per il tuo tipo di database e per la versione del driver. Di seguito vengono riportati esempi di nomi di driver:

  • mysql per MySQL

  • postgresql per PostgreSQL

  • oracle:thin per Oracle Thin

  • oracle:oci per Oracle OCI

  • oracle:oci8 per Oracle OCI 8

  • oracle:kprb per Oracle KPRB

  • sqlserver per SQL Server

Connessione a un database (piattaforme Java SE)

In un ambiente Java SE, utilizza System.getenv() per leggere le variabili di connessione dall'ambiente. Il seguente codice di esempio mostra una classe che crea una connessione a un database PostgreSQL.

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; }

Connessione a un database (piattaforme Tomcat)

In un ambiente Tomcat, le proprietà dell'ambiente vengono fornite come proprietà di sistema accessibili con System.getProperty().

Il seguente codice di esempio mostra una classe che crea una connessione a un database PostgreSQL.

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; }

In caso di problemi di connessione o di esecuzione di istruzioni SQL, prova a inserire il codice seguente in un file JSP. Questo codice si connette a un'istanza database, crea una tabella e scrive su di essa.

<%@ 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) {} } %>

Per visualizzare i risultati, inserisci il codice seguente nel corpo della porzione HTML del file JSP.

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

Risoluzione dei problemi di connessione del database

In caso di problemi di connessione a un database all'interno dell'applicazione, rivedi il log del container Web e il database.

Revisione dei log

Puoi visualizzare tutti i log dall'ambiente Elastic Beanstalk all'interno di Eclipse. Se non hai la vista AWS Explorer aperta, scegli la freccia accanto all' AWS icona arancione nella barra degli strumenti, quindi scegli Mostra visualizzazione Explorer. AWS Espandi AWS Elastic Beanstalk e il nome dell'ambiente, quindi apri il menu contestuale (pulsante destro del mouse) per il server. Seleziona Open in WTP Server Editor (Apri in WTP Server Editor).

Scegli la scheda Log della vista del Server per visualizzare i log di aggregazione dell'ambiente. Per aprire gli ultimi log, scegli il pulsante Refresh (Aggiorna) nell'angolo in alto a destra della pagina.

Scendi verso il basso per individuare i log Tomcat in /var/log/tomcat7/catalina.out. Se hai caricato la pagina Web dal nostro esempio precedente più volte, potresti visualizzare quanto segue.

------------------------------------- /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.

Tutte le informazioni che l'applicazione Web invia all'output standard appaiono nel log del container Web. Nell'esempio precedente, l'applicazione cerca di creare la tabella ogni volta che la pagina viene caricata. Questo determina un'eccezione SQL su tutte le pagine caricate dopo la prima.

Ad esempio, l'operazione precedente è accettabile. Tuttavia, nelle applicazioni concrete, mantieni le definizioni del tuo database in oggetti dello schema, esegui le transazioni all'interno di classi di modelli e coordina le richieste con servlet di controller.

Connessione all'istanza database RDS

Puoi connetterti direttamente all'istanza database RDS all'interno dell'ambiente Elastic Beanstalk utilizzando l'applicazione client MySQL.

In primo luogo, apri il gruppo di sicurezza all'istanza database di RDS per consentire il traffico dal tuo computer.

  1. Apri la console Elastic Beanstalk e, nell'elenco Regioni, seleziona la tua. Regione AWS

  2. Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

  3. Nel pannello di navigazione, selezionare Configuration (Configurazione).

  4. Nella categoria di configurazione del Database, scegliere Edit (Modifica).

  5. Accanto a Endpoint, scegli il collegamento della console Amazon RDS.

  6. Nella pagina dei dettagli dell'istanza RDS Dashboard (Pannello di controllo RDS) in Security and Network (Sicurezza e rete), seleziona il gruppo di sicurezza che inizia con rds- accanto a Security Groups (Gruppi di sicurezza).

    Nota

    Il database potrebbe avere più voci etichettate con Security Groups(Gruppi di sicurezza). Utilizza il primo che inizia con awseb, solo se hai un account precedente che non dispone di un Amazon Virtual Private Cloud (Amazon VPC) predefinito.

  7. In Security group details (Dettagli gruppi di sicurezza), seleziona la scheda Inbound (In ingresso), quindi Edit (Modifica).

  8. Aggiungi una regola per MySQL (porta 3306) che consente il traffico dal tuo indirizzo IP, specificato nel formato CIDR.

  9. Scegliere Save (Salva). Le modifiche diventano effettive immediatamente.

Torna ai dettagli di configurazione di Elastic Beanstalk per l'ambiente e prendi nota dell'endpoint. Puoi utilizzare il nome di dominio per la connessione all'istanza database di RDS.

Installa il client MySQL e avvia una connessione al database sulla porta 3306. In Windows, installa MySQL Workbench dalla home page di MySQL e segui le istruzioni.

Su Linux, installa il client MySQL utilizzando il programma di gestione dei pacchetti per la tua distribuzione. L'esempio seguente funziona con Ubuntu e altri derivati 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 ...

Dopo aver effettuato la connessione, è possibile eseguire comandi SQL per visualizzare lo stato del database, se le tabelle e le righe sono state create e altre informazioni.

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