Java アプリケーションのデプロイ - AWS OpsWorks

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Java アプリケーションのデプロイ

重要

この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 AWS re:Post または AWS Premium Support を通じて AWS Support チームにお問い合わせください。

以下のトピックでは、Java アプリケーションサーバーレイヤーのインスタンスにアプリケーションをデプロイする方法について説明します。例は JSP アプリケーション用ですが、他の種類の Java アプリケーションのインストールにもほぼ同じ手順を使用できます。

サポートされている任意のリポジトリから JSP ページをデプロイできます。WAR ファイルをデプロイする場合、 AWS OpsWorks スタックは Amazon S3 または HTTP アーカイブからデプロイされた WAR ファイルを自動的に抽出しますが、Git または Subversion リポジトリからは抽出しないことに注意してください。WAR ファイルのために Git または Subversion を使用する場合は、次のいずれかの操作を行います。

  • 抽出されたアーカイブをリポジトリに保存します。

  • 次の例で示すように、WAR ファイルをリポジトリに保存し、Chef デプロイメントフックを使用してアーカイブを抽出します。

Chef デプロイメントフックを使用すると、4 つのデプロイメントステージのうちの任意のステージのインスタンスでユーザー提供の Ruby アプリケーションを実行できます。アプリケーション名によってステージが決まります。次の例では、Ruby アプリケーションの名前が before_migrate.rb です。このアプリケーションは、デプロイされた WAR ファイルを Git または Subversion リポジトリから抽出します。アプリケーションは、名前によって Checkout デプロイメントフックに関連付けられているので、デプロイメント操作の開始時に、コードのチェック後、移行の前に実行されます。この例を使用する方法の詳細については、「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
注記

JPS アプリケーションの更新プログラムをデプロイする際に、Tomcat は更新プログラムを認識せず、アプリケーションの既存のバージョンを継続して実行する可能性があります。これが発生するのは、JSP ページのみが含まれている .zip ファイルとしてアプリケーションをデプロイする場合などです。Tomcat が、デプロイされた最新バージョンを確実に実行するようにするには、プロジェクトのルートディレクトリに、web.xml ファイルを含む WEB-INF ディレクトリを含める必要があります。web.xml ファイルはさまざまなコンテンツを含むことができますが、Tomcat が確実に更新プログラムを認識し、現在デプロイされているアプリケーションのバージョンを実行するようにするには、次のコンテンツで十分です。各更新プログラムのバージョンを変更する必要はありません。Tomcat は、バージョンが変更されていない場合でも更新プログラムを認識します。

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

JSP アプリケーションのデプロイ

JSP アプリケーションをデプロイするには、名前とリポジトリ情報を指定します。また、オプションでドメインおよび SSL 設定を指定できます。アプリケーションの作成方法の詳細については、「アプリケーションの追加」を参照してください。次の手順は、公開の Amazon S3 アーカイブから、シンプルな JSP ページを作成およびデプロイする方法を示しています。プライベートの Amazon S3 アーカイブなど、他のリポジトリの種類の使用方法の詳細については、「Application Source」を参照してください。

次の例は、単にいくつかのシステム情報を表示する JSP ページを示しています。

<%@ 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>
注記

次の手順では、スタックの作成、レイヤーへのインスタンスの追加などの基本操作にすでに慣れていることを前提としています。 AWS OpsWorks スタックを初めて使用する場合は、まず「」を参照してくださいChef 11 Linux スタックの使用開始

Amazon S3 アーカイブから JSP ページをデプロイするには
  1. Java アプリケーションサーバーのレイヤーを持つスタックを作成 し、レイヤーに 24/7 のインスタンスを追加して起動します

  2. コードを simplejsp.jsp という名前のファイルにコピーし、ファイルを simplejsp という名前のフォルダに保存して、そのフォルダの .zip アーカイブを作成します。名前は任意です。ファイル名とフォルダ名を自由に指定できます。gzip、bzip2、tarball、Java WAR ファイルなど、他の種類のアーカイブも使用できます。 AWS OpsWorks スタックは非圧縮 tarball をサポートしていないことに注意してください。複数の JSP ページをデプロイするには、それらを同じアーカイブに含めます。

  3. Amazon S3 バケットにアーカイブをアップロードし、ファイルを公開します。後で使用できるように、ファイルの URL をコピーします。バケットの作成方法とファイルのアップロード方法の詳細については、「Amazon Simple Storage Service の使用開始」を参照してください。

  4. スタックにアプリケーションを追加し、次の設定を指定します。

    • 名前SimpleJSP

    • App type (アプリケーションタイプ) - Java

    • Repository type (リポジトリタイプ) – Http Archive

    • Repository URL (リポジトリのURL) – アーカイブファイルのAmazon S3 の URL。

    残りの設定にはデフォルト値を使用し、[Add App] をクリックしてアプリケーションを作成します。

  5. Java アプリケーションサーバーインスタンスにアプリケーションをデプロイします。

これで、アプリケーションの URL に移動し、アプリケーションを表示できます。ドメインを指定しなかった場合は、インスタンスのパブリック IP アドレスまたはパブリック DNS 名を使用して、URL を作成できます。インスタンスのパブリック IP アドレスまたはパブリック DNS 名を取得するには、 AWS OpsWorks スタックコンソールに移動し、インスタンスページでインスタンスの名前をクリックして、その詳細ページを開きます。

残りの URL は、アプリケーションの短縮名によって異なります。短縮名は、アプリケーションの作成時に指定したアプリケーション名から AWS OpsWorks スタックが生成する小文字名です。たとえば、SimpleJSP の短縮名は simplejsp です。アプリケーションの短縮名は、詳細ページで取得できます。

  • 短縮名が root である場合は、http://public_DNS/appname.jsp または http://public_IP/appname.jsp を使用できます。

  • それ以外の場合は、http://public_DNS/app_shortname/appname.jsp または http://public_IP/app_shortname/appname.jsp を使用できます。

アプリケーションのドメインを指定した場合、URL は http://domain/appname.jsp です。

たとえば、URL は http://192.0.2.0/simplejsp/simplejsp.jsp のようになります。

同じインスタンスに複数のアプリケーションをデプロイする場合は、短縮名として root を使用しないでください。使用すると URL の競合が発生し、アプリケーションが正しく動作しない場合があります。その代わりに、各アプリケーションに異なるドメイン名を割り当てます。

バックエンドデータベースでの JSP アプリケーションのデプロイ

JSP ページは、JDBC DataSource オブジェクトを使用して、バックエンドデータベースに接続できます。このようなアプリケーションを作成およびデプロイするには、前のセクションの手順を使用しますが、接続をセットアップするステップが 1 つ追加されます。

次の JSP ページは、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 スタックは、DataSourceオブジェクトを作成して初期化し、論理名にバインドして、その名前を Java 命名およびディレクトリインターフェイス (JNDI) 命名サービスに登録します。完全な論理名は、java:comp/env/user-assigned-name です。以下で説明するように、['opsworks_java']['datasources'] 属性を定義するために、スタック設定およびデプロイ属性にカスタム JSON 属性を追加して、名前のユーザー割り当て部分を指定する必要があります。

MySQL データベースに接続する JSP ページをデプロイするには
  1. Java アプリケーションサーバーのレイヤーを持つ スタックを作成し、各レイヤーに 24/7 インスタンスを追加して開始します

  2. スタックにデータベースレイヤーを追加します。詳細は、使用しているデータベースによって異なります。

    この例で MySQL インスタンスを使用するには、スタックにMySQL レイヤーを追加し、レイヤーに 24/7 インスタンスを追加して開始します

    この例で Amazon RDS (MySQL) インスタンスを使用するには:

    • インスタンスの MySQL データベースエンジンを指定します。

    • AWS-OpsWorks-DB-Master-Server (security_group_id ) および AWS-OpsWorks-Java-App-Server (security_group_id セキュリティグループをインスタンスに割り当てます。 AWS OpsWorks スタックは、リージョンで最初のスタックを作成するときに、これらのセキュリティグループを作成します。

    • simplejspdb という名前のデータベースを作成します。

    • マスターユーザー名とパスワードに & または Tomcat エラーの原因になる他の文字が含まれていないことを確認します。

      特に、起動中に Tomcat はウェブアプリケーションのコンテキストファイルを解析する必要があります。このファイルは、マスターパスワードとユーザー名を含む XML ファイルです。いずれかの文字列に & 記号が含まれる場合、XML パーサーはそれを不正な形式の XML エンティティとして扱い、解析の例外をスローします。その結果、Tomcat は起動できません。ウェブアプリケーションのコンテキストファイルの詳細については、「tomcat::context」を参照してください。

    • Java アプリケーションサーバーレイヤーにMySQL ドライバを追加します。

    • RDS インスタンスをスタックに登録します。

    AWS OpsWorks スタックで Amazon RDS インスタンスを使用する方法の詳細については、「」を参照してくださいAmazon RDS サービスレイヤー

  3. サンプルコードを simplejspdb.jsp という名前のファイルにコピーし、ファイルを simplejspdb という名前のフォルダに保存して、そのフォルダの .zip アーカイブを作成します。名前は任意です。ファイル名とフォルダ名を自由に指定できます。gzip、bzip2、tarball など、他の種類のアーカイブも使用できます。複数の JSP ページをデプロイするには、それらを同じアーカイブに含めます。他のリポジトリタイプのアプリケーションをデプロイする方法の詳細については、「Application Source」を参照してください。

  4. Amazon S3 バケットにアーカイブをアップロードし、ファイルを公開します。後で使用できるように、ファイルの URL をコピーします。バケットの作成方法とファイルのアップロード方法の詳細については、「Amazon Simple Storage Service の使用開始」を参照してください。

  5. スタックにアプリケーションを追加し、次の設定を指定します。

    • 名前SimpleJSPDB

    • App type (アプリケーションタイプ) - Java

    • データソースタイプOpsWorks (MySQL インスタンスの場合) または RDS (Amazon RDS インスタンスの場合)。

    • データベースインスタンス - 前に作成した MySQL インスタンスで、通常は db-master1(mysql) という名前ですが、Amazon RDS インスタンスでは DB_instance_name (mysql) という名前になります。

    • Database name (データベース名) – simplejspdb

    • Repository type (リポジトリタイプ) – Http Archive

    • Repository URL (リポジトリのURL) – アーカイブファイルのAmazon S3 の URL。

    残りの設定にはデフォルト値を使用し、[Add App] をクリックしてアプリケーションを作成します。

  6. 次のカスタム JSON 属性をスタック設定属性に追加します。ここで、simplejspdb はアプリケーションの短縮名です。

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

    AWS OpsWorks スタックはこのマッピングを使用して、必要なデータベース情報を含むコンテキストファイルを生成します。

    カスタム JSON 属性をスタック設定属性に追加する方法の詳細については、「カスタム JSON の使用」を参照してください。

  7. Java アプリケーションサーバーインスタンスにアプリケーションをデプロイ)します。

これで、アプリケーションの URL を使用してアプリケーションを表示できるようになりました。URL を作成する方法については、「JSP アプリケーションのデプロイ」を参照してください。

たとえば、URL は http://192.0.2.0/simplejspdb/simplejspdb.jsp のようになります。

注記

datasources 属性には、複数の属性を含めることができます。各属性はアプリケーションの短縮名によって名付けられ、論理名の適切なユーザー割り当て部分に設定されます。複数のアプリケーションがある場合は、個別の論理名を使用できます。そのためには、以下のようなカスタム JSON が必要です。

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