Spring BootアプリをAWSにデプロイするには?:Spring Bootアプリケーションをクラウド移行
TechTargetは「Spring BootアプリをAWSにデプロイする方法」を解説する記事を公開した。クラウドネイティブなアプリケーション開発フレームワークSpring Bootで構築したアプリケーションをECSやFargateを使ってデプロイする手順を紹介する。
TechTargetは2024年8月16日(米国時間)、「Spring BootアプリをAWSにデプロイする方法」を解説する記事を公開した。
「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にデプロイする。
- ビルド済みアプリケーションをDocker化し、そのイメージをコンテナレジストリにプッシュする
- AWSでパブリッシュしたDockerの「Docker」イメージを参照する「AWS Fargate」タスクを作成する
- AWSでSpring Bootアプリケーションをホストするための「Amazon Elastic Container Service(ECS)」クラスタを作成する
- 作成したECSクラスタ上で作成済みのFargateタスクを実行する
- 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クラスタを作成する。以下にその手順を説明する。
- AWSコンソールでECSページに移動する
- 「タスク定義」(Task definitions)を選択する
- 「新しいタスクの作成」(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クラスタは以下の手順に従って作成する。
- AWSコンソールでECSページに移動する
- 「クラスター」(Clusters)を選択する
- 「クラスターリンクの作成」(Create cluster link)をクリックする
- インフラのタイプとして「Fargate」を選択する
- 「保存」(Save)をクリックしてクラスターを作成する
作成したタスクをクラスター上で実行する
ECSタスクを構成し、Fargateクラスターを作成したら、最後に以下の手順に従ってクラスター上でタスクを実行する。
- クラスターをクリックし、「タスク」(Tasks)タブに移動する
- 「新しいタスクの実行」(Run new task)ボタンをクリックする
- 実行するファミリータイプとして「Spring Boot AWS」タスクを選択する
- タスクのパブリックサブネットを選択する
- 着信HTTPトラフィックを許可するセキュリティグループをタスクに割り当てる
- パブリックIPアドレスを自動割り当てするオプションを選択する
- 「タスクの実行」(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.
関連記事
- Terraformのモジュール機能を使ってAWSリソースを効率的に管理する方法
インフラ自動化ツールの一つである「Terraform」について、これから学ぼうという方、使っていきたい方を対象に、Terraformの導入方法や基本的な使い方を紹介していく本連載。最終回は、Terraformでクラウドリソースを効率的に管理するモジュールについて。 - AWS、自然言語を使ってエンタープライズアプリを作成できる「AWS App Studio」を発表
Amazon Web Services(AWS)は、自然言語を使ってエンタープライズグレードのアプリケーションを作成できる生成AIベースのサービス「AWS App Studio」(プレビュー版)を発表した。 - ドワンゴのサイバー攻撃被害、すぐに「ニコニコ動画(Re:仮)」を公開できた理由
大手出版事業者のKADOKAWAがランサムウェアを含む大規模なサイバー攻撃の被害に遭った。子会社であるドワンゴの動画配信サービス「ニコニコ動画」が停止し大きく話題となる中、「被害を受けなかった動画システムやデータ」を基にした「ニコニコ動画(Re:仮)」が公開された。仮サービスをいち早くリリースできた背景にあるのが、2024年3月に完了していた動画配信基盤のAWS移行だ。2024年6月に開催された「AWS Summit Japan」では、ドワンゴの久保田陽介氏が、動画配信基盤のAWS移行に踏み切った背景や作業過程、移行から得られたメリットを解説した。