Java アプリをデプロイする

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

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

始める前に

アプリをデプロイするには、Cloud Platform プロジェクトと App Engine アプリケーションが必要です。詳細については、プロジェクト、アプリケーション、課金を管理するをご覧ください。

Maven を使用してアプリをデプロイするには、次の手順を行う必要があります。

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

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

SDK をダウンロード

アプリをデプロイする

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

Maven を使用してアプリをデプロイするには、次のコマンドをプロジェクトの最上位ディレクトリ(ここに pom.xml ファイルがあります)から実行します。次に例を示します。

mvn appengine:update

ターミナル ウィンドウに表示されたメッセージに沿って承認コードを入力すると、ウェブブラウザが起動して同意画面が表示されます。承認を受けるには、この画面の内容に同意する必要があります。画面の表示に沿って、ブラウザからコマンドラインにコードをコピーしてください。

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 に対応する Cloud Platform プロジェクト 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 ファイルの相対パスとファイル名を指定します。

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. Cloud Platformコンソールを使用して、すべてのインデックスのステータスを監視します。

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

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

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

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

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

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

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

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

トラブルシューティング

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

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 では、アプリケーションのデプロイ済みバージョン数の上限が定められています。これは、無料アプリケーションとデプロイ済みアプリケーションとで異なります。Cloud Platform Console を使用して古いバージョンを削除してから最新のコードをアップロードしてください。

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

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

次のステップ

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

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

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