GCP App Engine flexible で Kotlin アプリを動かす
投稿者:國藤 篤規
こんにちは。
前回は 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 のバージョンが出ていました。
Dockerfile をアップロードすれば、自動でイメージビルドしてくれるようです。開発時から同じ Dockerfile を使用すれば、開発機/本番機の差異を極力少なくできます。
まとめ
いろいろな環境があるので、App Engine Standard を含めて特徴をまとめてみました。
GCP App Engine
Standard – Java Runtime | Flexible – Java Runtime | Flexible – Custom Runtime |
---|---|---|
war | Jar | Container(Dockerfile) |
GAE 側で提供 | Jar に含める(自由に選べる) | 自由に選べる |
一番手軽 | 好きなアプリケーションサーバ・フレームワークが使用できる | コンテナで動かせる・GCP で対応していないプログラミング言語・バイナリを動かせる |
それぞれの特徴を踏まえることで、最適な環境が選択できます。