Java 8 ランタイムには、ウェブサービス用フレームワークは含まれていません。唯一の要件は、アプリがポート 8080 をリッスンし、応答することです。ここに示すサンプルコードは、Spring Boot などの独自のフレームワークを Java 8 ランタイムに追加する方法を示しています。
前提条件
開発を始める前に、Google Cloud CLI の最新バージョンをダウンロードするか、gcloud CLI を最新のバージョンに更新します。
gcloud components update
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 プラグインの使用などの他のオプションがあります。アプリケーション フレームワークの手順で、実行可能 JAR ファイルのビルドを構成します。この実行可能 JAR は
java -jar app.jar
を介して実行する必要があります。たとえば、Spring Boot のドキュメントなどを確認してください。
ファイルの整理
ファイル階層は次のようになります。
MyDir/ pom.xml [index.yaml] [cron.yaml] [dispatch.yaml] src/main/ appengine/ app.yaml docker/ Dockerfile java/ com.example.mycode/ MyCode.java
app.yaml
app.yaml
ファイルは必須です。次のようなファイルを定義します。
runtime: java
env: flex
runtime: java
を指定した場合、JAR(*.jar
)ファイルをデプロイすると、ランタイム イメージ gcr.io/google-appengine/openjdk:8
が自動的に選択されます。
JDK バージョンを選択するには、runtime_config.jdk
フィールドを使用します。
runtime: java
env: flex
runtime_config:
jdk: openjdk8
その他の app.yaml
設定については、app.yaml の使用をご覧ください。
オプションのファイル
次の構成ファイルはオプションです。
これらのファイルを MyDir
の最上位に配置します。これらのファイルを使用する場合は、gcloud app deploy
コマンドを使用して個別にデプロイする必要があります。
デフォルトのエントリ ポイント
OpenJDK 8 イメージのエントリ ポイントは docker-entrypoint.bash
です。これは、渡されたコマンドライン引数を処理して実行可能な代替を探すか、デフォルト コマンド(java
)に対する引数を探します。
イメージに対する最初の引数が実行可能ではない場合、java
コマンドが暗黙的に追加されます。例:
$ docker run openjdk -jar /usr/share/someapplication.jar
イメージに対する最初の引数が実行可能である場合(bash
など)、そのコマンドが実行されます。
たとえば、以下を使用してシェルを実行できます。
> docker run -it --rm openjdk bash
root@c7b35e88ff93:/#
環境変数
環境変数を設定するには、app.yaml
ファイルの env_variables
キーを使用します。例:
env_variables:
MY_VAR_COLOR: 'blue'
次の表には、機能の有効化、無効化、または構成を行うために使用できる環境変数が示されています。
環境変数 | 説明 | 型 | デフォルト |
---|---|---|---|
TMPDIR |
一時ディレクトリ | ディレクトリ名 | |
JAVA_TMP_OPTS |
JVM 一時ディレクトリ引数 | JVM 引数 | -Djava.io.tmpdir=${TMPDIR} |
GAE_MEMORY_MB |
利用可能なメモリ | サイズ | Google App Engine または /proc/meminfo - 400M で設定します。 |
HEAP_SIZE_RATIO |
ヒープ用メモリ | パーセント | 80 |
HEAP_SIZE_MB |
使用可能なヒープ | サイズ | ${HEAP_SIZE_RATIO} % / ${GAE_MEMORY_MB} |
JAVA_HEAP_OPTS |
JVM ヒープ引数 | JVM 引数 | -Xms${HEAP_SIZE_MB}M -Xmx${HEAP_SIZE_MB}M |
JAVA_GC_OPTS |
JVM GC の引数 | JVM 引数 | -XX:+UseG1GC と構成 |
JAVA_USER_OPTS |
JVM のその他の引数 | JVM 引数 | |
JAVA_OPTS |
JVM 引数 | JVM 引数 | 以下を参照 |
SHUTDOWN_LOGGING_THREAD_DUMP |
シャットダウン スレッドダンプ | ブール値 | false |
SHUTDOWN_LOGGING_HEAP_INFO |
シャットダウン ヒープ情報 | ブール値 | false |
SHUTDOWN_LOGGING_SAMPLE_THRESHOLD |
シャットダウン サンプリング | パーセント | 100 |
明示的に設定されていない場合、JAVA_OPTS
はデフォルトで JAVA_OPTS:=-showversion \
${JAVA_TMP_OPTS} \
${DBG_AGENT} \
${JAVA_HEAP_OPTS} \
${JAVA_GC_OPTS} \
${JAVA_USER_OPTS}
に設定されます。
実行されるコマンドラインは、実質的には次のようになります($@ は Docker のエントリ ポイントに渡される引数です)。
java $JAVA_OPTS "$@"
ローカルテスト
次を使用して、アプリをビルドできます。
mvn package
java
コマンドラインを使用して実行します。
java -jar target/myjar.jar
または、アプリをローカルで実行する方法に関して、アプリケーション フレームワークの手順を行います。
ローカル環境でテストする際に、リモートの Google クラウド サービスではなくエミュレートされた Google クラウド サービスを使用することもできます。Datastore、Pub/Sub、Bigtable のエミュレータが用意されています。アプリを実行する前に gcloud
コマンドを使用して起動します。
gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start
アプリのデプロイ
構成が完了したら、Google Cloud CLI を使用して app.yaml
ファイルと JAR を含むこのディレクトリをデプロイできます。
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 ランタイムのカスタマイズ
Dockerfile は、アプリを Java 8 ランタイムにデプロイするために必要ではありません。ただし、アプリで追加構成が必要な場合、Dockerfile を明示的に指定して、Java ランタイムをカスタマイズできます。
イメージをカスタム ランタイムのベースとして使用する場合は、app.yaml
で runtime: custom
指定し、Dockerfile を次のように記述します。
FROM gcr.io/google-appengine/openjdk:8
COPY your-application.jar $APP_DESTINATION
上記のラインによって、Docker コンテナの正しい場所に JAR が追加されます。
追加のディレクティブを Dockerfile に追加し、Java ランタイムをカスタマイズできます。カスタム ランタイムをビルドするをご覧ください。