Ajout d'une instance de base de données Amazon RDS à votre environnement d'application Java - AWS Elastic Beanstalk

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Ajout d'une instance de base de données Amazon RDS à votre environnement d'application Java

Vous pouvez utiliser une instance de base de données Amazon Relational Database Service (Amazon RDS) pour stocker les données que votre application recueille et modifie. La base de données peut être associée à votre environnement et gérée par Elastic Beanstalk, ou créée et gérée en externe.

Si vous utilisez Amazon RDS pour la première fois, ajoutez une instance de base de données à un environnement de test à l'aide de la console Elastic Beanstalk et assurez-vous que votre application peut s'y connecter.

Pour ajouter une instance DB à votre environnement
  1. Ouvrez la console Elastic Beanstalk et, dans la liste Regions (Régions), sélectionnez votre Région AWS.

  2. Dans le panneau de navigation, choisissez Environments (Environnements), puis choisissez le nom de votre environnement dans la liste.

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

  3. Dans le panneau de navigation, choisissez Configuration.

  4. Dans la catégorie de configuration Database (Base de données), choisissez Edit (Modifier).

  5. Choisissez un moteur de base de données, puis saisissez un nom d'utilisateur et un mot de passe.

  6. Pour enregistrer les modifications, cliquez sur Appliquer en bas de la page.

L'ajout d'une instance DB prend environ 10 minutes. Une fois la mise à jour de l'environnement terminée, le nom d'hôte de l'instance DB et les autres informations de connexion sont disponibles dans votre application, via les propriétés d'environnement suivantes :

Nom de la propriété Description Valeur de la propriété

RDS_HOSTNAME

Nom d'hôte de l'instance DB.

Sous l'onglet Connectivity & security (Connectivité et sécurité) de la console Amazon RDS : Endpoint (Point de terminaison).

RDS_PORT

Port sur lequel l'instance de base de données accepte des connexions. La valeur par défaut varie selon les moteurs de base de données.

Sous l'onglet Connectivity & security (Connectivité et sécurité) de la console Amazon RDS : Port.

RDS_DB_NAME

Nom de la base de données, ebdb.

Sous l'onglet Configuration de la console Amazon RDS : DB Name (Nom de base de données).

RDS_USERNAME

Nom d'utilisateur que vous avez configuré pour votre base de données.

Sous l'onglet Configuration de la console Amazon RDS : Master username (Identifiant principal).

RDS_PASSWORD

Mot de passe que vous avez configuré pour votre base de données.

Non disponible pour référence dans la console Amazon RDS.

Pour de plus amples informations sur la configuration d'une instance de base de données interne, veuillez consulter Ajout d'une base de données à votre environnement Elastic Beanstalk. Pour de plus amples informations sur la configuration d'une base de données externe à utiliser avec Elastic Beanstalk, veuillez consulter Utilisation d'Elastic Beanstalk avec Amazon RDS.

Pour vous connecter à la base de données, ajoutez le fichier JAR du pilote approprié à votre application, chargez la classe de pilote dans votre code et créez un objet de connexion avec les propriétés d'environnement fournies par Elastic Beanstalk.

Téléchargement du pilote JDBC

Vous avez besoin du fichier JAR du pilote JDBC pour le moteur de base de données que vous choisissez. Enregistrez le fichier JAR dans votre code source et incluez-le dans votre chemin de classe lorsque vous compilez la classe qui crée les connexions à la base de données.

Vous trouverez le pilote le plus récent pour votre moteur de base de données dans les emplacements suivants :

Pour utiliser le pilote JDBC, appelez Class.forName() afin de le charger avant de créer la connexion avec DriverManager.getConnection() dans votre code.

JDBC utilise une chaîne de connexion au format suivant :

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

Vous pouvez récupérer le nom d'hôte, le port, le nom de la base de données, le nom d'utilisateur et le mot de passe dans les variables d'environnement qu'Elastic Beanstalk fournit à votre application. Le nom du pilote est spécifique à votre type de base de données et à la version de votre pilote. Voici des exemples de noms de pilote :

  • mysql pour MySQL

  • postgresql pour PostgreSQL

  • oracle:thin pour Oracle Thin

  • oracle:oci pour Oracle OCI

  • oracle:oci8 pour Oracle OCI 8

  • oracle:kprb pour Oracle KPRB

  • sqlserver pour SQL Server

Connexion à une base de données (plateformes Java SE)

Dans un environnement Java SE, utilisez System.getenv() pour lire les variables de connexion à partir de l'environnement. L'exemple de code suivant montre une classe qui crée une connexion à une base de données 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; }

Connexion à une base de données (plateformes Tomcat)

Dans un environnement Tomcat, les propriétés de l'environnement sont fournies sous la forme de propriétés système auxquelles vous pouvez accéder via System.getProperty().

L'exemple de code suivant montre une classe qui crée une connexion à une base de données 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; }

Si vous rencontrez des difficultés pour obtenir une connexion ou exécuter des instructions SQL, essayez d'insérer le code suivant dans un fichier JSP. Ce code se connecte à une instance de base de données, crée une table et écrit dedans.

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

Pour afficher les résultats, insérez le code suivant dans le corps de la partie HTML du fichier JSP.

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

Résolution des problèmes de connexion à une base de données

Si vous rencontrez des problèmes pour vous connecter à une base de données à partir de votre application, consultez la base de données et le journal du conteneur web.

Examen des journaux

Vous pouvez afficher tous les journaux de votre environnement Elastic Beanstalk depuis Eclipse. Si la vue AWS Explorer n'est pas ouverte, sélectionnez la flèche à côté de l'icône AWS orange dans la barre d'outils, puis choisissez Show AWS Explorer View (Afficher la vue Explorateur AWS). Développez AWS Elastic Beanstalk et le nom de votre environnement, puis ouvrez le menu contextuel (clic droit) pour le serveur. Choisissez Open in WTP Server Editor (Ouvrir dans WTP Server Editor).

Choisissez l'onglet Log (Journal) de la vue Server (Serveur) afin de visualiser les journaux cumulés provenant de votre environnement. Pour ouvrir les journaux les plus récents, cliquez sur le bouton Refresh (Actualiser) dans l'angle supérieur droit de la page.

Faites défiler la page afin de trouver les journaux Tomcat dans /var/log/tomcat7/catalina.out. Si vous avez chargé plusieurs fois la page web issue de notre exemple précédent, les données ci-dessous devraient s'afficher :

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

Toutes les informations envoyées par l'application à la sortie standard s'affichent dans le journal du conteneur web. Dans l'exemple précédent, l'application tente de créer la table à chaque chargement de la page. Cela se traduit par l'interception d'une exception SQL pour chaque chargement de page après le premier.

L'exemple qui précède est acceptable. Toutefois, dans des applications réelles, vous devez conserver vos définitions de base de données dans les objets de schéma, effectuer les transactions à partir des classes de modèle et coordonner les demandes avec des servlets contrôleurs.

Connexion à une instance DB RDS

Vous pouvez vous connecter directement à l'instance de base de données RDS dans votre environnement Elastic Beanstalk à l'aide de l'application cliente MySQL.

Commencez par ouvrir le groupe de sécurité dans votre instance DB RDS afin d'autoriser le trafic provenant de votre ordinateur.

  1. Ouvrez la console Elastic Beanstalk et, dans la liste Regions (Régions), sélectionnez votre Région AWS.

  2. Dans le panneau de navigation, choisissez Environments (Environnements), puis choisissez le nom de votre environnement dans la liste.

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

  3. Dans le panneau de navigation, choisissez Configuration.

  4. Dans la catégorie de configuration Database (Base de données), choisissez Edit (Modifier).

  5. À côté de l'option Endpoint (Point de terminaison), choisissez le lien de la console Amazon RDS.

  6. Sur la page des détails de l'instance RDS Dashboard (Tableau de bord RDS), sous Security and Network (Sécurité et réseau), sélectionnez le groupe de sécurité commençant par rds- en regard de Security Groups (Groupes de sécurité).

    Note

    La base de données peut comporter plusieurs entrées associées au libellé Security Groups (Groupes de sécurité). Utilisez le premier, qui commence par awseb, uniquement si vous avez un compte plus ancien qui n'a pas d'Amazon Virtual Private Cloud (Amazon VPC) par défaut.

  7. Dans Security group details (Détails du groupe de sécurité), cliquez sur l'onglet Inbound (Entrant), puis choisissez Edit (Modifier).

  8. Ajoutez une règle pour MySQL (port 3306) qui autorise le trafic provenant de votre adresse IP, spécifiée au format CIDR.

  9. Choisissez Enregistrer. Les modifications prennent effet immédiatement.

Revenez sur la page des détails de configuration Elastic Beanstalk pour votre environnement et notez le point de terminaison. Vous devrez utiliser le nom de domaine pour vous connecter à l'instance DB RDS.

Installez le client MySQL et lancez une connexion à la base de données sur le port 3306. Sous Windows, installez MySQL Workbench à partir de la page d'accueil MySQL et suivez les instructions.

Sous Linux, installez le client MySQL en utilisant le gestionnaire de package correspondant à votre distribution. L'exemple suivant fonctionne sur Ubuntu et d'autres dérivés 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 ...

Une fois connecté, vous pouvez exécuter les commandes SQL pour afficher l'état de la base de données, savoir si vos tables et vos lignes ont été créées, et obtenir d'autres informations.

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