AdvanceSoftware Tech Blog

アドバンスソフトウェア株式会社の技術ブログ

ExcelCreator for JavaをWebアプリに組み込みAmazon ECS(AWS Fargate)にデプロイする

ExcelCreator for Javaでは、動作保証を行っている環境AWS(Amazon Web Services)が含まれています。
本記事ではExcelCreator for Javaを組み込んだWebアプリケーションを作成し、Amazon ECS(Elastic Container Service)にデプロイするまでの流れを解説します。

環境

実行環境

Amazon ECS

開発環境

ツール

Webアプリケーションの作成

初めにExcelCreator for Javaを組み込んだWebアプリケーションを作成していきます。

動的Webプロジェクトの作成

Eclipse 2022を起動し、上部メニューから[ファイル] > [新規] > [動的 Web プロジェクト]を選択します。

動的Webプロジェクトの選択
動的Webプロジェクトの選択

任意のプロジェクト名を設定し、右下の[完了]をクリックします。

新規動的Webプロジェクト
新規動的Webプロジェクト

ExcelCreator for Javaの使用準備

src/main/webapp/WEB-INF/libフォルダにExcelCreator for Javaのjarファイルを格納します。

ExcelCreator for Javaのjarファイルを格納
ExcelCreator for Javaのjarファイルを格納

プログラムの実装

Excelファイルを新規で作成するプログラムを実装していきます。

サーブレットの作成

パッケージ・エクスプローラーにて、プロジェクトを右クリック - [新規] > [その他]を選択します。

サーブレット新規作成
サーブレット新規作成

[Web] > [サーブレット]を選択し、右下の[次へ]をクリックします。

サーブレットを選択
サーブレットを選択

任意のクラス名を設定し、右下の[次へ]をクリックします。

クラス名の設定
クラス名の設定

デフォルトのまま[次へ]をクリックします。

サーブレット情報
サーブレット情報

"どのメソッド・スタブを作成しますか?"の項目で[doGet]のチェックを外します。
その他はチェックを入れたまま右下の[完了]をクリックします。

作成するメソッド・スタブの選択
作成するメソッド・スタブの選択

サーブレットjavaファイルが作成されます。

作成されたサーブレットのjavaファイル
作成されたサーブレットjavaファイル

作成したjavaファイルにExcelファイルを新規作成するプログラムを実装します。

プログラムの実装
プログラムの実装

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jp.co.adv.excelcreator.enums.ExcelVersion;

/**
 * Servlet implementation class CreateExcelFileServlet
 */
@WebServlet("/CreateExcelFileServlet")
public class CreateExcelFileServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
    * @see HttpServlet#HttpServlet()
    */
    public CreateExcelFileServlet() {
        super();
    }

    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        jp.co.adv.excelcreator.Creator creator = new jp.co.adv.excelcreator.Creator();
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        // シート数:1、Excel バージョン:2021 で Excel ファイルを新規作成し、ストリームに出力します。
        creator.createBook(byteArrayOutputStream, 1, ExcelVersion.ver2021);
        creator.getCell("A1").setValue("Amazon ECS 上で ExcelCreator を使用し Excel ファイルを作成");
        creator.closeBook(true);
        byte[] excel = byteArrayOutputStream.toByteArray();
        byteArrayOutputStream.close();
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setContentLength((int) excel.length);
        response.setHeader("Content-Disposition", "attachment; filename=\"ecjsample.aws.ecs.xlsx\"");
        ServletOutputStream outputStream = response.getOutputStream();
        int length = 0;
        byte[] buf = new byte[1024];
        ByteArrayInputStream inputStream = new ByteArrayInputStream(excel);
        while ((inputStream != null) && ((length = inputStream.read(buf)) != -1)) {
            outputStream.write(buf, 0, length);
        }
        inputStream.close();
        outputStream.flush();
    }

}

JSPファイルの作成

パッケージ・エクスプローラーにて、プロジェクトを右クリック - [新規] > [その他]を選択後、[Web] > [JSP ファイル]を選択し、右下の[次へ]をクリックします。

JSPファイルの選択
JSPファイルの選択

任意のファイル名を設定し、右下の[完了]をクリックします。

ファイル名の設定
ファイル名の設定
作成されたJSPファイル
作成されたJSPファイル

作成したJSPファイルにExcelファイルダウンロード用のボタンを実装します。

プログラムの実装
プログラムの実装

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AdvanceSoftware</title>
</head>
<body>
    <div>
        <form id="form"
            action="<%=request.getContextPath()%>/CreateExcelFileServlet"
            method="post">
            <button type="submit">Excel ファイル作成</button>
        </form>
    </div>
    <hr />
</body>
</html>


プログラムの実装は以上です。
実際にプロジェクトを実行すると新規作成したExcelファイルがダウンロードされる動きを確認できます。

プロジェクト実行
プロジェクト実行

WARファイルの作成

作成したプロジェクトをWARファイルへエクスポートします。

パッケージ・エクスプローラーにて、プロジェクトを右クリック - [エクスポート]を選択します。

エクスポートの選択
エクスポートの選択

[Web] > [WAR ファイル]を選択し、右下の[次へ]をクリックします。

WARファイルの選択
WARファイルの選択

"宛先"の項目で任意の場所にROOT.warの名前でWARファイルとしてエクスポートします。

WARファイルとしてエクスポート
WARファイルとしてエクスポート
エクスポート結果
エクスポート結果

Amazon ECSにデプロイする

Amazon ECSへのデプロイを行っていきます。

Dockerfileの作成

Dockerfileを以下の内容で作成します。

FROM tomcat:9.0-jdk17
ADD ROOT.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh", "run"]

Dockerfileの作成
Dockerfileの作成

Amazon ECRにDockerイメージをプッシュする

リポジトリの作成

Amazon ECR上にプライベートリポジトリを作成します。

Amazon ECRのトップ画面で[作成]をクリックします。

リポジトリの作成
リポジトリの作成

"リポジトリ"に任意の名前を設定し、右下の[作成]をクリックします。

プライベートリポジトリを作成する
プライベートリポジトリを作成する

Dockerイメージのプッシュ

リポジトリの作成が完了すると、リポジトリ一覧に表示されます。
作成したリポジトリを選択し、[プッシュコマンドを表示]をクリックしてイメージプッシュ用のコマンドを表示させます。

プッシュコマンドを表示
プッシュコマンドを表示
プッシュコマンド
プッシュコマンド

MacOS/Linux」と「Windows」の2つのタブが表示されますが、AWS CLIを使用する場合、「MacOS/Linux」タブを選択します。
また、各コマンド実行の前にDockerDesktopを起動しておきます。

DockerDesktop
DockerDesktop

1~4の各コマンドをコマンドプロンプト上で実行していきます。

1.認証情報を取得し、レジストリに対してDockerクライアントを認証します。

コマンド例:
(aws_account_id、regionは適宜置き換えが必要)

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com


2.Dockerイメージを構築します。

※ROOT.war、Dockerfileが格納されているディレクトリをカレントディレクトリにする必要があります。

コマンド例:

docker build -t ecjsample.aws.ecs .


3.イメージにタグを付けます。

コマンド例:
(aws_account_id、regionは適宜置き換えが必要)

docker tag ecjsample.aws.ecs:latest aws_account_id.dkr.ecr.region.amazonaws.com/ecjsample.aws.ecs:latest


4.イメージをプッシュします。

コマンド例:
(aws_account_id、regionは適宜置き換えが必要)

docker push aws_account_id.dkr.ecr.region.amazonaws.com/ecjsample.aws.ecs:latest


イメージをプッシュ後、Amazon ECRのリポジトリを確認します。

一覧にイメージが追加されていれば成功です。

イメージ一覧
イメージ一覧

また、「プライベートリポジトリ」の画面でリポジトリ名の横に表示されているURIをコピーしておきます。

URIのコピー
URIのコピー

Amazon ECSにデプロイする

Amazon ECRにプッシュしたイメージをもとにAmazon ECSにデプロイを行っていきます。

タスク定義

タスク定義を作成します。

タスク定義画面上の[新しいタスク定義の作成]をクリックします。

新しいタスク定義の作成
新しいタスク定義の作成

各項目を設定し、[作成]をクリックしてタスク定義を作成します。

タスク定義の設定
タスク定義の設定

・タスク定義の設定

  • タスク定義ファミリー:ecjsample-aws-ecs

・インフラストラクチャの要件

・コンテナ -1

その他の設定は任意です、必要に応じて設定してください。

タスク定義の一覧に作成したタスク定義名が表示されれば作成は完了です。

タスク定義一覧
タスク定義一覧

クラスターの作成

次にクラスターを作成していきます。 クラスター画面上の[クラスターの作成]をクリックします。

クラスターの作成
クラスターの作成

各項目を設定し、[作成]をクリックしてクラスターを作成します。

クラスターの設定
クラスターの設定

その他の設定は任意です、必要に応じて設定してください。

クラスターの一覧に作成したクラスター名が表示されれば作成は完了です。

クラスター一覧
クラスター一覧

サービスの作成

作成したクラスター上にサービスを作成します。

クラスター画面上[サービス] > [作成]をクリックします。

サービスの作成
サービスの作成

各項目を設定し、[作成]をクリックしてサービスを作成します。

サービスの設定
サービスの設定

・環境

  • コンピューティングオプション:起動タイプ
  • 起動タイプ:Fargate

・デプロイ設定

  • アプリケーションタイプ:サービス
  • ファミリー:作成したタスク定義を設定(ecjsample-aws-ecs)
  • サービス名:任意のサービス名を設定(ecjsample-aws-ecs)
  • 必要なタスク:1(*1)
  • アベイラビリティーゾーンの再調整:OFF

・ネットワーキング

  • セキュリティグループ:新しいセキュリティグループの作成
  • ポート範囲:8080
  • ソース:Anywhere
  • パブリックIP:ON

(*1)サービス起動を確認後、[サービスを更新] > [必要なタスク]でタスク数を"0"にしておきます。タスク数が"0"以外の場合、サービスを停止しても再起動してしまいます。

デプロイ結果の確認

サービスが起動したらサービスの詳細画面上からタスクを選択し、 タスクの概要画面に移動します。

画面下部の「コンテナの詳細」内にある[ネットワークバインド]から外部リンクを探し、 オープンアドレスをクリックします。

オープンアドレス
オープンアドレス

アプリケーションがWebブラウザで表示されれば、正常に動作しています。
ボタンをクリックし、Excelファイルが出力されることを確認します。

デプロイ結果
デプロイ結果

ダウンロードしたExcelファイルを開くと、Sheet1のA1セルにプログラムから設定した値が反映されていることが確認できます。

ダウンロードしたExcelファイル
ダウンロードしたExcelファイル

さいごに

ExcelCreator for Javaを組み込んだWebアプリケーションを作成し、Amazon ECSにデプロイするまでを解説してきました。
今回は以上です、ありがとうございました。

ExcelCreator for Java製品ページはこちら
ExcelCreator for Java体験版はこちら

© 2022 Advance Software Co., Ltd. All Rights Reserved.