リージョン ID
REGION_ID
は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r
が App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。
詳しくは、リージョン ID をご覧ください。
アプリケーションをローカルで実行し、App Engine にデプロイしてテストする方法を学びます。
ローカルでの実行
デプロイ前にアプリケーションの機能をテストするには、普段使用している開発ツールを使用して、アプリケーションをローカル環境で実行します。
プラグインに応じた特定のコマンドなどの詳細については、Java 8 / Jetty 9 ランタイムのローカルテストまたは Java 8 ランタイムのローカルテストをご覧ください。アプリケーションのデプロイ
始める前に
アプリケーションをデプロイする前に、次のことを確認してください。
Cloud プロジェクトのオーナーが App Engine を有効にしていること。
ユーザー アカウントに必要な権限が割り当てられていることを確認します。
サービスのデプロイ
サポートされている任意のツールを使用して、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
サービスの新しいバージョンをテストする手順は次のとおりです。
promote
パラメータをfalse
に設定して新しいバージョンをデプロイします。- Maven の場合、
pom.xml
ファイルでpromote
パラメータを設定します。 - Gradle の場合、
gradle.build
ファイルでpromote
パラメータを設定します。
- Maven の場合、
次の 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
に送信されたリクエストは、トラフィックを受信するように以前に構成したバージョンに引き続きルーティングされます。トラフィックが新しいバージョンに送信されるようにするには、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 マルチリージョン バケットを作成します。このバケットは、アプリケーションのコンテンツを保存するために必要です。以下のシナリオで、このバケットを作成できない場合に、このエラーが返されます。
デフォルトの App Engine フレキシブル環境サービス エージェントがプロジェクトに存在しないか、
App Engine flexible environment Service Agent
ロールがありません。エージェントのサービス アカウントをプロジェクトに戻すには、正しい IAM 権限を付与します。App Engine サービス アカウントがプロジェクトに存在しません。App Engine サービス アカウントが削除されてから 30 日が経過する前であれば、そのアカウントを復元できます。
プロジェクトが
constraints/gcp.resourceLocations
ポリシーを適用している組織に属しており、その組織では、作成された App Engine のリージョンと同じリージョンでのリソースの作成が許可されていません。プロジェクトに適用されるconstraints/gcp.resourceLocations
ポリシーをオーバーライドし、App Engine が作成されたリージョンでマルチリージョン ロケーションを許可する必要があります。
[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 の範囲を拡張します。