LoginSignup
6
4

More than 5 years have passed since last update.

Quarkusで作ったアプリをHerokuで動かしてみる

Last updated at Posted at 2019-04-10

はじめに

Webアプリケーションを無料で手軽に動かす時にHerokuを使いますよね?
ただ無料で使う場合、アプリケーションを30分以上放置する(リクエストがない)と、サーバがスリープしてしまいます。

スリープ後にアプリケーションにアクセスすると、レスポンスが返ってくるまでに時間がかかってしまいます。そこで、起動時間を短縮するために、最近注目されているGraalVMとGraalVM上でJavaのWebアプリケーションを動かすことができるQuarkusを使ってみました。

今回はQuarkusをHerokuで動かす方法と、SpringBootとの起動時間の比較を行ってみたいと思います。

前提条件

  • Herokuのアカウントを持っていること

Quarkusアプリケーションの用意

アプリケーションの作成

以下の記事を参考にアプリケーションの作成を行ってください。

Javaのフレームワーク「Quarkus」を試してみた

Dockerファイル作成

今回はDockerレジストリにHerokuのコンテナレジストリを使います。

以下のファイルを作成してください。

src/main/docker/Dockerfile.web
FROM registry.fedoraproject.org/fedora-minimal
WORKDIR /work/
COPY *-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0", "-Dquarkus.http.port=${PORT}"]

-Dquarkus.http.port=${PORT} はHerokuで指定されたポートで起動するために必要です。これがないと起動できません。
ちなみに${PORT}の部分を変更することで、Quarkusアプリの起動ポートを変更できます。

Herokuコンテナにログイン

heroku container:login

Heroku上にアプリケーションを作成

heroku create <アプリケーション名>

以降はプロジェクトルートで行ってください。

Dockerレジストリにプッシュ

heroku container:push -R -a <アプリケーション名>

Docker起動

heroku container:release web -a <アプリケーション名>

動作確認

curl https://<アプリケーション名>.herokuapp.com/hello

helloが出力されることを確認します。

SpringBootアプリケーションの用意

アプリケーションの作成

RestController
@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @RequestMapping("hello")
    public String home() {
        return "hello";
    }
}

Dockerファイルの作成

Dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/app.jar app.jar
CMD ["java","-jar","app.jar","--server.port=${PORT}"]

以降の手順はQuarkusと同様のため割愛します。

スリープ後の起動時間を計測

herokuサーバが以下のような状態になるまで待ちます。
スクリーンショット_2019-04-10_12_35_14.png

以下のコマンドを実行し計測してみます。

Quarkusアプリケーションの計測

curl https://<Quarkusアプリケーション名>.herokuapp.com/hello -o /dev/null -w  "%{time_starttransfer}\n" -s
7.038011

SpringBootアプリケーションの計測

curl https://<SpringBootアプリケーション名>.herokuapp.com/hello -o /dev/null -w  "%{time_starttransfer}\n" -s
15.208555

QuarkusはSpringBootの1/2の時間で起動するという結果になりました

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4