デプロイ
このページでは、App Engine Admin API を使用したアプリのデプロイで問題が発生した場合に表示されるエラー メッセージと、そのエラーの修正方法に関するヒントについて説明します。
The caller does not have permission to access project
アプリをデプロイすると、次のエラーが発生します。
User EMAIL_ADDRESS does not have permission to access project PROJECT_ID (or it may not exist): The caller does not have permission
このエラーは、アプリのデプロイに使用したアカウントに現在のプロジェクトのアプリをデプロイする権限がない場合に発生します。
この問題を解決するには、アカウントに App Engine デプロイ担当者(roles/appengine.deployer
)のロールを付与します。デプロイに使用したアカウントを確認するには、次のいずれかを行います。
- Google Cloud CLI を使用してデプロイした場合は、
gcloud auth list
コマンドを実行します。 - IDE からデプロイした場合は、Cloud Tools プラグインの設定を表示します。
Failed to fetch metadata from the registry
アプリをデプロイすると、次のエラーが発生します。
Failed to fetch metadata from the registry, with reason: generic::permission_denied
このエラーは、ストレージ管理者(roles/storage.admin
)ロールを持たないサービス アカウントから gcloud app deploy
コマンドを使用すると発生します。
この問題を解決するには、サービス アカウントにストレージ管理者のロールを付与します。
- 使用したアカウントを確認するには、
gcloud auth list
コマンドを実行します。 - App Engine デプロイ担当者(
roles/appengine.deployer
)のロールのみでは十分でない理由については、App Engine のロールをご覧ください。
Service accounts must have permissions on the image
アプリをデプロイすると、次のエラーが発生します。
The App Engine appspot and App Engine flexible environment service accounts must have permissions on the image IMAGE_NAME
このエラーは、次のいずれかの原因で発生します。
デフォルトの App Engine サービス アカウントに、ストレージ オブジェクト閲覧者(
roles/storage.objectViewer
)ロールがない。- この問題を解決するには、サービス アカウントにストレージ オブジェクト閲覧者ロールを付与します。
プロジェクトに、アクセスレベルを使用して Cloud Storage API へのアクセスを制限する VPC サービス境界がある。
- この問題を解決するには、アプリのデプロイに使用するサービス アカウントを、対応する VPC サービス境界の accessPolicies に追加します。
Failed to create cloud build
アプリをデプロイすると、次のエラーが発生します。
Failed to create cloud build: Permission denied
このエラーは、Cloud Build 編集者(roles/cloudbuild.builds.editor
)ロールが割り当てられていないアカウントから gcloud app deploy
コマンドを使用すると発生します。
この問題を解決するには、アプリのデプロイに使用しているサービス アカウントに Cloud Build 編集者ロールを付与します。
使用したアカウントを確認するには、gcloud auth list
コマンドを実行します。
Permissions error fetching application
アプリをデプロイすると、次のエラーが発生します。
Permissions error fetching application apps/app_name. Please make sure you are using the correct project ID and that you have permission to view applications on the project
Google Cloud CLI バージョン 328 以降を実行している場合は、アプリをデプロイすると次のエラーが発生します。
Permissions error fetching application apps/app_name. Please make sure that you have permission to view applications on the project and that SERVICE_ACCOUNT has the App Engine Deployer (roles/appengine.deployer) role.
このエラーは、アプリのデプロイに使用したアカウントに App Engine デプロイ担当者(roles/appengine.deployer
)ロールがない場合に表示されます。
この問題を解決するには、アプリのデプロイに使用したサービス アカウントに App Engine デプロイ担当者のロールが付与されていることを確認します。付与されていない場合は、このロールを付与します。デプロイに使用したアカウントを確認するには、次のいずれかを行います。
- Google Cloud CLI を使用してデプロイした場合は、
gcloud auth list
コマンドを実行します。 - IDE からデプロイした場合は、Cloud Tools プラグインの設定を表示します。
Timed out waiting for the app infrastructure to become healthy
アプリをデプロイすると、次のエラーが発生します。
Timed out waiting for the app infrastructure to become healthy
権限不足、コードエラー、CPU 性能やメモリ容量の不足、ヘルスチェックの失敗など、さまざまな要因が考えられます。このエラーは、App Engine フレキシブル環境でのみ発生します。
この問題を解決するには、次のように考えられる原因を排除します。
編集者(
roles/editor
ロール)がデフォルトの App Engine サービス アカウントに付与されていることを確認します。プロジェクトの組織のポリシーが外部 IP アドレスへのアクセスを制限していないか確認します。詳細については、App Engine フレキシブル環境の既知の問題をご覧ください。
アプリケーションの実行に使用するサービス アカウント(通常はデフォルトのサービス アカウント
app-id@appspot.gserviceaccount.com
)に次のロールが付与されていることを確認します。サービス アカウントに上記のロールがない場合は、それを付与します。
共有 VPC 設定にデプロイし、
app.yaml
でinstance_tag
を渡す場合は、こちらのセクションを参照して問題を解決してください。
Permissions error when deploying a service with Serverless VPC Access Connector
アプリをデプロイすると、次のエラーが発生します。
Please ensure you have [compute.globalOperations.get] on the service project
このエラーは、サーバーレス VPC コネクタを使用してアプリをデプロイするユーザーまたはサービス アカウントに必要な権限がない場合に発生します。
この問題を解決するには、デプロイを行うユーザーまたはサービス アカウントに、サーバーレス VPC アクセス ユーザーのロールと Compute 閲覧者 IAM ロールを付与します。
Invalid value error when deploying in a Shared VPC setup
アプリをデプロイするときに Flex VM インスタンスの Cloud Logging に次のエラーが表示されます。
Invalid value for field 'resource.tags.items[1]': 'aef-instance'. Duplicate tags are not allowed: aef-instance on compute.instances.insert
このエラーは、既知の問題(インスタンスの作成時に instance_tag を設定するとエラーが発生する)が原因で発生します。
この問題を解決するには、app.yaml
から instance_tag
フィールドを削除して再デプロイします。
Required 'compute.firewalls.list' permission
共有 VPC ネットワークにアプリをデプロイすると、次のエラーが発生します。
Request to https://compute.googleapis.com/compute/v1/projects/projects/PROJECT_ID/global/firewalls?key failed, details: Required 'compute.firewalls.list' permission for 'projects/PROJECT_ID'
このエラーは、ホスト プロジェクトの次のサービス アカウントに Compute ネットワーク ユーザー(roles/compute.networkUser
)ロールがない場合に発生します。
この問題を解決するには、ホスト プロジェクトの Google API サービス エージェントと App Engine フレキシブル環境サービス エージェント アカウントに Compute ネットワーク ユーザーのロールが付与されていることを確認してください。サービス アカウントに付与されていない場合は、ロールを付与します。
Build during deployment is failing without errors in build logs
アプリをデプロイすると、次のエラーが発生します。
ERROR: (gcloud.app.deploy) Cloud build failed. Check logs at https://console.cloud.google.com/cloud-build/builds/BUILD_ID?project=PROJECT_NUMBER Failure status: UNKNOWN: Error Response: [2] Build failed; check build logs for details
エラー メッセージのリンク先を確認すると、すべてのビルドステップが正常に完了していることが表示されていますが、アプリの作成に失敗しています。
この問題は、顧客管理の暗号鍵(CMEK)を使用している場合、または staging.PROJECT_ID.appspot.com
バケットにデータ保持ポリシーを設定している場合に発生します。
この問題を解決するには、staging.PROJECT_ID.appspot.com
バケットの以下の設定を変更します。
- 暗号化を Google が管理する暗号鍵に設定します。
- 保持ポリシーを削除します。
Errors when deploying to an existing flexible environment version
既存の App Engine フレキシブル バージョンにデプロイすると、次のエラーが発生する可能性があります。
ERROR: (gcloud.app.deploy) Error Response: [9] An internal error occurred while processing task /app-engine-flex/flex_await_healthy/flex_await_healthy
このエラーは、動作中の Docker イメージで異常なデプロイを更新しても、必ずしもデプロイが正常な状態になるわけではないことを示します。結果は、異常なデプロイによるインスタンスの状態によって異なります。エラーが発生しているにもかかわらず、適切な Docker イメージを指定すると、最終的にデプロイが正常な状態になる可能性があります。新しい Docker イメージで既存のバージョンを更新することはできますが、おすすめしません。
現在、バージョンでエラーが発生した場合はロールバックできません。
サービス提供
Nginx fails to connect or contact the app container
次のエラーは App Engine フレキシブル環境でのみ発生します。通常はエラーの直後に 502 エラーが返されます。
recv() failed (104: Connection reset by peer) while reading response header from upstream
このエラーは、nginx リバース プロキシ(nginx サイドカー)がアプリコンテナにアクセスできないことを示します。nginx ログの 502 エラーの終了タイミングを nginx.error ログのタイミングと比較できます。nginx.error に続けて 502 nginx エラーが発生している場合は、nginx 502 エラーが原因であると考えられます。
このエラーの多くは、アプリケーションの接続のキープアライブ タイムアウトが nginx のキープアライブ タイムアウトよりも短い場合に発生します。App Engine フレキシブル環境の nginx には 650 秒の keepalive_timeout
が存在するため、アプリケーションは少なくともこの期間、接続を維持する必要があります。デフォルトでは、Node.js アプリケーションの keepAliveTimeout
は 5,000 ミリ秒です。この場合、server.keepAliveTimeout
を 700,000 ミリ秒に設定できます。
トラブルシューティングを行うには、VM インスタンスに接続して、アプリコンテナで実行中のコードから書き込まれたログを確認し、必要に応じてロギングを追加して根本原因を特定します。