App Engine-Fehler beheben

Deployment

Wenn bei der Bereitstellung Ihrer Anwendung mithilfe der App Engine Admin API Probleme auftreten, werden auf dieser Seite Fehlermeldungen angezeigt, die Ihnen ggf. angezeigt werden, und Sie erhalten Vorschläge zur Behebung der einzelnen Fehler.

Der Aufrufer ist nicht berechtigt, auf das Projekt zuzugreifen

Der folgende Fehler tritt auf, wenn Sie Ihre Anwendung bereitstellen:

User EMAIL_ADDRESS does not have permission to access project PROJECT_ID (or it may not exist): The caller does not have permission

Dieser Fehler tritt auf, wenn das Konto, das Sie für die Bereitstellung Ihrer Anwendung verwendet haben, keine Berechtigung zum Bereitstellen von Anwendungen für das aktuelle Projekt hat.

Um dieses Problem zu beheben, müssen Sie dem Konto die Rolle „App Engine-Bereitsteller“ (roles/appengine.deployer ) zuweisen. Führen Sie einen der folgenden Schritte aus, um festzustellen, welches Konto Sie zur Bereitstellung verwendet haben:

  • Wenn Sie die Google Cloud CLI zur Bereitstellung verwendet haben, führen Sie den Befehl gcloud auth list aus.
  • Wenn Sie die Bereitstellung in einer IDE vorgenommen haben, rufen Sie die Einstellungen für das Cloud Tools-Plug-in auf.

Metadaten konnten nicht aus der Registry abgerufen werden

Der folgende Fehler tritt auf, wenn Sie Ihre Anwendung bereitstellen:

Failed to fetch metadata from the registry, with reason: generic::permission_denied

Dieser Fehler tritt auf, wenn Sie den Befehl gcloud app deploy über ein Dienstkonto verwenden, das nicht die Rolle „Storage-Administrator“ (roles/storage.admin) hat.

Um dieses Problem zu beheben, müssen Sie dem Dienstkonto die Rolle „Storage-Administrator“ zuweisen.

  • Führen Sie den Befehl gcloud auth list aus, um zu sehen, welches Konto Sie verwendet haben.
  • Unter App Engine-Rollen erfahren Sie mehr darüber, warum es in manchen Fällen möglicherweise nicht ausreichend ist, nur die Rolle „App Engine-Bereitsteller“ (roles/appengine.deployer) zuzuweisen.

Dienstkonten müssen Berechtigungen für das Image haben

Der folgende Fehler tritt auf, wenn Sie Ihre Anwendung bereitstellen:

The App Engine appspot and App Engine flexible environment service accounts must have permissions on the image IMAGE_NAME

Dieser Fehler tritt aus einem der folgenden Gründe auf:

Fehler beim Erstellen von Cloud Build

Der folgende Fehler tritt auf, wenn Sie Ihre Anwendung bereitstellen:

Failed to create cloud build: Permission denied

Dieser Fehler tritt auf, wenn Sie den gcloud app deploy-Befehl über ein Konto verwenden, das nicht die Rolle „Cloud Build-Bearbeiter“ (roles/cloudbuild.builds.editor) hat.

So beheben Sie das Problem:Die Rolle "Cloud Build-Bearbeiter" an das Dienstkonto, das Sie zum Bereitstellen der Anwendung verwenden, zuweisen.

Führen Sie den Befehl gcloud auth list aus, um zu sehen, welches Konto Sie verwendet haben.

Berechtigungsfehler beim Abrufen der Anwendung

Der folgende Fehler tritt auf, wenn Sie Ihre Anwendung bereitstellen:

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

Wenn Sie die Google Cloud CLI ab Version 328 ausführen, tritt der folgende Fehler auf, wenn Sie Ihre Anwendung bereitstellen:

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.

Dieser Fehler tritt auf, wenn das Konto, mit dem Sie Ihre Anwendung bereitgestellt haben, nicht die Rolle „App Engine-Bereitsteller“ (roles/appengine.deployer) hat.

Um dieses Problem zu beheben, prüfen Sie, ob Sie dem Dienstkonto, das Sie zum Bereitstellen Ihrer Anwendung verwendet haben, die Rolle „App Engine-Bereitsteller“ zugewiesen haben, die Sie zum Bereitstellen der Anwendung verwendet haben. Wenn das Dienstkonto sie nicht hat, weisen Sie die Rolle zu. Führen Sie einen der folgenden Schritte aus, um festzustellen, welches Konto Sie zur Bereitstellung verwendet haben:

  • Wenn Sie die Google Cloud CLI zur Bereitstellung verwendet haben, führen Sie den Befehl gcloud auth list aus.
  • Wenn Sie die Bereitstellung in einer IDE vorgenommen haben, rufen Sie die Einstellungen für das Cloud Tools-Plug-in auf.

Zeitüberschreitung beim Warten auf die ordnungsgemäße Funktion der App-Infrastruktur

Der folgende Fehler tritt auf, wenn Sie Ihre Anwendung bereitstellen:

Timed out waiting for the app infrastructure to become healthy

Verschiedene Faktoren können diesen Fehler verursachen, z. B. fehlende Berechtigungen, Codefehler, unzureichende CPU- oder Speicherkapazität oder fehlgeschlagene Systemdiagnosen. Der Fehler tritt nur in der flexiblen App Engine-Umgebung auf.

Schließen Sie die folgenden möglichen Ursachen aus, um dieses Problem zu beheben:

  1. Prüfen Sie, ob Ihrem App Engine-Standarddienstkonto die Rolle Bearbeiter (roles/editor) zugewiesen wurde.
  2. Prüfen Sie, ob die Organisationsrichtlinie für Ihr Projekt den Zugriff auf externe IP-Adressen einschränkt. Weitere Informationen finden Sie unter Bekannte Probleme mit der flexiblen App Engine-Umgebung.
  3. Prüfen Sie, ob Sie dem Dienstkonto, mit dem Sie Ihre Anwendung ausführen (in der Regel das Standarddienstkonto app-id@appspot.gserviceaccount.com), die folgenden Rollen zugewiesen haben:

  4. Weisen Sie die Rollen zu, wenn das Dienstkonto sie noch nicht hat.

  5. Wenn Sie die Bereitstellung in der freigegebenen VPC vornehmen und instance_tag in app.yaml übergeben, lesen Sie diesen Abschnitt, um das Problem zu beheben.

Berechtigungsfehler beim Bereitstellen eines Dienstes mit dem serverlosen VPC Access Connector

Der folgende Fehler tritt auf, wenn Sie Ihre Anwendung bereitstellen:

Please ensure you have [compute.globalOperations.get] on the service project

Dieser Fehler tritt auf, wenn der Nutzer oder das Dienstkonto, der versucht, die Anwendung mit dem serverlosen VPC-Connector bereitzustellen, nicht die erforderlichen Berechtigungen hat.

Achten Sie darauf, dass der Nutzer oder das Dienstkonto, das die Bereitstellung durchführt, über die Rollen Serverless VPC Access User und Compute Viewer verfügt.

Fehler "Ungültiger Wert" beim Bereitstellen in einer Konfiguration mit freigegebener VPC

Der folgende Fehler wird in Cloud Logging für Flex-VM-Instanzen angezeigt, wenn Sie Ihre Anwendung bereitstellen:

Invalid value for field 'resource.tags.items[1]': 'aef-instance'. Duplicate
tags are not allowed: aef-instance on compute.instances.insert

Dieser Fehler ist auf ein aktuelles bekanntes Problem zurückzuführen, bei dem das Festlegen von "instance_tag" beim Erstellen von Instanzen zu Fehlern führt.

Entfernen Sie das Feld instance_tag aus app.yaml und wiederholen Sie die Bereitstellung, um das Problem zu beheben.

Fehler bei der Bereitstellung von Anwendungen mit maximal drei Instanzen

Bei bereitgestellten Anwendungen, bei denen für max_instances bis zu drei Instanzen festgelegt sind, können unerwartete Fehler oder Ausfallzeiten auftreten. Um das Problem zu beheben, geben Sie in app.yaml mindestens vier Instanzen an und stellen Sie die Anwendung noch einmal bereit.

Fehler beim Überschreiten der maximalen Anzahl von Instanzen

Der folgende Fehler tritt auf, wenn Sie Ihre Anwendung bereitstellen:

You may not have more than 'xx' total max instances in your project.

Die Anzahl von Instanzen, die Sie pro Projekt erstellen können, ist begrenzt. Anfragen zum Erstellen zusätzlicher Instanzen schlagen fehl, wenn dieses Limit überschritten wird.

Um dieses Problem zu beheben, legen Sie den Wert von max_instances in Ihrer app.yaml-Datei auf einen Wert unter diesem Grenzwert fest oder löschen Sie einige Dienste oder Versionen, um die Summe von max_instances auf einen Wert unterhalb des Limits zu bringen.

Erforderliche Berechtigung "compute.firewalls.list"

Der folgende Fehler tritt auf, wenn Sie die Anwendung in einem freigegebenen VPC-Netzwerk bereitstellen:

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'

Dieser Fehler tritt auf, wenn die folgenden Dienstkonten für das Hostprojekt nicht die Rolle "Compute-Netzwerknutzer" (roles/compute.networkUser) haben:

Prüfen Sie zur Behebung des Problems, ob Sie den Dienstkonten des Google APIs-Dienst-Agents und der flexiblen App Engine-Umgebung für das Hostprojekt die Rolle Compute-Netzwerknutzer gewährt haben. Gewähren Sie die Rolle, wenn die Dienstkonten sie nicht haben.

Build schlägt während der Bereitstellung ohne Fehler in den Build-Logs fehl

Der folgende Fehler tritt auf, wenn Sie Ihre Anwendung bereitstellen:

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

Wenn Sie auf den Link in der Fehlermeldung klicken, sehen Sie, dass alle Build-Schritte erfolgreich waren. Die Anwendung konnte jedoch keinen Build erstellen.

Dieses Problem tritt auf, wenn Sie vom Kunden verwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) verwenden oder eine Datenaufbewahrungsrichtlinie für Ihren staging.PROJECT_ID.appspot.com-Bucket eingerichtet haben.

Ändern Sie folgende Einstellungen für den Bucket staging.PROJECT_ID.appspot.com, um dieses Problem zu beheben:

Bereitstellung schlägt aufgrund einer Einschränkung der Organisationsrichtlinie fehl

Der folgende Fehler tritt auf, wenn Sie Ihre Anwendung bereitstellen:

ERROR: (gcloud.app.deploy) Error Response: [13] An internal error occurred while processing task /app-engine-flex/....: Request to https://compute.googleapis.com/compute/[VERSSION]/[PROJECT_ID]/... failed, details: Constraint constraints/compute.disableGuestAttributesAccess violated for project [PROJECT_ID].

Dieser Fehler kann aufgrund der Erzwingung der Organisationsrichtlinieneinschränkung constraints/compute.disableGuestAttributesAccess bei der Bereitstellung Ihrer Anwendung auftreten. Diese Richtlinie wird standardmäßig für alle Anwendungen in der flexiblen App Engine-Umgebung erzwungen.

Um dieses Problem zu beheben, müssen Sie die Organisationsrichtlinieneinschränkung constraints/compute.disableGuestAttributesAccess deaktivieren.

Fehler bei der Bereitstellung in einer vorhandenen Version der flexiblen Umgebung

Der folgende Fehler kann auftreten, wenn die Bereitstellung in einer vorhandenen flexiblen App Engine-Version erfolgt:

ERROR: (gcloud.app.deploy) Error Response: [9] An internal error occurred while
processing task /app-engine-flex/flex_await_healthy/flex_await_healthy

Dieser Fehler weist darauf hin, dass das Aktualisieren eines fehlerhaften Deployments mit einem funktionierenden Docker-Image nicht immer zu einem fehlerfreien Deployment führt. Das Ergebnis hängt vom Status der Instanzen von der fehlerhaften Bereitstellung ab. Trotz des Fehlers kann das Deployment letztendlich fehlerfrei werden, wenn Sie ein gutes Docker-Image bereitstellen. Es ist nicht empfehlenswert, eine vorhandene Version mit einem neuen Docker-Image zu aktualisieren, auch wenn dies zulässig ist.

Aktuell gibt es kein Rollback bei einem Versionsfehler.

Bereitstellung

In den folgenden Abschnitten werden die Initialisierungs- und Bereitstellungsfehler der Anwendung behandelt.

Berechtigungsfehler beim Erstellen einer Anwendung mit dem Standarddienstkonto

Wenn Sie eine Anwendung erstellen, nachdem Sie die App Engine API zum ersten Mal aktiviert haben, schlägt sie mit folgenden Fehlern fehl:

  • gcloud CLI:

    An internal error occurred while calling service consumer manager for service account.
    Creating  App Engine application in project [PROJECT__ID] and [REGION]....failed. DEBUG: (gcloud.app.create) Error Response: [13] an internal error has occurred
    
  • Anfragelogs:

    Service account creation is not allowed on this project.
    
  • Console:

    Error while initialising App Engine.
    

Dieser Fehler kann aufgrund der Erzwingung der Organisationsrichtlinieneinschränkung constraints/iam.disableServiceAccountCreation beim Erstellen Ihrer Anwendung auftreten. Diese Richtlinie verhindert die Bereitstellung des App Engine-Standarddienstkontos PROJECT_ID@appspot.gserviceaccount.com. Das Standarddienstkonto ist für die Anwendungserstellung erforderlich und kann nicht übersprungen werden. Dies gilt auch, wenn Sie ein versionsspezifisches Dienstkonto verwenden.

Zur Behebung dieses Problems müssen Sie die Organisationsrichtlinieneinschränkung constraints/iam.disableServiceAccountCreation vorübergehend entfernen, damit das App Engine-Standarddienstkonto erstellt und bereitgestellt werden kann. Das App Engine-Standarddienstkonto kann dann gelöscht oder durch ein Dienstkonto ersetzt werden, das Sie nach erfolgreicher Bereitstellung erstellen.

Wenn Sie ein von Ihnen erstelltes Dienstkonto verwenden, lesen Sie die Übersicht über Rollenempfehlungen, um zu verstehen, wie Sie eingeschränkte Berechtigungen erzwingen können, z. B. durch Bereitstellen einer Tokenersteller-Rolle für das Dienstkonto, das Sie für den Dienst-Agent erstellen.

Nginx kann keine Verbindung zu dem Anwendungscontainer herstellen oder diese kontaktieren

Der folgende Fehler tritt nur in der flexiblen App Engine-Umgebung auf und wird in der Regel sofort nach dem Fehler mit 502-Fehlern zurückgegeben:

recv() failed (104: Connection reset by peer) while reading response header from upstream

Dieser Fehler gibt an, dass der nginx-Reverse-Proxy (nginx-Sidecar) den Anwendungscontainer nicht erreichen kann. In den Logs können Sie die Schließen-Zeit des 502-Fehlers im nginx-Log mit dem Zeitpunkt des nginx.error-Logs vergleichen. Ein nginx.error gefolgt von einem 502 nginx-Fehler ist wahrscheinlich die Ursache des nginx 502-Fehlers.

Dieser Fehler tritt häufig auf, wenn das Keepalive-Zeitlimit der Verbindung für die Anwendung kleiner ist als das Keepalive-Zeitlimit von nginx. Da nginx in der flexiblen App Engine-Umgebung ein keepalive_timeout von 650 Sekunden hat, müssen Anwendungen die Verbindungen mindestens so lange aktiv halten. Standardmäßig haben Node.js-Anwendungen eine keepAliveTimeout von 5.000 Millisekunden. In diesem Fall können Sie für server.keepAliveTimeout 700.000 Millisekunden festlegen.

Zur Fehlerbehebung können Sie die Logs prüfen, die vom Code im Anwendungscontainer geschrieben wurden. Dazu stellen Sie eine Verbindung zur VM-Instanz her und fügen bei Bedarf weitere Logging-Daten hinzu, um die Ursache zu ermitteln.

Unzureichender Speicher

Der folgende Fehler tritt in der flexiblen App Engine-Umgebung auf und gibt in der Regel den Fehler 502 zurückgegeben:

kernel: [  133.706951] Out of memory: Kill process 4490 (java) score 878 or sacrifice child
kernel: [  133.714468] Killed process 4306 (java) total-vm:5332376kB, anon-rss:2712108kB, file-rss:0kB

Dieser Fehler gibt an, dass App Engine die Anwendung beendet hat.

Dieser Fehler tritt auf, wenn die Instanz nicht genügend Speicher hat. Standardmäßig hat die flexible App Engine-Umgebung 1 GB Speicher, wobei dem Anwendungscontainer lediglich 600 MB zur Verfügung stehen.

Prüfen Sie, ob in den Logs ein Eintrag in Bezug auf fehlenden Speichers vorliegt, um das Problem zu beheben. Aktualisieren Sie Ihre Konfiguration von memory_gb und stellen Sie noch einmal bereit.

Unzureichende offene Verbindungen zum Verarbeiten eingehender Anfragen

Bei Anwendungen wird möglicherweise der Fehler 502 angezeigt, wenn die maximale Anzahl der wartenden Verbindungen gleich oder größer als 75% der Anzahl aktiver Verbindungen ist.

Prüfe zur Behebung des Problems die Cloud Monitoring-Messwerte für die maximale Anzahl aktiver und wartender Verbindungen und verringere die Anzahl der wartenden Verbindungen, um sicherzustellen, dass die maximale Anzahl der wartenden Verbindungen gleich oder weniger als 75% der Anzahl aktiver Verbindungen beträgt.