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アプリケーションはWARファイルとしてデプロイすることも可能だが、 JARファイルとしてパッケージ化すれば、ビルドアーティファクトに「Tomcat」サーバが組み込まれるため、デプロイ後にアプリケーションサーバを構成する手順が不要になる。
MavenでビルドされたJARファイルは、標準の場所として「target」フォルダに配置される。本チュートリアルではこれを前提としている。ビルドツールによって配置される場所が異なるため、構成が異なる場合は、JARファイルが配置される場所に注意する。
Spring Bootでビルドしたクラウドネイティブのマイクロサービスは、以下の手順に従ってAWSにデプロイする。
Springアプリケーションをコンテナ化してそのDockerイメージをコンテナレジストリにプッシュする手順は、簡単にスクリプトにしてCI/CD(継続的インテグレーション/継続的デリバリー)プロセスに追加できる。
Spring BootプロジェクトにSpring Boot Dockerfileが含まれている場合、Docker化されたSpring Bootアプリケーションをビルドしてプッシュするには、以下のコマンドを使用する。
docker build --tag=<dockerhubname>/<imagename>:latest . docker login docker push
「AWS Elastic Container Service(Amazon ECS)」では、「AWS Fargate」というサーバレスのフルマネージドコンテナホスティングサービスが提供される。
AWS Fargateは、ユーザーが1つのコンテナのデプロイ、管理、スケーリングをできるようにすることで、コンテナホスティングをシンプルにする。これは「Kubernetes」によるマルチポッド、マルチノードのデプロイメントとは対照的なアプローチだ。
ECSでは、最初にタスクを作成することによってユーザーのコンテナを記述する。次にそのタスクを実行できるECSクラスタを作成する。以下にその手順を説明する。
FargateベースのECSタスク定義では、以下の条件を指定する必要がある。
ECSでは、デプロイにタスクまたはサービスを使用できる。Spring Bootアプリケーションをテストする場合、筆者はタスクを好んで使用している。タスクでは、ワークロードが管理されず、1つのコンテナインスタンスのみが実行されるという点で、バッチジョブのように実行される。
ライブ環境で堅牢(けんろう)かつ信頼性の高いWebサイトをホストする場合は、ECSサービスを使用する。タスクとサービスの構成は非常に似ており、サービスのデプロイには幾つか追加手順が必要になる。
ECSタスクは、クラスタ上で実行しなければならない。サーバレスECSクラスタは以下の手順に従って作成する。
ECSタスクを構成し、Fargateクラスターを作成したら、最後に以下の手順に従ってクラスター上でタスクを実行する。
ユーザーのSpring Bootアプリケーションに割り当てられたIPアドレスは、実行中のタスクの「構成」(Configuration)タブで確認できる。このIPアドレスとタスクの外部ポートを使用して、Spring Bootアプリケーションにアクセスする。
本稿で説明した構成の問題点の一つは、タスクを再デプロイするたびに新しい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.