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

リージョン 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 を使用します。

始める前に

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

サービスのデプロイ

アプリケーション サービスのバージョンと構成ファイルをデプロイし、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 リファレンスをご覧ください。

ファイルの無視

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

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

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

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

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

gcloud app deploy --image-url gcr.io/YOUR_PROJECT_ID/YOUR_CONTAINER_IMAGE

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

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

Docker のベースイメージ

カスタム ランタイム アプリケーションを作成する場合は、Docker ファイルを作成するをご覧ください。

アプリケーションの表示

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

gcloud app browse

App Engine でのテスト

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

  1. promote パラメータを false に設定して新しいバージョン 。--no-promote フラグを含めます。

    gcloud app deploy --no-promote

  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 をサービスの名前に置き換えます。

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.
必要な App Engine アプリケーションが Google Cloud プロジェクトに含まれていない場合、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 マルチリージョン バケットを作成します。アプリケーションのコンテンツを保存するために、このバケットが必要です。次のシナリオのように、このバケットを作成できない場合に、エラーが返されます。

[13] An internal error occurred.

このエラーは、共有 VPC 設定を使用してネットワーク構成でサービスをデプロイしている場合に発生する可能性があります。次のようにしてください。

  1. app.yaml 構成が有効であることを確認します。
  2. App Engine フレキシブル環境が、共有 VPC 設定のすべての要件を満たしていることを確認します。共有 VPC ネットワークでの App Engine フレキシブル環境の使用をご覧ください。
  3. プロジェクト内でサービス アカウントが構成されていることを確認します。ない場合は、アカウントを復元する必要があります。共有 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 の範囲を拡張するします。