リージョン 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.
- 必要な 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 アプリが作成されるのと同じリージョンでマルチリージョン ロケーションを許可する必要があります。
たとえば、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 の範囲を拡張するします。