AdvanceSoftware Tech Blog

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

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

ExcelCreator12は動作保証を行っている環境の中にクラウドAWS(Amazon Web Services)が含まれています。

この記事では、Webアプリケーションをコンテナイメージ化して、AWSが提供するコンテナサービスのAmazon ECS(Elastic Container Service)へデプロイする方法について解説していきます。

本記事で利用するAmazon ECSおよびAmazon ECR(Elastic Container Registry)は有料のサービスです。
Amazon ECR上へコンテナイメージを置き続けたり、Amazon ECS上で作成したサービスを実行し続けると、継続的に料金が加算されますのでご注意ください。

環境

実行環境

開発環境

環境構築

コンテナイメージの作成、およびAWSへのデプロイに必要なソフトウェアをインストールします。

  • Docker Desktop
    Windowsインストーラーをダウンロードし、ローカル環境にインストールします。

  • AWS CLI
    Webブラウザで「AWS CLI」などで検索し、AWSサイトからAWS CLIインストーラーをダウンロードしてローカル環境にインストールします。
    AWS CLIを利用する為には、AWS CLIインストール後、認証の設定が必要となります。詳細な手順についてはAWSのWebサイト等でご確認ください。

Webアプリケーションを作成する

Excelファイルを生成しダウンロードする簡単なWebアプリを作成していきます。

新規プロジェクト(ASP.NET Core Web MVC)を作成する

Visual Studioを起動し、[新しいプロジェクト] > [ASP.NET Core Web アプリ(Model-View-Controller)]を選択後、任意のプロジェクト名を入力して[次へ]をクリックします。


追加情報を選択して[作成]をクリックします。

  • フレームワーク:.NET 6.0
  • コンテナーのサポートを有効にする
  • コンテナーOS:Linux
  • コンテナービルドの種類:Dockerfile

ExcelCreator12のインストール

プロジェクトにExcelCreator12をインストールします。
ソリューションエクスプローラーの[依存関係]を右クリックし、[NuGetパッケージの管理]を選択します。

パッケージソースにnuget.orgを指定し、検索ボックスで"AdvanceSoftware.ExcelCreator.Creator"と入力してパッケージファイルを検索します。
パッケージファイルがヒットしたら選択し、[インストール]ボタンをクリックしてインストールします。


プログラムの実装

[Controllers] > [HomeController.cs]にExcelファイル生成用のCreateExcelFileメソッドを追加します。

// Controllers/HomeController.cs
[HttpPost]
public IActionResult CreateExcelFile()
{
    System.IO.MemoryStream strmExcel = new System.IO.MemoryStream();
    // ExcelCretor で Excel ファイルを新規作成する処理 
    AdvanceSoftware.ExcelCreator.Creator creator1 = new AdvanceSoftware.ExcelCreator.Creator();
    // シート数:1、Excel バージョン:2021 で Excel ファイルを新規作成し、ストリームに出力します。
    creator1.CreateBook(strmExcel, 1, AdvanceSoftware.ExcelCreator.xlsxVersion.ver2021);
    creator1.Cell("A1").Value = "Amazon ECS 上で ExcelCreator を使用し Excel ファイルを作成";
    creator1.CloseBook(true);
    strmExcel.Close();
    return File(strmExcel.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Book1.xlsx");
}


次に[Views] > [Home] > [Index.cshtml]にExcelファイルのダウンロード用ボタンを追加します。

<!-- Views/Home/Index.cshtml -->
@{
    ViewData["Title"] = "Home Page";
}

@using (Html.BeginForm("CreateExcelFile", "Home"))
{
    <p><input type="submit" formmethod="post" value="Excel ファイル作成" /></p>
}
<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>


Dockerfileを編集する

Dockerfileの記述内容を下記のように編集します。

FROM ubuntu:22.04
WORKDIR /app

RUN apt-get update \
    && apt-get install -y aspnetcore-runtime-6.0 \
    && apt install -y libgdiplus

COPY ./publish/ /app/

EXPOSE 5000

ENTRYPOINT ["dotnet", "EC12WebAppSample.dll"]

Webアプリは以上で完成です。
なお、ここで作成したWebアプリのプロジェクトは以下のURLからダウンロードできます。

https://www.adv.co.jp/download/blog/deploy-excelcreator12-ecs/EC12WebAppSample.zip

Amazon ECSにデプロイする

作成したアプリケーションをAmazon ECSにデプロイする準備を行います。

フォルダーに発行

Visual Studio上で「発行」をクリックし、フォルダーにデプロイします。

今回は下記のようにプロファイルを編集してデプロイします。


Amazon ECRにコンテナイメージを配置する

リポジトリを作成する

コンテナイメージを配置するための格納場所として、Amazon ECR上にリポジトリを作成します。今回はプライベートリポジトリを作成します。

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

リポジトリ名を入力して[作成]をクリックします。(今回は「ec12webappsample」とします)

Dockerイメージをリポジトリにプッシュ(送信)する

リポジトリの作成が完了すると、リポジトリ一覧に表示されます。作成したリポジトリを選択(リポジトリ名の左側にある〇をチェック)し、「プッシュコマンドを表示」をクリックして、イメージをプッシュする為のコマンドを表示させます。

画面上の各コマンドをコピーし、コマンドプロンプト、またはPowerShell上でコマンド入力を行います。
この時、「macOS/Linux」「Windows」2つのタブが表示されますが、AWS CLIでイメージをプッシュする場合、「macOS/Linux」タブのコマンドを使用します。

  1. 環境にインストールしたDockerクライアントをAWSに認証させます。(AWS CLIのインストールが必要です)
  2. コマンドプロンプトまたはPowerShell上で、Visual Studioで発行したディレクトリに移動します。(*1)
  3. docker buildコマンドを入力して、コンテナイメージをビルドします。
  4. docker tagコマンドを入力して、構築したDockerイメージにタグを付けます。
  5. docker pushコマンドを入力して、Amazon ECRにイメージをプッシュします。

(*1)このとき、デプロイ資材の格納されているフォルダでは無く、一つ上の階層に移動します。
  例)bin>Release>net6.0>publishの中にデプロイした資材が有る場合、一つ上のnet6.0に移動する。

コマンドプロンプト上で処理が終わったら、Amazon ECRのレジストリ内部を確認します。 一覧にコンテナイメージが追加されていれば、プッシュ成功です。

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

Amazon ECSにアプリケーションをデプロイする

Amazon ECRにプッシュしたコンテナイメージから、Amazon ECSに対してアプリケーションをデプロイします。

タスク定義

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

タスク定義画面上の「新しいタスク定義の作成」をクリック。

各項目の設定および入力を行い、「作成」をクリックしてタスク定義を作成します。

[タスク定義の設定]

  • タスク定義ファミリー:ec12webappsample

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

[コンテナ - 1]

その他の設定は任意です。

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

クラスターの作成

クラスターを作成します。
クラスター画面上の「クラスターの作成」をクリック。

各項目の設定および入力を行い、「作成」をクリックしてクラスターを作成します。

その他の設定は任意です。

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

サービスの作成

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

クラスター画面上の[サービス]から「作成」をクリックします。

各項目の設定および入力を行い、「作成」をクリックしてサービスを作成します。
[環境]

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

[デプロイ設定]

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

[ネットワーキング]

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

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

出力結果の確認

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

画面下部の「コンテナの詳細」内にある[ネットワークバインド]から外部リンクを探し、 オープンアドレスをクリックします。
アプリケーションがWebブラウザで表示されれば、正常に動作しています。ダウンロード用ボタンをクリックし、Excelファイルが出力されることを確認します。

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

さいごに

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

ExcelCreator12製品ページはこちら
ExcelCreator12体験版はこちら

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