Déploiement des applications Java - AWS OpsWorks

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.

Déploiement des applications Java

Important

Le AWS OpsWorks Stacks service a atteint sa fin de vie le 26 mai 2024 et a été désactivé pour les nouveaux clients et les clients existants. Nous recommandons vivement aux clients de migrer leurs charges de travail vers d'autres solutions dès que possible. Si vous avez des questions sur la migration, contactez l' AWS Support équipe sur AWS Re:Post ou via le AWS Support Premium.

Les rubriques suivantes décrivent comment déployer des applications sur les instances d'une couche Java App Server. Les exemples concernent des applications JSP, mais vous pouvez, pour l'essentiel, utiliser la même procédure pour installer d'autres types d'applications Java.

Vous pouvez déployer des pages JSP à partir de n'importe lequel des référentiels pris en charge. Si vous souhaitez déployer des fichiers WAR, notez que AWS OpsWorks Stacks extrait automatiquement les fichiers WAR déployés depuis une archive Amazon S3 ou HTTP, mais pas depuis un dépôt Git ou Subversion. Si vous souhaitez utiliser Git ou Subversion pour les fichiers WAR, vous pouvez effectuer l'une des actions suivantes :

  • Stocker l'archive extraite dans le référentiel.

  • Stocker le fichier WAR dans le référentiel et utiliser un hook de déploiement Chef pour extraire l'archive, comme décrit dans l'exemple suivant.

Vous pouvez utiliser les raccordements de déploiement Chef pour exécuter les applications Ruby fournies par l'utilisateur sur une instance à n'importe laquelle des quatre étapes du déploiement. Le nom de l'application détermine l'étape. Voici un exemple d'application Ruby nommée before_migrate.rb, qui extrait un fichier WAR déployé à partir d'un référentiel Git ou Subversion. Comme le nom associe l'application au hook de déploiement Checkout, il s'exécute au début de l'opération de déploiement, une fois que le code a été vérifié, mais avant la migration. Pour plus d'informations sur l'utilisation de cet exemple, consultez Utilisation des raccordements de déploiement Chef.

::Dir.glob(::File.join(release_path, '*.war')) do |archive_file| execute "unzip_#{archive_file}" do command "unzip #{archive_file}" cwd release_path end end
Note

Lorsque vous déployez une mise à jour sur une application JSP, il est possible que Tomcat ne reconnaisse pas la mise à jour et continue à exécuter la version d'application existante. Cela peut se produire, par exemple, si vous déployez votre application en tant que fichier .zip qui contient uniquement une page JSP. Afin de garantir que Tomcat exécute la version la plus récemment déployée, le répertoire racine du projet doit inclure un répertoire WEB-INF qui contient un fichier web.xml. Un fichier web.xml peut contenir une grande variété de contenus, mais ce qui suit est suffisant pour veiller à ce que Tomcat reconnaisse les mises à jour et exécute la version d'application actuellement déployée. Vous n'avez pas à changer la version pour chaque mise à jour. Tomcat reconnaît la mise à jour même si la version n'a pas changé.

<context-param> <param-name>appVersion</param-name> <param-value>0.1</param-value> </context-param>

Déploiement d'une application JSP

Pour déployer une application JSP, spécifiez le nom et le référentiel. Vous pouvez aussi, le cas échéant, spécifier des domaines et des paramètres SSL. Pour plus d'informations sur la création d'une application, consultez Ajout d'applications. La procédure suivante explique comment créer et déployer une page JSP simple à partir d'une archive Amazon S3 publique. Pour plus d'informations sur l'utilisation d'autres types de référentiels, y compris les archives privées Amazon S3, consultezSource de l'application.

L'exemple suivant montre la page JSP, qui affiche simplement quelques informations système.

<%@ page import="java.net.InetAddress" %> <html> <body> <% java.util.Date date = new java.util.Date(); InetAddress inetAddress = InetAddress.getLocalHost(); %> The time is <% out.println( date ); out.println("<br>Your server's hostname is "+inetAddress.getHostName()); %> <br> </body> </html>
Note

La procédure suivante suppose que vous maîtrisiez déjà les bases de la création de piles, d'ajout d'instances aux couches, et ainsi de suite. Si vous utilisez AWS OpsWorks Stacks pour la première fois, vous devriez d'abord voirMise en route des piles Linux Chef 11.

Pour déployer une page JSP à partir d'une archive Amazon S3
  1. Créez une pile avec une couche Java App Server, ajoutez une instance 24 h/24 et 7 j/7 à la couche et démarrez-la.

  2. Copiez le code dans un fichier nommé simplejsp.jsp, placez le fichier dans un dossier nommé simplejsp et créez une archive .zip du dossier. Les noms sont arbitraires ; vous pouvez utiliser n'importe quels noms de fichier ou de dossier de votre choix. Vous pouvez aussi utiliser d'autres types d'archive, y compris gzip, bzip2, tarball ou Java WAR. Notez que AWS OpsWorks Stacks ne prend pas en charge les archives non compressées. Pour déployer plusieurs pages JSP, incluez-les dans la même archive.

  3. Téléchargez l'archive dans un compartiment Amazon S3 et rendez le fichier public. Copiez l'URL du fichier pour une utilisation ultérieure. Pour plus d'informations sur la création de compartiments et le chargement des fichiers, consultez Mise en route avec Amazon Simple Storage Service.

  4. Ajoutez une application à la pile et spécifiez les paramètres suivants :

    • NomSimpleJSP

    • Type d'applicationJava

    • Type de référentielHttp Archive

    • URL du référentiel : URL Amazon S3 de votre fichier d'archive.

    Utilisez les valeurs par défaut pour les paramètres restants, puis cliquez sur Ajouter une application pour créer l'application.

  5. Déployez l'application sur l'instance Java App Server.

Vous pouvez désormais accéder à l'URL de l'application et afficher l'application. Si vous n'avez pas spécifié de domaine, vous pouvez créer une URL en utilisant l'adresse IP publique de l'instance ou son nom DNS public. Pour obtenir l'adresse IP publique ou le nom DNS public d'une instance, accédez à la console AWS OpsWorks Stacks et cliquez sur le nom de l'instance sur la page Instances pour ouvrir sa page de détails.

Le reste de l'URL dépend du nom abrégé de l'application, qui est un nom en minuscules généré par AWS OpsWorks Stacks à partir du nom de l'application que vous avez spécifié lors de sa création. Par exemple, le nom court de SimpleJSP est simplejsp. Vous pouvez obtenir le nom court d'une application à partir de la page des détails.

  • Si le nom court est root, vous pouvez utiliser http://public_DNS/appname.jsp ou http://public_IP/appname.jsp.

  • Sinon, vous pouvez utiliser http://public_DNS/app_shortname/appname.jsp ou http://public_IP/app_shortname/appname.jsp.

Si vous avez spécifié un domaine pour l'application, l'URL est http://domain/appname.jsp.

L'URL de l'exemple doit ressembler à quelque chose comme http://192.0.2.0/simplejsp/simplejsp.jsp.

Si vous souhaitez déployer plusieurs applications sur la même instance, vous ne devez pas utiliser root comme nom court. Il peut s'ensuivre des conflits d'URL qui empêchent que l'application ne fonctionne correctement. Au lieu de cela, attribuez un nom de domaine différent à chaque application.

Déploiement d'une application JSP avec une base de données principale

Les pages JSP peuvent utiliser un objet JDBC DataSource pour se connecter à une base de données principale. Vous créez et déployez une telle application à l'aide de la procédure de la section précédente, avec une étape supplémentaire pour configurer la connexion.

La page JSP suivante montre comment se connecter à un objet DataSource.

<html> <head> <title>DB Access</title> </head> <body> <%@ page language="java" import="java.sql.*,javax.naming.*,javax.sql.*" %> <% StringBuffer output = new StringBuffer(); DataSource ds = null; Connection con = null; Statement stmt = null; ResultSet rs = null; try { Context initCtx = new InitialContext(); ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/mydb"); con = ds.getConnection(); output.append("Databases found:<br>"); stmt = con.createStatement(); rs = stmt.executeQuery("show databases"); while (rs.next()) { output.append(rs.getString(1)); output.append("<br>"); } } catch (Exception e) { output.append("Exception: "); output.append(e.getMessage()); output.append("<br>"); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (con != null) { con.close(); } } catch (Exception e) { output.append("Exception (during close of connection): "); output.append(e.getMessage()); output.append("<br>"); } } %> <%= output.toString() %> </body> </html>

AWS OpsWorks Stacks crée et initialise l'DataSourceobjet, le lie à un nom logique et enregistre le nom auprès d'un service de dénomination Java Naming and Directory Interface (JNDI). Le nom logique complet est java:comp/env/user-assigned-name. Vous devez spécifier la partie du nom assignée par l'utilisateur en ajoutant des attributs personnalisés JSON aux attributs de configuration et de déploiement de la pile pour définir l'attribut ['opsworks_java']['datasources'], comme décrit dans ce qui suit.

Pour déployer une page JSP qui se connecte à une base de données MySQL
  1. Créez une pile avec une couche Java App Server, ajoutez des instances 24 h/24 et 7 j/7 à chaque couche, puis démarrez-la.

  2. Ajoutez une couche base de données à la pile. Les détails dépendent de la base de données que vous utilisez.

    Pour utiliser une instance MySQL dans cet exemple, ajoutez une couche MySQL à la pile, ajoutez une instance 24 h/24 et 7 j/7 à la couche et démarrez-la.

    Pour utiliser une instance Amazon RDS (MySQL) dans l'exemple, procédez comme suit :

    • Spécifiez un moteur de base de données MySQL pour l'instance.

    • Attribuez les groupes de sécurité AWS- OpsWorks -DB-Master-Server (security_group_id) et AWS- OpsWorks -Java-App-Server (security_group_id) à l'instance. AWS OpsWorks Stacks crée ces groupes de sécurité pour vous lorsque vous créez votre première pile dans la région.

    • Créez une base de données nommée simplejspdb.

    • Assurez-vous que le nom et le mot de passe de l'utilisateur principal ne contiennent pas le caractère & ou autres caractères susceptibles d'entraîner une erreur Tomcat.

      En particulier, au moment du démarrage Tomcat doit analyser le fichier de contexte d'application web, lequel est un fichier XML incluant le nom d'utilisateur principal et le mot de passe principal. Si l'une ou l'autre des chaînes inclut un caractère &, l'analyseur XML le traite comme une entité XML mal formée et lève une exception d'analyse, ce qui empêche le démarrage de Tomcat. Pour plus d'informations sur le fichier de contexte d'application web, consultez tomcat::context.

    • Ajoutez un pilote MySQL à la couche Java App Server.

    • Enregistrez l'instance RDS auprès de votre pile.

    Pour plus d'informations sur l'utilisation des instances Amazon RDS avec AWS OpsWorks Stacks, consultez. Couche de service Amazon RDS

  3. Copiez l'exemple de code dans un fichier nommé simplejspdb.jsp, placez le fichier dans un dossier nommé simplejspdb et créez une archive .zip du dossier. Les noms sont arbitraires ; vous pouvez utiliser n'importe quels noms de fichier ou de dossier de votre choix. Vous pouvez également utiliser d'autres types d'archives, y compris gzip, bzip2 et tarball. Pour déployer plusieurs pages JSP, incluez-les dans la même archive. Pour plus d'informations sur le déploiement d'applications à partir d'autres types de référentiel, consultez Source de l'application.

  4. Téléchargez l'archive dans un compartiment Amazon S3 et rendez le fichier public. Copiez l'URL du fichier pour une utilisation ultérieure. Pour plus d'informations sur la création de compartiments et le chargement des fichiers, consultez Mise en route avec Amazon Simple Storage Service.

  5. Ajoutez une application à la pile et spécifiez les paramètres suivants :

    • NomSimpleJSPDB

    • Type d'applicationJava

    • Type de source de donnéesOpsWorks(pour une instance MySQL) ou RDS (pour une instance Amazon RDS).

    • Instance de base de données — L'instance MySQL que vous avez créée précédemment, généralement nommée db-master1 (mysql), ou l'instance Amazon RDS, qui sera nommée DB_Instance_name (mysql).

    • Nom de la base de donnéessimplejspdb.

    • Type de référentielHttp Archive

    • URL du référentiel : URL Amazon S3 de votre fichier d'archive.

    Utilisez les valeurs par défaut pour les paramètres restants, puis cliquez sur Ajouter une application pour créer l'application.

  6. Ajoutez les attributs suivants du JSON personnalisé aux attributs de configuration de la pile, où simplejspdb correspond au nom court de l'application.

    { "opsworks_java": { "datasources": { "simplejspdb": "jdbc/mydb" } } }

    AWS OpsWorks Stacks utilise ce mappage pour générer un fichier de contexte contenant les informations de base de données nécessaires.

    Pour plus d'informations sur l'ajout d'attributs de JSON personnalisé aux attributs de configuration de la pile, consultez Utilisation du JSON personnalisé.

  7. Déployez l'application sur l'instance Java App Server.

Vous pouvez désormais utiliser l'URL de l'application pour afficher l'application elle-même. Pour une description de la construction de l'URL, consultez Déploiement d'une application JSP.

L'URL de l'exemple doit ressembler à quelque chose comme http://192.0.2.0/simplejspdb/simplejspdb.jsp.

Note

L'attribut datasources peut contenir plusieurs attributs. Chaque attribut est nommé avec un nom court d'application et défini avec la partie appropriée, assignée par l'utilisateur, d'un nom logique. Si vous avez plusieurs applications, vous pouvez utiliser des noms logiques distincts, ce qui nécessite un JSON personnalisé tel que celui qui suit.

{ "opsworks_java": { "datasources": { "myjavaapp": "jdbc/myappdb", "simplejsp": "jdbc/myjspdb", ... } } }