アプリケーションのテストとデプロイ

リージョン ID

REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r が App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。

詳しくは、リージョン ID をご覧ください。

アプリケーションをローカルで実行し、App Engine にデプロイしてテストする方法を学びます。

ローカルでの実行

デプロイ前にアプリケーションの機能をテストするには、普段使用している開発ツールを使用して、アプリケーションをローカル環境で実行します。

プラグインに応じた特定のコマンドなどの詳細については、Java 8 / Jetty 9 ランタイムのローカルテストまたは Java 8 ランタイムのローカルテストをご覧ください。

アプリケーションのデプロイ

始める前に

アプリケーションをデプロイする前に、次のことを確認してください。

サービスのデプロイ

サポートされている任意のツールを使用して、Java アプリケーションを App Engine フレキシブル環境にデプロイできます。コマンドラインでデプロイする場合は、gcloud CLI から gcloud app deploy を使用するか、Maven または Gradle プラグインを使用します。IDE を使用してデプロイする場合は、IntelliJ プラグインまたは Eclipse プラグインを使用します。アプリをプログラムでデプロイするには、Admin API を使用します。

ファイルの無視

.gcloudignore ファイルを使用すると、サービスのデプロイ時に Google Cloud にアップロードしないファイルとディレクトリを指定できます。これは、デプロイ時にアップロードする必要のないビルド アーティファクトやその他のファイルを無視する場合に便利です。

.gcloudignore ファイルの構文の詳細については、gcloud リファレンスをご覧ください。

デプロイで使用するコンテナを手動で作成する

Google Cloud Platform 以外でコンテナ イメージをビルドするには、まずイメージをコンテナ イメージのリポジトリにアップロードする必要があります。これで、gcloud app deploy コマンドを使用してイメージを App Engine にデプロイできるようになります。

たとえば Docker でローカルにコンテナ イメージを作成する場合、このイメージを Google Container Registry に push し、コマンドの --image-url フラグでイメージの URL を次のように指定できます。

gcloud app deploy src/main/appengine/app.yaml --image-url gcr.io/YOUR_PROJECT_ID/YOUR_CONTAINER_IMAGE

自動の継続的デプロイ パイプラインの使用

Cloud Build では、継続的デプロイ パイプラインを使用してデプロイを自動化できます。詳細については、Cloud Build ドキュメントのアーティファクトのデプロイおよびビルドトリガーを使用したビルドの自動化をご覧ください。

Java の Docker ベースイメージ

Java カスタム ランタイム アプリケーションをゼロから作成する場合は、Dockerfile で提供されるベースイメージを使用できます。

ランタイム Docker コマンド
Java 8 FROM gcr.io/google_appengine/openjdk
Java 8 / Jetty 9 FROM gcr.io/google-appengine/jetty

アプリケーションの表示

アプリケーションを App Engine にデプロイした後、次のコマンドを実行してブラウザを起動できます。https://PROJECT_ID.REGION_ID.r.appspot.com にアクセスすると、アプリケーションが表示されます。

gcloud app browse

App Engine でのテスト

新しいバージョンを構成してトラフィックを受信する前に、App Engine でテストを行うことができます。たとえば、default サービスの新しいバージョンをテストする手順は次のとおりです。

  1. promote パラメータを false に設定して新しいバージョンをデプロイします。

  2. 次の URL に移動して、新しいバージョンにアクセスします。

    https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com

    これで、新しいバージョンを App Engine ランタイム環境でテストできるようになりました。Google Cloud コンソールのログ エクスプローラにログを表示して、アプリケーションをデバッグできます。詳細については、アプリケーション ログの書き込みをご覧ください。

    https://PROJECT_ID.REGION_ID.r.appspot.com に送信されたリクエストは、トラフィックを受信するように以前に構成したバージョンに引き続きルーティングされます。

  3. トラフィックが新しいバージョンに送信されるようにするには、Google Cloud コンソールでトラフィックを移行します。

    バージョンの管理

    デプロイしたバージョンを選択して、[トラフィックを移行] をクリックします。

同じ手順で他のサービスの新しいバージョンをテストできます。この場合、上記の URL の default をサービスの名前に置き換えます。

特定のサービスとバージョンをターゲットにする方法については、リクエストのルーティング方法をご覧ください。

トラブルシューティング

アプリのデプロイ時に発生する可能性のある一般的なエラー メッセージは次のとおりです。

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
必要な App Engine アプリケーションが Cloud プロジェクトに含まれていない場合、gcloud app deploy コマンドが gcloud app create コマンドを実行しようとしたときに失敗する可能性があります。App Engine アプリケーションの作成に必要な権限は、オーナーのロールを持つアカウントのみに付与されています。
502 Bad Gateway
app.yaml の構成に誤りがあると、Cloud プロジェクトを起動できないことがあります。詳細なエラー メッセージについては、アプリのログを確認してください。
[13] An internal error occurred while creating a Cloud Storage bucket.

アプリケーションと同じリージョンに、App Engine がユーザーに代わってデフォルトの Cloud Storage マルチリージョン バケットを作成します。このバケットは、アプリケーションのコンテンツを保存するために必要です。以下のシナリオで、このバケットを作成できない場合に、このエラーが返されます。

[13] An internal error occurred.

このエラーは、共有 VPC 設定を使用してネットワーク構成でサービスをデプロイしている場合に発生します。App Engine フレキシブル環境が、この構成のすべての要件を満たしていることを確認します。次に、この設定用に構成されたサービス アカウントがプロジェクト内に存在することを確認します。存在しない場合は、アカウントを復元する必要があります。共有 VPC ホスト プロジェクトのサブネットのリージョンは、App Engine 環境が作成されたロケーションと一致する必要があります。

app.yaml 構成が有効なことを確認しても問題が解決しない場合は、Google Cloud SDK を使用し、--verbosity=debug フラグを追加してサービスを再デプロイします。GCP サポートに連絡して、コマンドの出力を提供します。

IP space of {USER_SUBNETWORK_NAME} is exhausted and needs to be expanded.

このエラー メッセージでデプロイが失敗した場合、App Engine サービス用に構成されたネットワークに、サービスの新しいインスタンスに割り振るアドレスが残っていないことを示します。この問題を解決するには、App Engine フレキシブル環境サービス用に構成されたサブネットで VPC の範囲を拡張します。