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 プロジェクト]を選択します。
任意のプロジェクト名を設定し、右下の[完了]をクリックします。
ExcelCreator for Javaの使用準備
src/main/webapp/WEB-INF/libフォルダにExcelCreator for Javaのjarファイルを格納します。
プログラムの実装
Excelファイルを新規で作成するプログラムを実装していきます。
サーブレットの作成
パッケージ・エクスプローラーにて、プロジェクトを右クリック - [新規] > [その他]を選択します。
[Web] > [サーブレット]を選択し、右下の[次へ]をクリックします。
任意のクラス名を設定し、右下の[次へ]をクリックします。
デフォルトのまま[次へ]をクリックします。
"どのメソッド・スタブを作成しますか?"の項目で[doGet]のチェックを外します。
その他はチェックを入れたまま右下の[完了]をクリックします。
サーブレットの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ファイルに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 ファイル]を選択し、右下の[次へ]をクリックします。
"宛先"の項目で任意の場所にROOT.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"]
Amazon ECRにDockerイメージをプッシュする
リポジトリの作成
Amazon ECR上にプライベートリポジトリを作成します。
Amazon ECRのトップ画面で[作成]をクリックします。
"リポジトリ名"に任意の名前を設定し、右下の[作成]をクリックします。
Dockerイメージのプッシュ
リポジトリの作成が完了すると、リポジトリ一覧に表示されます。
作成したリポジトリを選択し、[プッシュコマンドを表示]をクリックしてイメージプッシュ用のコマンドを表示させます。
「MacOS/Linux」と「Windows」の2つのタブが表示されますが、AWS CLIを使用する場合、「MacOS/Linux」タブを選択します。
また、各コマンド実行の前に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をコピーしておきます。
Amazon ECSにデプロイする
Amazon ECRにプッシュしたイメージをもとにAmazon ECSにデプロイを行っていきます。
タスク定義
タスク定義を作成します。
タスク定義画面上の[新しいタスク定義の作成]をクリックします。
各項目を設定し、[作成]をクリックしてタスク定義を作成します。
・タスク定義の設定
- タスク定義ファミリー:ecjsample-aws-ecs
・インフラストラクチャの要件
- 起動タイプ:AWS Fargate
- オペレーティングシステム/アーキテクチャ:Linux/X86_64
- CPU::1 vCPU
- メモリ:3 GB
・コンテナ -1
- 名前:ecjsample-aws-ecs
- イメージURL:プライベートリポジトリの画面でコピーしたURI
- ポートマッピング - コンテナポート:8080
その他の設定は任意です、必要に応じて設定してください。
タスク定義の一覧に作成したタスク定義名が表示されれば作成は完了です。
クラスターの作成
次にクラスターを作成していきます。
クラスター画面上の[クラスターの作成]をクリックします。
各項目を設定し、[作成]をクリックしてクラスターを作成します。
その他の設定は任意です、必要に応じて設定してください。
クラスターの一覧に作成したクラスター名が表示されれば作成は完了です。
サービスの作成
作成したクラスター上にサービスを作成します。
クラスター画面上[サービス] > [作成]をクリックします。
各項目を設定し、[作成]をクリックしてサービスを作成します。
・環境
- コンピューティングオプション:起動タイプ
- 起動タイプ:Fargate
・デプロイ設定
- アプリケーションタイプ:サービス
- ファミリー:作成したタスク定義を設定(ecjsample-aws-ecs)
- サービス名:任意のサービス名を設定(ecjsample-aws-ecs)
- 必要なタスク:1(*1)
- アベイラビリティーゾーンの再調整:OFF
・ネットワーキング
- セキュリティグループ:新しいセキュリティグループの作成
- ポート範囲:8080
- ソース:Anywhere
- パブリックIP:ON
(*1)サービス起動を確認後、[サービスを更新] > [必要なタスク]でタスク数を"0"にしておきます。タスク数が"0"以外の場合、サービスを停止しても再起動してしまいます。
デプロイ結果の確認
サービスが起動したらサービスの詳細画面上からタスクを選択し、 タスクの概要画面に移動します。
画面下部の「コンテナの詳細」内にある[ネットワークバインド]から外部リンクを探し、 オープンアドレスをクリックします。
アプリケーションがWebブラウザで表示されれば、正常に動作しています。
ボタンをクリックし、Excelファイルが出力されることを確認します。
ダウンロードしたExcelファイルを開くと、Sheet1のA1セルにプログラムから設定した値が反映されていることが確認できます。
さいごに
ExcelCreator for Javaを組み込んだWebアプリケーションを作成し、Amazon ECSにデプロイするまでを解説してきました。
今回は以上です、ありがとうございました。