リージョン 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
リファレンスをご覧ください。
ファイルの無視
.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
サービスの新しいバージョンをテストする手順は次のとおりです。
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.
- 必要な 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 マルチリージョン バケットを作成します。アプリケーションのコンテンツを保存するために、このバケットが必要です。次のシナリオのように、このバケットを作成できない場合に、エラーが返されます。
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.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 の範囲を拡張するします。