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

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

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

重要

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

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

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

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

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

Chef デプロイメントフックを使用すると、4 つのデプロイメントステージのうちの任意のステージのインスタンスでユーザー提供の Ruby アプリケーションを実行できます。アプリケーション名によってステージが決まります。以下は、Git または Subversion リポジトリからデプロイされたWARファイルを抽出するbefore_migrate.rb、 という名前の Ruby アプリケーションの例です。アプリケーションは、名前によって 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
注記

JSP アプリに更新をデプロイすると、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

    • リポジトリ URL — URLアーカイブファイルの Amazon S3。

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

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

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

残りの部分は、アプリケーションの短縮名URL、つまり AWS OpsWorks スタックは、アプリケーションの作成時に指定したアプリケーション名から を生成します。例えば、Simple JSPの短縮名は 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 ページは、JDBCDataSourceオブジェクトを使用してバックエンドデータベースに接続できます。このようなアプリケーションを作成およびデプロイするには、前のセクションの手順を使用しますが、接続をセットアップするステップが 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 です。以下に示すように、カスタムJSON属性をスタック設定とデプロイ属性に追加して['opsworks_java']['datasources']属性を定義し、名前のユーザー割り当て部分を指定する必要があります。

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

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

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

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

    • インスタンスの 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」を参照してください。

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

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

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

  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 (My SQLインスタンスの場合) または RDS (Amazon RDSインスタンスの場合)。

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

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

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

    • リポジトリ URL — URLアーカイブファイルの Amazon S3。

    残りの設定にはデフォルト値を使用し、[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", ... } } }