Spring BootアプリをAWSにデプロイするには?Spring Bootアプリケーションをクラウド移行

TechTargetは「Spring BootアプリをAWSにデプロイする方法」を解説する記事を公開した。クラウドネイティブなアプリケーション開発フレームワークSpring Bootで構築したアプリケーションをECSやFargateを使ってデプロイする手順を紹介する。

» 2024年10月11日 08時00分 公開
[Cameron McKenzieTechTarget]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 TechTargetは2024年8月16日(米国時間)、「Spring BootアプリをAWSにデプロイする方法」を解説する記事を公開した。

Spring BootアプリをAWSにデプロイする方法(提供:TechTarget)

 「Spring Boot」は、オープンソースのクラウドネイティブソフトウェア開発フレームワークだ。本稿では、Spring BootでビルドしたアプリケーションをAmazon Web Services(AWS)にデプロイする方法について解説する。

前提条件

 このSpring Bootチュートリアルでは、Spring Bootアプリケーションが既にビルドされ、デプロイする準備が整っていることを前提とする。具体的には以下の3点だ。

  • Spring Bootアプリケーションを構成してJARファイルとしてパッケージ化している
  • Spring Bootアプリケーションをローカルで実行してテストを完了している
  • 「Maven」ビルドまたは「Gradle」ビルドの実行が完了し、ビルド後のJARファイルがプロジェクトの「target」フォルダに保存されている

 Spring BootアプリケーションはWARファイルとしてデプロイすることも可能だが、 JARファイルとしてパッケージ化すれば、ビルドアーティファクトに「Tomcat」サーバが組み込まれるため、デプロイ後にアプリケーションサーバを構成する手順が不要になる。

 MavenでビルドされたJARファイルは、標準の場所として「target」フォルダに配置される。本チュートリアルではこれを前提としている。ビルドツールによって配置される場所が異なるため、構成が異なる場合は、JARファイルが配置される場所に注意する。

Spring BootアプリケーションをAWSに配置する方法

 Spring Bootでビルドしたクラウドネイティブのマイクロサービスは、以下の手順に従ってAWSにデプロイする。

  1. ビルド済みアプリケーションをDocker化し、そのイメージをコンテナレジストリにプッシュする
  2. AWSでパブリッシュしたDockerの「Docker」イメージを参照する「AWS Fargate」タスクを作成する
  3. AWSでSpring Bootアプリケーションをホストするための「Amazon Elastic Container Service(ECS)」クラスタを作成する
  4. 作成したECSクラスタ上で作成済みのFargateタスクを実行する
  5. AWSによってパブリックに割り当てられたIPアドレスを使ってAWS上でホストされているSpring Bootアプリケーションにアクセスする

Spring BootアプリケーションをDocker化する

 Springアプリケーションをコンテナ化してそのDockerイメージをコンテナレジストリにプッシュする手順は、簡単にスクリプトにしてCI/CD(継続的インテグレーション/継続的デリバリー)プロセスに追加できる。

 Spring BootプロジェクトにSpring Boot Dockerfileが含まれている場合、Docker化されたSpring Bootアプリケーションをビルドしてプッシュするには、以下のコマンドを使用する。

docker build --tag=<dockerhubname>/<imagename>:latest .
docker login
docker push

AWSでECSタスクを作成する

  「AWS Elastic Container Service(Amazon ECS)」では、「AWS Fargate」というサーバレスのフルマネージドコンテナホスティングサービスが提供される。

 AWS Fargateは、ユーザーが1つのコンテナのデプロイ、管理、スケーリングをできるようにすることで、コンテナホスティングをシンプルにする。これは「Kubernetes」によるマルチポッド、マルチノードのデプロイメントとは対照的なアプローチだ。

 ECSでは、最初にタスクを作成することによってユーザーのコンテナを記述する。次にそのタスクを実行できるECSクラスタを作成する。以下にその手順を説明する。

  1. AWSコンソールでECSページに移動する
  2. 「タスク定義」(Task definitions)を選択する
  3. 「新しいタスクの作成」(Create a new task)をクリックする

 FargateベースのECSタスク定義では、以下の条件を指定する必要がある。

  • ネットワークでアドレス指定可能なDockerイメージの名前
  • Spring Bootマイクロサービスに割り当てるメモリ量
  • Dockerイメージに割り当てる仮想CPUの数
  • Spring BootアプリケーションのRESTful API用ポートマッピング

ECSタスクとサービスデプロイメントの違い

 ECSでは、デプロイにタスクまたはサービスを使用できる。Spring Bootアプリケーションをテストする場合、筆者はタスクを好んで使用している。タスクでは、ワークロードが管理されず、1つのコンテナインスタンスのみが実行されるという点で、バッチジョブのように実行される。

 ライブ環境で堅牢(けんろう)かつ信頼性の高いWebサイトをホストする場合は、ECSサービスを使用する。タスクとサービスの構成は非常に似ており、サービスのデプロイには幾つか追加手順が必要になる。

Fargateクラスタを作成する

 ECSタスクは、クラスタ上で実行しなければならない。サーバレスECSクラスタは以下の手順に従って作成する。

  1. AWSコンソールでECSページに移動する
  2. 「クラスター」(Clusters)を選択する
  3. 「クラスターリンクの作成」(Create cluster link)をクリックする
  4. インフラのタイプとして「Fargate」を選択する
  5. 「保存」(Save)をクリックしてクラスターを作成する

作成したタスクをクラスター上で実行する

 ECSタスクを構成し、Fargateクラスターを作成したら、最後に以下の手順に従ってクラスター上でタスクを実行する。

  1. クラスターをクリックし、「タスク」(Tasks)タブに移動する
  2. 「新しいタスクの実行」(Run new task)ボタンをクリックする
  3. 実行するファミリータイプとして「Spring Boot AWS」タスクを選択する
  4. タスクのパブリックサブネットを選択する
  5. 着信HTTPトラフィックを許可するセキュリティグループをタスクに割り当てる
  6. パブリックIPアドレスを自動割り当てするオプションを選択する
  7. 「タスクの実行」(Run Task)をクリックする

AWSでホストされているSpring Bootアプリケーションにアクセスする

 ユーザーのSpring Bootアプリケーションに割り当てられたIPアドレスは、実行中のタスクの「構成」(Configuration)タブで確認できる。このIPアドレスとタスクの外部ポートを使用して、Spring Bootアプリケーションにアクセスする。

Spring BootとAWSの高度な構成

 本稿で説明した構成の問題点の一つは、タスクを再デプロイするたびに新しいIPアドレスが割り当てられる点にある。この構成は、バッチワークロードの実行や、Spring Bootアプリケーションを素早くテストするのに適しているが、パブリックに公開されているWebサイトやSaaSサービスを中断することなくホスティングするのには適していない。

 Docker化したSpring BootアプリケーションのAWS上でのFargateデプロイメントの高可用性を確保し、信頼性の高いWebサイトやRESTful Webサービスのホスティングを実現するには、さらなる構成作業が必要になる。

 例えば、タスクをデプロイするのではなく、ECSサービスをデプロイする方が適切だ。Spring Bootアプリケーションを本格的にホスティングするには、AWSの「Amazon Route 53」によるドメイン名の割り当てとDNSレコード管理も必要になる。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。