リージョン ID
REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r は App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。
詳しくは、リージョン ID をご覧ください。
アプリケーションをローカルで実行し、App Engine にデプロイしてテストする方法を説明します。
ローカルで実行する
デプロイ前にアプリケーションをテストするには、普段使用している開発ツールを使用して、アプリケーションをローカル環境で実行します。
アプリケーションをデプロイする
gcloud app deploy コマンドを使用して、アプリケーションを App Engine にデプロイします。
デプロイするアプリは Cloud Build サービスによって自動的にコンテナ イメージにビルドされ、そのイメージが App Engine フレキシブル環境にデプロイされます。このコンテナには、ローカルでランタイム イメージに行った変更が含まれます。
プログラムによってアプリをデプロイする場合は、Admin API を使用します。
始める前に
アプリケーションをデプロイする前に、次のことを確認してください。
- Google Cloud プロジェクトのオーナーが App Engine 用の Google Cloud プロジェクトを設定する必要があります。 
- ユーザー アカウントに必要な権限が割り当てられていることを確認します。 
サービスをデプロイする
アプリケーション サービスのバージョンと構成ファイルをデプロイし、App Engine にアプリケーションをデプロイします。
- 各ファイルを個別にターゲットとして指定してデプロイすることで、サービスの他の構成ファイルをデプロイできます。以下に例を示します。 - gcloud app deploy cron.yaml gcloud app deploy dispatch.yaml gcloud app deploy index.yaml
- 独自のバージョン ID を指定するには、 - --versionフラグを使用します。
- トラフィックが新しいバージョンに自動的にルーティングされないようにするには、 - --no-promoteフラグを使用します。
- 特定の Google Cloud プロジェクトにデプロイするには、 - --projectフラグを使用します。
たとえば、app.yaml ファイルで定義されているサービスを特定のGoogle Cloud プロジェクトにデプロイし、独自のバージョン ID を割り当て、トラフィックが新しいバージョンにルーティングされないようにするには、次のコマンドを実行します。
gcloud app deploy --project PROJECT_ID --version VERSION_ID --no-promote
詳細については、gcloud app deploy リファレンスをご覧ください。
gcloud CLI 用のプロパティを設定し、SDK 構成を作成して管理すると、デプロイのたびに --project などのフラグを指定する必要がなくなります。
ファイルを無視する
.gcloudignore ファイルを使用すると、サービスのデプロイ時に Google Cloudにアップロードしないファイルとディレクトリを指定できます。これは、デプロイ時にアップロードする必要のないビルド アーティファクトやその他のファイルを無視する場合に便利です。
.gcloudignore ファイルの構文の詳細については、gcloud リファレンスをご覧ください。
デプロイ用にコンテナを手動でビルドする
Google Cloudの外部でコンテナ イメージをビルドする手順は次のとおりです。
- イメージを Artifact Registry リポジトリにアップロードします。詳細については、イメージの push と pull をご覧ください。
- gcloud app deployコマンドを使用してイメージを App Engine にデプロイします。
たとえば Docker を使用してローカルでコンテナ イメージをビルドした場合は、イメージを Artifact Registry に push し、次のようにコマンドの --image-url フラグでイメージの URL を指定できます。
gcloud app deploy --image-url LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE
次のように置き換えます。
- LOCATION は、イメージが保存されているリポジトリの場所に置き換えます。 
- PROJECT-ID は、 Google Cloudプロジェクト ID に置き換えます。 
- REPOSITORY は、イメージが保存されているリポジトリの名前に置き換えます。 
- IMAGE は、コンテナ イメージの名前に置き換えます。 
自動化された継続的デプロイ パイプラインを使用する
Cloud Build では、継続的デプロイ パイプラインを使用してデプロイを自動化できます。詳細については、Cloud Build ドキュメントの App Engine へのデプロイとビルドトリガーの作成と管理をご覧ください。
Docker のベースイメージ
カスタム ランタイム アプリケーションを作成する場合は、Docker ファイルを作成するをご覧ください。
アプリケーションを表示する
アプリケーションを App Engine にデプロイした後、次のコマンドを実行してブラウザを起動できます。https://PROJECT_ID.REGION_ID.r.appspot.com にアクセスすると、アプリケーションが表示されます。
gcloud app browse
App Engine でテストする
新しいバージョンを構成してトラフィックを受信する前に、App Engine でテストを行うことができます。たとえば、default サービスの新しいバージョンをテストする手順は次のとおりです。
- promoteパラメータを- falseに設定して新しいバージョン。- --no-promoteフラグを含めます。- gcloud app deploy --no-promote 
- 次の 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 をサービスの名前に置き換えます。
https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com
特定のサービスとバージョンをターゲットにする方法については、リクエストのルーティング方法をご覧ください。
ビルド環境変数を使用する
Buildpack をサポートするランタイム用のビルド環境変数を設定することもできます。
ビルド環境変数は、アプリのデプロイに使用する Buildpack の構成に指定できる Key-Value ペアです。たとえば、コンパイラ オプションを指定できます。
始める前に、次のことを行います。
- キーの先頭は大文字の ASCII 文字にする必要があります。キーには大文字の ASCII 文字、数字、アンダースコアのみ使用できます。
- 接尾辞に GOOGLE_*キーを持つ変数は作成しないでください。
- 次のキーは Google で使用するために予約されています。
- GOOGLE_RUNTIME
- GOOGLE_RUNTIME_VERSION
- GOOGLE_ENTRYPOINT
- GOOGLE_DEVMODE
 
- Buildpack でサポートされている任意の鍵を使用できます。
Buildpack で環境変数を使用するには、app.yaml ファイルで build_env_variables フィールドを指定します。
Buildpack の詳細については、こちらをご覧ください。
Cloud Trace を使用する
Cloud Trace は、リクエストがアプリケーションを通じてどのように伝播するかを把握するために役立ちます。リクエストごとの詳しいレイテンシ情報の分析や、アプリケーション全体のレイテンシの確認などができます。
トレースの詳細の表示ができます。Trace エクスプローラでは、特定の App Engine サービスとバージョンでフィルタできます。
トラブルシューティング
アプリのデプロイ時に発生する可能性のある一般的なエラー メッセージは次のとおりです。
- PERMISSION_DENIED: Operation not allowed
- The "appengine.applications.create" permission is required.
-  Google Cloud プロジェクトに必要な App Engine アプリケーションが含まれていない場合、gcloud app deployコマンドによってgcloud app createコマンドが実行されるときに失敗する可能性があります。App Engine アプリケーションの作成に必要な権限は、オーナーのロールを持つアカウントのみに付与されています。
- 502 Bad Gateway
- app.yamlの構成に誤りがあると、 Google 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 アプリが作成されるのと同じリージョンでマルチリージョン ロケーションを許可する必要があります。
 - たとえば、App Engine アプリが - europe-westリージョンで作成される場合、このリージョンが- europe-west1のロケーションにマッピングされている場合でも、- in:eu-locations(これにはすべての- EUリージョンが含まれます)のリソースを許可するように制約を変更する必要があります。App Engine で作成されるバケットがマルチリージョン バケットであるため、このような変更が必要です。App Engine アプリが- USリージョンで作成される場合は- in:us-locationsを許可し、- ASIAリージョンで作成された場合は- in:asia-locationsを許可する必要があります。
- [13] An internal error occurred.
- このエラーは、共有 VPC 設定を使用してネットワーク構成でサービスをデプロイしている場合に発生する可能性があります。次のようにしてください。 - app.yaml構成が有効であることを確認します。
- App Engine フレキシブル環境が、共有 VPC 設定のすべての要件を満たしていることを確認します。共有 VPC ネットワークでの App Engine フレキシブル環境の使用をご覧ください。
- プロジェクト内でサービス アカウントが構成されていることを確認します。ない場合は、アカウントを復元する必要があります。共有 VPC ホスト プロジェクトのサブネット リージョンは、App Engine 環境が作成されたロケーションと一致する必要があります。
 
- 問題が解決しない場合は、Google Cloud SDK を使用してサービスを再デプロイします。必ず - --verbosity=debugフラグを追加してください。Google Cloud サポートに連絡し、コマンドの出力をお知らせください。
- IP space of {USER_SUBNETWORK_NAME} is exhausted and needs to be expanded.
- このエラー メッセージでデプロイが失敗した場合、App Engine サービス用に構成されたネットワークに、サービスの新しいインスタンスに割り振るアドレスが残っていません。この問題を解決するには、App Engine フレキシブル環境サービス用に構成されたサブネットで VPC の範囲を拡張するします。