投稿者:國藤 篤規(エヌアイシーソフト)

こんにちは。
前回は Google Cloud Platform の App Engine で Kotlin アプリを動かしてみました。今回は AppEngine Flexible で動かしてみます。

AppEngine Flexible 環境


前回の App Engine Standard 環境では、war 形式でデプロイするする必要がありました。war 形式は標準的なフォーマットではあるのですが、Spring Boot をはじめ、組み込みのアプリケーションサーバを同梱した Self Executable Jar の形式で動作するものが増えています。App Engine Flexible 環境はまさにそのようなアプリを動かすための環境です。

Jar は再び、ShadowJar を使って作成します。Jar と同じディレクトリに以下のファイルを作成します。

app.yaml

runtime: java
env: flex

ファイルを置いたディレクトリに移動して、

gcloud app deploy

でデプロイします。 App Engine のバージョンを確認すると、Flexible 環境にデプロイできていることが確認できます。

バージョン確認

App Engine Custom Runtime


さらに柔軟性のある環境として、Custom Runtime があります。これは Container Image を指定して動かすことができる環境です。Container なので、Java に限らず、好きなものが動かせる環境ですが、今回は Open JDK 13 で動かしてみます。

app.yaml を以下のように書き換えます。

app.yaml

runtime: custom
env: flex

Dockerfile を作成します。今回は Open JDK 13 です。

Dockerfile

FROM openjdk:13-alpine
ADD KotlinGAE-1.0-SNAPSHOT-all.jar /app/
CMD ["java", "-jar", "/app/KotlinGAE-1.0-SNAPSHOT-all.jar"]

app.yaml , Dockerfile , Jar ファイルを同じディレクトリに置きます。そのディレクトリに移動して、以下のコマンドでディプロイします。

gcloud app deploy

起動時に ログに JDK のバージョンが出ていました。

JDKバージョン

Dockerfile をアップロードすれば、自動でイメージビルドしてくれるようです。開発時から同じ Dockerfile を使用すれば、開発機/本番機の差異を極力少なくできます。

まとめ


いろいろな環境があるので、App Engine Standard を含めて特徴をまとめてみました。

GCP App Engine

Standard - Java Runtime Flexible - Java Runtime Flexible - Custom Runtime
war Jar Container(Dockerfile)
GAE 側で提供 Jar に含める(自由に選べる) 自由に選べる
一番手軽 好きなアプリケーションサーバ・フレームワークが使用できる コンテナで動かせる・GCP で対応していないプログラミング言語・バイナリを動かせる

それぞれの特徴を踏まえることで、最適な環境が選択できます。