Ajouter une instance Amazon RDS DB à votre environnement Java Elastic Beanstalk - 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.

Ajouter une instance Amazon RDS DB à votre environnement Java Elastic Beanstalk

Cette rubrique fournit des instructions pour créer un Amazon à RDS l'aide de la console Elastic Beanstalk. Vous pouvez utiliser une instance de base de données Amazon Relational Database Service (RDSAmazon) pour stocker les données collectées et modifiées par votre application. 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 vérifiez que votre application peut s'y connecter.

Pour ajouter une instance DB à votre environnement
  1. Ouvrez la console Elastic Beanstalk, puis dans la liste des 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.

Dans l'onglet Connectivité et sécurité de la RDS console Amazon : Endpoint.

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.

Dans l'onglet Connectivité et sécurité de la RDS console Amazon : Port.

RDS_DB_NAME

Nom de la base de données, ebdb.

Dans l'onglet Configuration de la RDS console Amazon : Nom de la base de données.

RDS_USERNAME

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

Dans l'onglet Configuration de la RDS console Amazon : Nom d'utilisateur principal.

RDS_PASSWORD

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

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

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 JAR fichier de 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 JDBC pilote

Vous aurez besoin du JAR fichier du JDBC pilote du moteur de base de données que vous aurez choisi. Enregistrez le JAR fichier dans votre code source et incluez-le dans votre chemin de classe lorsque vous compilez la classe qui crée des 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 JDBC pilote, appelez Class.forName() pour le charger avant de créer la connexion DriverManager.getConnection() dans votre code.

JDBCutilise 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 :

  • mysqlpour My SQL

  • postgresqlpour Postgre SQL

  • oracle:thin pour Oracle Thin

  • oracle:ocipour Oracle OCI

  • oracle:oci8pour Oracle OCI 8

  • oracle:kprbpour Oracle KPRB

  • sqlserverpour SQL serveur

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 SQL base de données Postgre.

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 SQL base de données 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 vous ne parvenez pas à établir une connexion ou à exécuter SQL des instructions, essayez de placer le code suivant dans un JSP fichier. 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, placez le code suivant dans le corps de la HTML partie du JSP fichier.

<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 Explorateur n'est pas ouverte, cliquez sur la flèche située à côté de l' AWS icône orange dans la barre d'outils, puis choisissez Afficher la vue AWS Explorateur. Développez AWS Elastic Beanstalk et le nom de votre environnement, puis ouvrez le menu contextuel (clic droit) pour le serveur. Choisissez Ouvrir dans l'éditeur WTP de serveur.

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 entraîne l'interception d'une SQL exception à chaque chargement de page après le premier chargement.

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 de base de données RDS

Vous pouvez vous connecter directement à l'RDSinstance de base de données dans votre environnement Elastic Beanstalk à l'aide de l'application My client. SQL

Ouvrez d'abord le groupe de sécurité sur votre RDS instance de base de données pour autoriser le trafic en provenance de votre ordinateur.

  1. Ouvrez la console Elastic Beanstalk, puis dans la liste des 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 Endpoint, choisissez le lien de RDS la console Amazon.

  6. Sur la page des détails de l'instance du tableau de RDSbord, sous Sécurité et réseau, choisissez le groupe de sécurité commençant par rds- à côté de 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 possédez un ancien compte qui ne possède pas d'Amazon Virtual Private Cloud (Amazon) par défaut. VPC

  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 My SQL (port 3306) qui autorise le trafic provenant de votre adresse IP, spécifiée dans le CIDR format.

  9. Choisissez Save (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 utiliserez le nom de domaine pour vous connecter à l'RDSinstance de base de données.

Installez My SQL client et établissez une connexion à la base de données sur le port 3306. Sur Windows, installez My SQL Workbench depuis la page d'SQLaccueil de My Workbench et suivez les instructions.

Sous Linux, installez le SQL client My à l'aide du gestionnaire de packages de 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 des SQL commandes pour connaître l'état de la base de données, savoir si vos tables et lignes ont été créées, ainsi que d'autres informations.

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