Java ランタイムは、アプリケーションのコードと依存関係をインストールして、フレキシブル環境でそのアプリケーションを実行する役割を果たすソフトウェア スタックです。
バージョン
11
以降は Buildpack を使用してビルドされるため、app.yaml
ファイルでオペレーティング システムを選択する必要があります。たとえば、Java 21 を使用するには、オペレーティング システムとして Ubuntu 22 を指定する必要があります。Java 8 / Jetty 9 ランタイムには、Java サーブレット 3.1 仕様をサポートする OpenJDK 8 と Eclipse Jetty 9 が用意されています。Jetty イメージは OpenJDK イメージから継承されます。
サポートされている Java バージョンと対応する Ubuntu バージョンの完全なリストについては、ランタイム サポート スケジュールをご覧ください。
前提条件
Java ランタイムを使用するには:
gcloud CLI バージョン 420.0.0 以降をインストールする必要があります。CLI ツールを更新するには、
gcloud components update
コマンドを実行します。インストールされているバージョンを表示するには、gcloud version
コマンドを実行します。Maven を使用してデプロイするには、App Engine Maven プラグインを
pom.xml
に追加する必要があります。<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>2.7.0</version> </plugin>
デプロイには、
gcloud app deploy
コマンドや App Engine Gradle プラグインなどの他のオプションがあります。
ファイルの整理
ソースツリーは次のようになります。
MyDir/ [pom.xml] [build.gradle] [index.yaml] [cron.yaml] [dispatch.yaml] src/main/ appengine/ app.yaml docker/ [Dockerfile] java/ com.example.mycode/ MyCode.java webapp/ [index.html] [jsp.jsp] WEB-INF/ [web.xml]
Java バージョンを選択する
新しいランタイム バージョン
Java ランタイム バージョン 11 以降の場合、app.yaml
に runtime_config
と operating_system
の設定を含めて、オペレーティング システムを指定する必要があります。
必要に応じて、app.yaml
ファイルに runtime_version
設定を含めると、ランタイム バージョンを指定できます。runtime_version
の設定が指定されていない場合は、デフォルトで最新の Java バージョンが使用されます。
例
Ubuntu 22 で Java 21 を指定するには、次のようにします。
runtime: java env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "21"
Ubuntu 22 でサポートされている最新の Java バージョンを指定するには、次のようにします。
runtime: java env: flex runtime_config: operating_system: "ubuntu22"
以前のランタイム バージョン
Java 8 の場合は、app.yaml
ファイルに runtime_config
と jdk
の設定を指定します。
Java 8 では、以下がサポートされます。
- Eclipse Jetty 9 ランタイムは、Servlet 3.1 を使用して Jetty 9 を実行します。
- アプリケーションの一部としてポート 8080 をリッスンする独自のサーバーコード。この機能により、SparkJava や Spring-Boot などのマイクロサービス フレームワークを使用できるようになります。
例
Jetty バージョン 9 を指定します(デフォルト/任意):
runtime_config: jdk: openjdk8 server: jetty9
Java バージョン 8 の指定:
runtime_config: jdk: openjdk8
Java 8 のサンプル
app.yaml
:
Maven の構成については pom.xml
を、Gradle の構成については build.gradle
をご覧ください。
オプションのファイル
次の構成ファイルはオプションです。
これらのファイルを MyDir の最上位に配置します。これらのファイルを使用する場合は、gcloud app deploy
コマンドを使用して個別にデプロイする必要があります。
web.xml
はオプションであり、Servlet 3.x アノテーションを使用していない場合にのみ必要です。
静的ウェブ コンテンツと JavaServer ページを webapp/
ディレクトリに配置できます。App Engine フレキシブル環境でサーブレット コンテナとして使用するのは Jetty 9 です。Jetty 9 は Apache Jasper をデフォルトの JSP 実装として使用し、JSTL taglib を含みます。
Dockerfile ファイルはオプションであり、Java ランタイムをカスタマイズする場合に使用されます。
gzip 圧縮を有効にする
gzip
ハンドラは Jetty にバンドルされていますが、デフォルトでは有効になっていません。このモジュールを有効にするには、app.yaml
ファイルに環境変数 JETTY_MODULES_ENABLE=gzip
を設定します。
env_variables:
JETTY_MODULES_ENABLE: 'gzip'
クイックスタートを使用する
Jetty では、アプリケーションの内容を事前にスキャンし、構成ファイルを生成することでアプリケーションの開始にかかる時間を短縮できます。拡張イメージを使用している場合は、Dockerfile でアプリケーション WAR を追加した後に /scripts/jetty/quickstart.sh
を実行することで、クイックスタートを有効にできます。
環境変数
Java 8 / Jetty 9 ランタイムに固有の以下のオプション環境変数を設定できます。また、OpenJDK 8 環境変数も設定できます。
環境変数を設定するには、app.yaml
ファイルで env_variables
キーを使用します。
環境変数 | Maven プロパティ | 値/コメント |
---|---|---|
JETTY_PROPERTIES |
$JETTY_ARGS に追加された name=value ペアのカンマ区切りリスト |
|
JETTY_MODULES_ENABLE |
$JETTY_ARGS に追加して有効にするモジュールのカンマ区切りリスト |
|
JETTY_MODULES_DISABLE |
$JETTY_BASE/start.d から削除して無効にするモジュールのカンマ区切りリスト |
|
JETTY_ARGS |
Jetty の start.jar に渡された引数。カスタム Jetty 設定に使用するすべての引数が渡される必要があります。 |
|
JAVA_OPTS |
JVM ランタイム引数 |
拡張 Cloud Logging(ベータ版)
App Engine フレキシブル環境での実行時に、Cloud Logging にログを送信するように Java Util Logging を構成できます。このためには、JETTY_ARGS
環境変数を設定します。次に例を示します。
env_variables:
JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties
次のように LoggingHandler を構成する logging.properties ファイルを用意する必要があります。
handlers=com.google.cloud.logging.LoggingHandler
# Optional configuration
.level=INFO
com.google.cloud.logging.LoggingHandler.level=FINE
com.google.cloud.logging.LoggingHandler.log=gae_app.log
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s
ローカルテスト
ローカル環境でテストする際に、リモートの Google Cloud サービスではなくエミュレートされた Google Cloud サービスを使用できます。次のエミュレータを使用できます。
アプリを実行する前に gcloud
コマンドを使用して起動します。
gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start
Maven
次の行を Maven pom.xml
ファイルに追加して、Jetty 9 Maven プラグインを追加します。
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.2.v20170220</version>
</plugin>
アプリをローカルで実行するには、Maven コマンドを使用します。
mvn jetty:run-exploded
Gradle
新しい Gradle プロジェクトの作成の手順に沿って Gretty Gradle プラグインを build.gradle
に追加し、次のコマンドを使用します。
gradle jettyRun
アプリのデプロイ
Google Cloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
構成が完了したら、Google Cloud CLI を使用して app.yaml
ファイルと WAR ファイルを含むこのディレクトリをデプロイできます。
gcloud app deploy app.yaml
オプションの構成ファイル(index.yaml
、cron.yaml
、dispatch.yaml
)を使用している場合は、gcloud
コマンドを使用して個別にデプロイします。次に例を示します。
gcloud app deploy cron.yaml
Maven
Maven を使用してアプリをデプロイします。
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。pom.xml
ファイルですでにプロジェクト ID を指定している場合は、実行するコマンドに -Dapp.deploy.projectId
プロパティを含める必要はありません。
Gradle
Gradle を使用してアプリをデプロイします。
gradle appengineDeploy
Java 8 / Jetty 9 ランタイムをカスタマイズする
Java 8 / Jetty 9 ランタイムへのアプリのデプロイでは、Dockerfile は不要です。アプリに追加の構成が必要な場合は、Dockerfile を明示的に提供して Java ランタイムをカスタマイズできます。Dockerfile にはベースイメージが含まれている必要があります。追加のディレクティブを Dockerfile に追加し、Java ランタイムをカスタマイズできます。カスタム ランタイムの構築をご覧ください。
この場合、your-application.war
は target/
ディレクトリ(maven)または build/staged-app/
(gradle)にあるビルド済み WAR ファイルの名前です。