Spring Boot アプリケーションをお手軽に本番運用
AWS App Runner と AWS CDK の活用 ~ 第一回
Author : 林 政利
こんにちは、ソリューションアーキテクトの林です。普段は、コンテナという技術にフォーカスして、さまざまな業種、業態のお客様を支援させていただいています。
皆様の現場では、アプリケーションをどのように構築、運用されていますか ? Java を活用されているお客様は、アプリケーションを高速に開発でき、また拡張性の高い Spring Boot を利用されている方も多いかと思います。
AWS には、 Web アプリケーションのためのフルマネージドサービス、 AWS App Runner があります。App Runner は、ソースコードを用意するだけで、そのコードをビルド、デプロイして URL を払い出し、Web アプリケーションとして動かしてくれるサービスです。
もともと、 Spring Boot は Enter を押すだけで 動くバイナリ、 Far Jar を作ってくれるわけですが、実際に本番環境を用意するとなると、C I/CD 環境を構築したり、ロードバランサーを用意したり、そこに URL を紐づけたり、オートスケーリングの仕組みを用意したり、監視したり色々やることがありますね。App Runner は、そのあたりの諸々を全てマネージドで提供しているので、お手軽に本番運用を始めることができます。
Spring Boot でサクッとアプリを作って、 App Runner でサクッとデプロイして運用する、素晴らしい組み合わせですね。
本シリーズでは、Spring Boot アプリケーションを本番環境で実施したい方向けに、App Runner にデプロイするところから始めて、データベースやキャッシュサーバーとの接続、秘匿情報の管理、Spring Boot Actuator によるメトリクスの取得とその活用、カナリアリリースを行うまでの方法を皆様にご紹介します。
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
この連載記事のその他の記事はこちら
- 選択
- 第一回 ~ Spring Boot アプリケーションをデプロイ
- 第二回 ~VPC 内の Amazon ElastiCache へアクセス
- 第三回 ~アプリケーションの設定情報を AWS Systems Manager Parameter Store に保存
- 最終回 ~ App Runner サービスのモニタリング方法
この記事のデモを無料でお試しいただけます »
毎月提供されるデベロッパー向けアップデート情報とともに、クレジットコードを受け取ることができます。
Spring Boot アプリケーションの作成
まず、シンプルな Spring Boot アプリケーションを作成するところから始めましょう。あまりにシンプルすぎると思われるでしょうが、小さなところから始めることができるのも Spring Boot と App Runner による高速開発の醍醐味だと思います。
なお、本記事では、ツールのバージョンは以下の通りです。
バージョン |
補足
|
Java 11 (Corretto-11) |
|
Spring Boot 2.7.7 |
|
$ mkdir expt-apprunner-springboot && cd expt-apprunner-springboot
$ gradle init
ソースコードのビルド設定は以下の通りです。
// build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.7'
id 'io.spring.dependency-management' version '1.1.0'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
}
それから、以下のアプリケーションコードを追加します。
// build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.7'
id 'io.spring.dependency-management' version '1.1.0'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
}
// src/main/java/com/example/exptapprunnerspringboot/Application.java
package com.example.exptapprunnerspringboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@GetMapping("/")
public String root() {
return "hello";
}
}
これでアプリケーションができましたので、早速動作を確認してみましょう。
$ ./gradlew bootRun
# 別ターミナルで
$ curl http://localhost:8080
hello
Spring Boot アプリケーションのデプロイ
では、このアプリケーションを App Runner にデプロイしてみましょう。
App Runner では、GitHub 上のリポジトリを指定することで、ソースコードを読み込むことができます。そのため、コードをまず、GitHub に Push する必要があります。
$ git remote add origin git@github.com:xxx/expt-apprunner-springboot.git
$ git branch -M main
$ git add -A
$ git push -u origin main
App Runner のコンソール にアクセスして、「Create an App Runner service」を選択します。
Source code repository を指定し、「Add new」から GitHub への接続情報を追加します。
自動的に GitHub 上のページが読み込まれるので、Push したリポジトリを選択します。
次の画面で、アプリケーションの Jar をビルドするコマンドと、実際にアプリケーションを起動するコマンドを入力します。Spring Boot の場合は、以下のようになるでしょう。
Runtime |
Corretto 11 |
Build command | ./gradlew bootJar && cp build/libs/expt-apprunner-springboot.jar ./ |
Start command | java -jar ./expt-apprunner-springboot.jar |
任意のサービス名を入力し、後はデフォルトのまま、次の画面へ移動します。
いよいよデプロイです !
デプロイステップの確認
App Runner は、裏側で AWS Fargate を利用しており、実際には指定したソースコードから コンテナイメージをビルドし、デプロイしています。
App Runner がどのようにアプリケーションのビルドとデプロイを進めているか、「Deployment logs」をクリックすることで見ることができます。
以下のように、コンテナイメージをビルドしている様子が確認できますね。
02-15-2023 03:00:49 PM [Build] ---> Running in 75c756649e99
02-15-2023 03:00:49 PM [Build] Step 3/5 : WORKDIR /app
02-15-2023 03:00:49 PM [Build] ---> c41e3f14f082
02-15-2023 03:00:49 PM [Build] Step 2/5 : COPY . /app
02-15-2023 03:00:49 PM [Build] ---> 45e6feb169da
02-15-2023 03:00:49 PM [Build] Status: Downloaded newer image for 380155284058.dkr.ecr.us-west-2.amazonaws.com/awsfusionruntime-corretto11:11.0.18.10.1
02-15-2023 03:00:49 PM [Build] Digest: sha256:78ea90bce6eb9b8881850fab03d984105d24ee8d7789dff9e52608f46ec6aa6d
02-15-2023 03:00:49 PM [Build] 141aabecbe17: Pull complete
02-15-2023 03:00:49 PM [Build] d198c38a2385: Pull complete
02-15-2023 03:00:49 PM [Build] 1e78b99dd1fd: Pull complete
02-15-2023 03:00:49 PM [Build] 141aabecbe17: Download complete
02-15-2023 03:00:49 PM [Build] 141aabecbe17: Verifying Checksum
02-15-2023 03:00:49 PM [Build] 1e78b99dd1fd: Download complete
02-15-2023 03:00:49 PM [Build] 1e78b99dd1fd: Verifying Checksum
02-15-2023 03:00:49 PM [Build] d198c38a2385: Download complete
02-15-2023 03:00:49 PM [Build] d198c38a2385: Verifying Checksum
02-15-2023 03:00:49 PM [Build] 141aabecbe17: Pulling fs layer
02-15-2023 03:00:49 PM [Build] d198c38a2385: Pulling fs layer
02-15-2023 03:00:49 PM [Build] 1e78b99dd1fd: Pulling fs layer
02-15-2023 03:00:49 PM [Build] 11.0.18.10.1: Pulling from awsfusionruntime-corretto11
02-15-2023 03:00:49 PM [Build] Step 1/5 : FROM 380155284058.dkr.ecr.us-west-2.amazonaws.com/awsfusionruntime-corretto11:11.0.18.10.1
02-15-2023 03:00:49 PM [Build] Sending build context to Docker daemon 35.61MB
これで Spring Boot アプリケーションがデプロイできました。「Status」が 「Running」 になっていることを確認し、動作を確認してみましょう。
$ curl <Default domain に表示されたURL>
hello
まとめ
無事、Spring Boot アプリケーションをデプロイできましたね ! Spring Boot と App Runner を活用することで、簡単にお手元のソースコードを Web アプリケーションとして公開できることが分かりました。
しかし、実際のアプリケーションでは、他にもやることがたくさんあるはずです !
次回の記事では、 キャッシュストアとしてよく利用される Redis を Amazon ElastiCache で用意し、そのキャッシュサーバーに Spring Data Redis を使って接続してみます。
ただ、ElastiCache などさまざまな AWS のリソースと連携するようになると、今回のようにコンソールからポチポチ操作していくと面倒になりますし、オペミスにもつながりますね。次回の記事では、App Runner および連携サービスを AWS が開発している IaC ツールである AWS CDK と使って管理する手順をご紹介します。
記事を読み進めるにつれ、シンプルなアプリケーションだけでなく、データベースやキャッシュストアと連携した一般的なアプリケーションを手軽に運用できることをご体感いただけるでしょう。どうぞお楽しみに !
この連載記事のその他の記事はこちら
- 選択
- 第一回 ~ Spring Boot アプリケーションをデプロイ
- 第二回 ~VPC 内の Amazon ElastiCache へアクセス
- 第三回 ~アプリケーションの設定情報を AWS Systems Manager Parameter Store に保存
- 最終回 ~ App Runner サービスのモニタリング方法
筆者プロフィール
林 政利 (@literalice)
アマゾン ウェブ サービス ジャパン合同会社
コンテナスペシャリスト ソリューションアーキテクト
フリーランスや Web 系企業で業務システムや Web サービスの開発、インフラ運用に従事。近年はベンダーでコンテナ技術の普及に努めており、現在、AWS Japan で Amazon ECS や Amazon EKS でのコンテナ運用や開発プロセス構築を中心にソリューションアーキテクトとして活動中。
AWS を無料でお試しいただけます