広告

Google App Engine Flexible で Java 9 アプリケーションが動くという話

!!! 半年以上も前に書かれた古い情報です !!!
!!! 半年以上も前に書かれた古い情報です !!!
!!! 半年以上も前に書かれた古い情報です !!!
!!! 半年以上も前に書かれた古い情報です !!!
!!! 半年以上も前に書かれた古い情報です !!!

これを書いている時点ではベータ版ですが、App Engine Flexible には Java 8 ランタイムが用意されています。Spring Boot や Spark などのフレームワークで作られたウェブアプリケーションを動かすことが想定されているようです。

App Engine > Documentation > Java > Flexible Environment > Java 8 ランタイム
https://cloud.google.com/appengine/docs/flexible/java/dev-java-only?hl=ja

Java 8 でベータなら Java 9 対応はまだまだかなあと思っていたのですが、なんと Java 9 で書かれたアプリケーションを動かすことができました、という話です。

来月には Spring Boot 2.0.0 がリリースされる予定です。

Spring Boot – Milestones
https://github.com/spring-projects/spring-boot/milestones

そして、Spring Boot 2 は Java 9 をサポートする最初のバージョンです。

Spring Boot with Java 9
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9

つまり、Spring Boot 2.0.0 が出るやいなや、App Engine Flexible でも動かせるということですね。ただし、GCP のドキュメントには Java 9 に関する記述は現時点ではまだ一切無いです。よって、何の保証も無いでしょうし、実験レベルで使用するのが適切でしょう。

さて、App Engine Flexible で使用するための OpenJDK の Docker イメージは、アジアだと https://console.cloud.google.com/gcr/images/google-appengine/ASIA/openjdk にあります。

latest, 8 というタグの他に、既に 9 というタグが付いたイメージがあります。これが OpenJDK 9 のイメージのようです。

ちなみに、us.gcr.io, eu.gcr.io, asia.gcr.io, gcr.io の違いについては下記に。

Container Registry > イメージの push と pull
https://cloud.google.com/container-registry/docs/pushing-and-pulling?hl=ja

参考までに、Google App Engine Gradle plugin を使用して Java 8 な Spring Boot アプリケーションを App Engine Flexible にデプロイするやり方は過去のポストに。

Google App Engine Flexible で動作する Spring Boot アプリケーションと Google Cloud SQL との連携

ということで、Java 9 なアプリケーションを準備します。例えば、build.gradle に下記のように書かれているアプリケーションです。

...

sourceCompatibility = 1.9
targetCompatibility = 1.9

...

app.yaml の内容は例えば下記の通りです。Java 8 の場合との差異としては、rutime_config の jdk の値を変更するだけですね。

runtime: custom
env: flex
service: mokyu

runtime_config:
  jdk: openjdk9

Dockerfile の内容は例えば下記の通りです。Java 8 の場合との差異としては、Docker イメージのタグの値を 9 に変更するだけですね。

FROM asia.gcr.io/google-appengine/openjdk:9
COPY myapp-1.0.0-SNAPSHOT.jar /app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]

そして、gradle appengineDeploy を実行すれば、App Engine Flexible 環境にデプロイされます。

広告