AWS App RunnerのコードベースサービスにJavaランタイムが追加されました

2022.02.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

AWS App RunnerはソースコードかコンテナイメージからWebアプリケーションをデプロイ、実行出来るマネージドサービスです。
ソースコードからのデプロイでは、これまでは Python 3 と Node.js 12 のみがサポートされていました。

サポート対象外のランタイム環境の場合はコンテナイメージから作成する必要がありました。

今回のアップデートで、サポートランタイムに Java(Corretto 8, Corretto 11) と Node.js 14 が追加されました。
本日はJavaランタイムで簡単なSpring Bootアプリケーションをデプロイしてみました。

サンプルアプリケーションを用意

サンプルアプリケーションは以下の記事を参考に、VSCodeのSpring Boot拡張機能を使って作成し、記事の中にあるHelloControllerを追加しています。

今回は追加で、バージョンを指定してGradle Wrapperを作成しています。
Java11のマネージド環境では、本日時点で以下のイメージが使用されるのですが、Gradle6.5が使われているようです。

335838599203.dkr.ecr.ap-northeast-1.amazonaws.com/awsfusionruntime-corretto11:11.0.13.08.1

なので、Gradleのバージョンを指定せずにデプロイすると構成(Spring Bootのバージョンなど)によってはサービス作成中にバージョン依存関係の問題で失敗します。

 "[Build] Starting a Gradle Daemon (subsequent builds will be faster)\n",
  "[Build] \u001b[91m\n",
  "[Build] \u001b[0m\u001b[91mFAILURE: \u001b[0m\u001b[91mBuild failed with an exception.\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m* Where:\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91mBuild file '/app/build.gradle' line: 2\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m* What went wrong:\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91mAn exception occurred applying plugin request [id: 'org.springframework.boot', version: '2.6.3']\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m> \u001b[0m\u001b[91mFailed to apply plugin [id 'org.springframework.boot']\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m   \u001b[0m\u001b[91m> \u001b[0m\u001b[91mSpring Boot plugin requires Gradle 6.8.x, 6.9.x, or 7.x. The current version is Gradle 6.5\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m* Try:\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91mRun with \u001b[0m\u001b[91m--stacktrace\u001b[0m\u001b[91m option to get the stack trace. Run with \u001b[0m\u001b[91m--info\u001b[0m\u001b[91m or \u001b[0m\u001b[91m--debug\u001b[0m\u001b[91m option to get more log output. Run with \u001b[0m\u001b[91m--scan\u001b[0m\u001b[91m to get full insights.\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m* Get more help at \u001b[0m\u001b[91mhttps://help.gradle.org\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\u001b[91mBUILD FAILED\u001b[0m\u001b[91m in 47s\u001b[0m\u001b[91m\n",
  "[Build] \u001b[0m\n",
  "[AppRunner] Failed to deploy your application source code."

用意できたサンプルアプリケーションはGitHubリポジトリへプッシュしておきます。

App Runnerサービスの作成

リポジトリタイプでソースコードリポジトリを選択し、先程のGitHubリポジトリを参照します。

今回は設定ファイル(apprunner.yaml)は使わずにマネジメントコンソールから設定を行いました。
ランタイムはCorretto 11を選択し、構築コマンドも以下のようにGradle Wrapper経由でビルドさせます。

ちなみに、ランタイムは以下のようにCorretto 8Nodejs 14も追加されています。

数分時間がかかりますが、ステータスがRunningになったら、デフォルトドメインからアクセスしてみます。

App RunnerでソースコードベースのJavaアプリケーションを実行することが出来ました。

さいごに

ちなみにですが、App Runnerをソースコードからデプロイする場合はビルド料金が追加で発生しますのでご注意ください。
詳細は以下をご確認ください。

AWS App Runner の料金 – フルマネージド型のコンテナアプリケーションサービス - Amazon Web Services

新しいランタイム追加されると期待してしまいますね。.NET Core来て欲しいです。