Java アプリをデプロイする

アプリのデプロイとは、開発したアプリを App Engine にアップロードして実行することです。アプリをデプロイすると、そのアプリのバージョンと、それに対応するサービスが App Engine の中に作成されます。アプリ全体(すべてのソースコードと設定ファイルも含む)をデプロイすることも、個々のバージョンまたは設定ファイルをデプロイして更新することもできます。

プログラムによってアプリをデプロイするには、Admin API を使用します。

始める前に

アプリをデプロイする前に:

Maven を使用してアプリケーションをデプロイするには、プロジェクトが App Engine の Maven プラグインを使用するように設定されている必要があります。

appcfg ツールをインストールする(別の方法)

appcfg ツールでアプリをデプロイするには、App Engine SDK for Java をダウンロードしてインストールする必要があります。

SDK をダウンロード

アプリをデプロイする

アプリを App Engine にデプロイするには、アプリケーションのルート ディレクトリで Maven(推奨)または appcfg コマンドを実行します。

Maven を使用してアプリケーションをデプロイするには、プロジェクトのトップレベル ディレクトリ(pom.xml ファイルがある)で次のコマンドを実行します。

App Engine SDK ベースの Maven プラグインを使用している場合は、次のコマンドを使用します。

mvn appengine:update

Cloud SDK ベースの Maven プラグインを使用している場合は、次のコマンドを使用します。

mvn appengine:deploy

appcfg を使用する(別の方法)

アプリをデプロイするには、appcfg コマンドを update アクション付きで実行します。このときに、WAR ファイルのディレクトリ パスを指定します。次に例を示します。

Windows

appengine-java-sdk\bin\appcfg.cmd [options] update [WAR_LOCATION]

Mac / Linux

./appengine-java-sdk/bin/appcfg.sh [options] update [WAR_LOCATION]

HTTP プロキシを使用する場合は、appcfg--proxy 引数でそのアドレスを指定します。別のプロキシを HTTPS に使用する場合は、--proxy_https 引数も指定します。詳細については、appcfg のコマンドライン引数をご覧ください。

Windows の場合

appengine-java-sdk\bin\appcfg.cmd --proxy=10.1.2.3 update [WAR_LOCATION]

Mac / Linux

./appengine-java-sdk/bin/appcfg.sh --proxy=10.1.2.3 update [WAR_LOCATION]

デフォルトでは、そのサービスに対して最初にデプロイされたバージョンが自動的に、トラフィックの 100% を受け取るように設定されます。ただし、同じサービスに対してデプロイされるそれ以降のバージョンはすべて、手動で設定されない限り、トラフィックを受け取ることはありません。

このツールは、appengine-web.xml ファイルにあるアプリケーション ID を自動的に使用します。ただし、サンプル アプリケーションの多くでは appengine-web.xml ファイルの中の <application><version> が省略されています。そのため、アプリケーション ID に GCP プロジェクト ID を指定し、適切なバージョン ID も指定する必要があります。次に例を示します。

Windows

appengine-java-sdk\bin\appcfg.cmd -A [YOUR_PROJECT_ID] -V [YOUR_VERSION_ID] update [WAR_LOCATION]

Mac / Linux

./appengine-java-sdk/bin/appcfg.sh -A [YOUR_PROJECT_ID] -V [YOUR_VERSION_ID] update [WAR_LOCATION]

複数サービス アプリケーションをデプロイする

アプリケーションが複数のサービスで構成されている場合は、対象のサービスを個別にデプロイして更新することも、すべてのサービスを同時にデプロイすることもできます。更新内容をサービスにデプロイするときに、個々の設定ファイルを更新することや、対応するバージョンのソースコードを更新することもできます。

たとえば、2 つのバージョンをデプロイして App Engine の中に作成するとします。各バージョンは専用のサービスで実行されます。最初のバージョンはアプリのフロントエンド サービス、他方のバージョンはバックエンド サービスを担当します。この場合に、個々の設定ファイルをデプロイすると、一方のサービスの設定のみが更新されます。また、フロントエンドとバックエンドの一方または両方のソースコードを更新するために、特定のサービスの新しいバージョンをデプロイすることもできます。

複数サービスの要件

アプリケーションのサービスが複数の場合も、デプロイと更新のためのコマンドは同じですが、次の要件があります。

  • 最初にアプリのバージョンの 1 つを default サービスにデプロイする必要があります。これで、以降のサービスを作成してデプロイできるようになります。

  • サービスの ID を、対応するバージョンの appengine-web.xml 構成ファイルで指定する必要があります。サービス ID を指定するには、module: [YOUR_SERVICE_ID] 要素定義を各設定ファイルに入れます。デフォルトでは、この要素定義が設定ファイルの中にない場合のバージョンのデプロイ先は default サービスとなります。

  • 複数のサービスを同時にデプロイするには、対応するすべての appengine-web.xml 設定ファイルをデプロイ コマンドの中で指定する必要があります。default サービスを最初に指定する必要があります。

複数のサービスをデプロイするには

アプリケーションのルート ディレクトリ(ここに構成ファイルがある)で、デプロイ コマンドを実行し、各サービスの appengine-web.xml ファイルの相対パスとファイル名を指定します。

Maven を使用する

プロジェクトのルート ディレクトリにサービスのみが含まれている場合は、すべてのサービスを 1 つの Maven コマンドでデプロイできます。

Maven のデプロイ コマンドは、プロジェクトの各サービスを繰り返し処理して、サービスの構成ファイルを見つけ、各サービスをデプロイします。

Maven を使用して複数のサービスをデプロイするには:

  1. 親の pom.xml ファイルに appengine-maven-plugin が追加されていることを確認します。
  2. 次のコマンドを実行します。

    mvn appengine:deploy
    
appcfg を使用する

Windows

appengine-java-sdk\bin\appcfg.cmd update [DEPLOYMENTS]

Mac / Linux

./appengine-java-sdk/bin/appcfg.sh update [DEPLOYMENTS]

[DEPLOYMENTS] は 1 つ以上の設定ファイルのパスと名前です。構成ファイルの間はスペース 1 個で区切ります。

例:

Windows

appengine-java-sdk\bin\appcfg.cmd update [WAR_LOCATION] [SERVICE1_WAR_LOCATION] [MOD2_WAR_LOCATION]

Mac / Linux

./appengine-java-sdk/bin/appcfg.sh update [WAR_LOCATION] [SERVICE1_WAR_LOCATION] [MOD2_WAR_LOCATION]

各サービスが正常にデプロイされると、その確認がコマンドラインに表示されます。

インデックスの更新

アプリで使用するインデックスを作成するか更新するには、datastore-indexes.xml 構成ファイルを Cloud Datastore にアップロードします。この構成ファイルがアップロードされた後、まだ存在していないインデックスが作成されます。

App Engine によるすべてのインデックスの作成が完了するまでに、しばらく時間がかかることがあるため、このようなインデックスは App Engine ですぐに使用できるようにはなりません。アプリがすでにトラフィックを受け取るように設定されている場合は、まだ作成中のインデックスを必要とするクエリに対して例外が発生する可能性があります。

例外を避けるには、次のように、すべてのインデックスを作成するための時間を確保する必要があります。

  • バージョンをデプロイする前に、index.xml 構成ファイルを Cloud Datastore にアップロードします。

    1. index.xml ファイルを Cloud Datastore にアップロードします。

      appcfg.sh update_indexes [YOUR_APP_DIR]
      

    2. GCP Console を使用して、すべてのインデックスのステータスを監視します。

      [データストア] ページに移動

    3. すべてのインデックスが作成されたら、App Engine の新しいバージョンをデプロイします。

  • トラフィックをバージョンに移行または分割する前に、インデックスを作成します。

    1. 新しいバージョン ID をアプリの appengine-web.xml ファイルの中で定義します。
    2. 新しいバージョンをデプロイします
    3. GCP Console を使用して、すべてのインデックスのステータスをモニタリングします。

      [データストア] ページに移動

    4. すべてのインデックスが作成されたら、GCP Console を使用して、トラフィックをバージョンに移行または分割します。

      [バージョン] ページに移動

インデックスの詳細については、データストア インデックスの構成をご覧ください。

トラブルシューティング

発生する可能性のあるエラー メッセージのうち主なものを次に示します。

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
必要な App Engine アプリケーションが GCP プロジェクトに含まれていない場合、gcloud app deploy コマンドは、gcloud app create コマンドを実行しようとして失敗することがあります。App Engine アプリケーションを作成するために必要な権限があるのは、オーナーの役割を持つアカウントのみです。
Command not found

appcfg.sh ツールや dev_appserver.sh ツールのシンボリック リンクを App Engine SDK のインストール時に作成しなかった場合は、ツールを実行するディレクトリのフルパスの指定が必要になることがあります。たとえば、[PATH_TO_APP_ENGINE_SDK]/appcfg.sh または [PATH_TO_APP_ENGINE_SDK]/dev_appserver.sh です。

Import Error

Google Cloud SDK と元の App Engine SDK の両方をインストールしている場合、PATH へのエントリが互いに競合し、インポート エラーが発生する可能性があります。Cloud SDK コマンドの実行中にエラーが発生した場合は、元の App Engine SDK を明示的に使用してみてください。これらのコマンドが優先されるように、元の App Engine SDK のエントリを PATH の前に移動することができます。または、完全なディレクトリパス([PATH_TO_APP_ENGINE_SDK]/dev_appserver.sh)を指定してコマンドを実行することもできます。
ヒント: Linux または Mac では、which dev_appserver.py を実行して PATH 内の最初の SDK を判断できます。

[400] The first service (module) you upload to a new application must be the 'default' service (module)

アプリケーションの複数のサービスをデプロイして作成するには、その前に default サービスをデプロイして作成する必要があります。バージョンを default サービスにデプロイする方法の詳細については、複数のサービス アプリケーションをデプロイするをご覧ください。

Too Many Versions (403)

App Engine では、アプリケーションのデプロイ済みバージョン数の上限が定められています。これは、無料アプリケーションとデプロイ済みアプリケーションとで異なります。GCP Console を使用して以前のバージョンを削除してから、最新のコードをアップロードできます。

You do not have permission to modify this app (403)

このエラーが発生するのは、認証を受けたアカウントに権限がないために、コマンドまたは appengine-web.xml で指定されているアプリケーション ID をデプロイできない場合です。アプリケーション ID が正しいことと、GCP Console プロジェクト ID の値に対応していることを確認してください。次に、コンソールでプロジェクト権限を調べて、アプリをデプロイするのに十分な権限レベルがアカウントに付与されていることを確認してください。アカウントの権限とプロジェクト ID が正しいと思われる場合は、SDK の強制再認証をしてみてください。それには、.appcfg_oauth2_tokens ファイルをホーム ディレクトリから削除してからデプロイ コマンドをもう一度実行します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Java の App Engine スタンダード環境