Fehlerbehebung bei Cloud Functions

In diesem Dokument werden einige häufig auftretende Probleme beschrieben und wie Sie diese beheben können.

Deployment

Die Bereitstellungsphase ist eine häufige Ursache für Probleme. Viele Probleme, die bei der Bereitstellung auftreten können, stehen im Zusammenhang mit Rollen und Berechtigungen. Weitere Probleme haben mit einer falschen Konfiguration zu tun.

Ein Nutzer mit der Rolle "Betrachter" kann keine Funktion bereitstellen.

Ein Nutzer, dem die Rolle "Projektbetrachter" oder "Cloud Functions-Betrachter" zugewiesen wurde, hat Lesezugriff auf Funktionen und Funktionsdetails. Diese Rollen dürfen keine neuen Funktionen bereitstellen.

Fehlermeldung

Cloud Console

You need permissions for this action. Required permission(s): cloudfunctions.functions.create

Cloud SDK

ERROR: (gcloud.functions.deploy) PERMISSION_DENIED: Permission
'cloudfunctions.functions.sourceCodeSet' denied on resource
'projects/<PROJECT_ID>/locations/<LOCATION>` (or resource may not exist)

Die Lösung

Weisen Sie dem Nutzer eine Rolle mit den entsprechenden Zugriffsberechtigungen zu.

Nutzer mit der Rolle "Projektbetrachter" oder "Cloud Functions-Funktion" können keine Funktion bereitstellen

Zum Bereitstellen einer Funktion muss einem Nutzer, dem die Rolle "Projektbetrachter", "Cloud Functions-Entwickler" oder "Cloud Functions-Administrator" zugewiesen wurde, eine zusätzliche Rolle zugewiesen werden.

Fehlermeldung

Cloud Console

User does not have the iam.serviceAccounts.actAs permission on
<PROJECT_ID>@appspot.gserviceaccount.com required to create function.
You can fix this by running
'gcloud iam service-accounts add-iam-policy-binding <PROJECT_ID>@appspot.gserviceaccount.com --member=user: --role=roles/iam.serviceAccountUser'

Cloud SDK

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Forbidden],
message=[Missing necessary permission iam.serviceAccounts.actAs for <USER>
on the service account <PROJECT_ID>@appspot.gserviceaccount.com. Ensure that
service account <PROJECT_ID>@appspot.gserviceaccount.com is a member of the
project <PROJECT_ID>, and then grant <USER> the role 'roles/iam.serviceAccountUser'.
You can do that by running
'gcloud iam service-accounts add-iam-policy-binding <PROJECT_ID>@appspot.gserviceaccount.com --member=<USER> --role=roles/iam.serviceAccountUser'
In case the member is a service account please use the prefix 'serviceAccount:' instead of 'user:'.]

Die Lösung

Weisen Sie dem Nutzer eine zusätzliche Rolle zu, und zwar die IAM-Rolle "Dienstkontonutzer" (roles/iam.serviceAccountUser) für das Cloud Functions-Laufzeitdienstkonto.

Bereitstellungsdienstkonto fehlt zum Bereitstellen von Funktionen die Rolle "Dienst-Agent"

Wenn Sie Verwaltungsaufgaben für Ihr Projekt ausführen, verwendet der Cloud Functions-Dienst das Dienstkonto des Cloud Functions-Dienst-Agents (service-<PROJECT_NUMBER>@gcf-admin-robot.iam.gserviceaccount.com). Standardmäßig wird diesem Konto die Cloud Functions-Rolle cloudfunctions.serviceAgent zugewiesen. Diese Rolle ist für Integrationen von Cloud Pub/Sub, IAM, Cloud Storage und Firebase erforderlich. Wenn Sie die Rolle für dieses Dienstkonto geändert haben, schlägt die Bereitstellung fehl.

Fehlermeldung

Cloud Console

Missing necessary permission resourcemanager.projects.getIamPolicy for
serviceAccount:service-<PROJECT_NUMBER>@gcf-admin-robot.iam.gserviceaccount.com on project <PROJECT_ID>.
Please grant serviceAccount:service-<PROJECT_NUMBER>@gcf-admin-robot.iam.gserviceaccount.com
the roles/cloudfunctions.serviceAgent role. You can do that by running
'gcloud projects add-iam-policy-binding <PROJECT_ID> --member=serviceAccount:service-<PROJECT_NUMBER>@gcf-admin-robot.iam.gserviceaccount.com --role=roles/cloudfunctions.serviceAgent'

Cloud SDK

ERROR: (gcloud.functions.deploy) OperationError: code=7,
message=Missing necessary permission resourcemanager.projects.getIamPolicy
for serviceAccount:service-<PROJECT_NUMBER>@gcf-admin-robot.iam.gserviceaccount.com
on project <PROJECT_ID>. Please grant
serviceAccount:service-<PROJECT_NUMBER>@gcf-admin-robot.iam.gserviceaccount.com
the roles/cloudfunctions.serviceAgent role. You can do that by running
'gcloud projects add-iam-policy-binding <PROJECT_ID> --member=serviceAccount:service-<PROJECT_NUMBER>@gcf-admin-robot.iam.gserviceaccount.com --role=roles/cloudfunctions.serviceAgent'

Die Lösung

Setzen Sie dieses Dienstkonto auf die Standardrolle zurück.

Bereitstellungsdienstkonto fehlen zum Bereitstellen einer ereignisgesteuerten Funktion Pub/Sub-Berechtigungen

Der Cloud Functions-Dienst verwendet beim Ausführen von administrativen Aufgaben das Dienstkonto des Cloud Functions-Dienst-Agents (service-<PROJECT_NUMBER>@gcf-admin-robot.iam.gserviceaccount.com). Standardmäßig wird diesem Konto die Cloud Functions-Rolle cloudfunctions.serviceAgent zugewiesen. Zum Bereitstellen von ereignisgesteuerten Funktionen muss der Cloud Functions-Dienst auf Cloud Pub/Sub zugreifen, um Themen und Abos zu konfigurieren. Wenn die dem Dienstkonto zugewiesene Rolle geändert wird und die entsprechenden Berechtigungen nicht auf andere Weise gewährt wurden, kann der Cloud Functions-Dienst nicht auf Cloud Pub/Sub zugreifen und die Bereitstellung schlägt fehl.

Fehlermeldung

Cloud Console

Failed to configure trigger PubSub projects/<PROJECT_ID>/topics/<FUNCTION_NAME>

Cloud SDK

ERROR: (gcloud.functions.deploy) OperationError: code=13,
message=Failed to configure trigger PubSub projects/<PROJECT_ID>/topics/<FUNCTION_NAME>

Die Lösung

Sie haben folgende Möglichkeiten:

Standardlaufzeitdienstkonto ist nicht vorhanden

Wenn kein vom Nutzer verwaltetes Laufzeitdienstkonto angegeben ist, wird für Funktionen der 1. Generation standardmäßig das App Engine-Dienstkonto als ihr Laufzeitdienstkonto verwendet. Wenn dieses Standardkonto gelöscht wurde und kein vom Nutzer verwaltetes Konto angegeben ist, schlagen Bereitstellungen fehl.

Fehlermeldung

Cloud Console

Default service account '<PROJECT_ID>@appspot.gserviceaccount.com' doesn't exist. Please recreate this account or specify a different account. Please visit https://cloud.google.com/functions/docs/troubleshooting for in-depth troubleshooting documentation.

Cloud SDK

ERROR: (gcloud.functions.deploy) ResponseError: status=[400], code=[Ok], message=[Default service account '<PROJECT_ID>@appspot.gserviceaccount.com' doesn't exist. Please recreate this account or specify a different account. Please visit https://cloud.google.com/functions/docs/troubleshooting for in-depth troubleshooting documentation.]

Die Lösung

Nutzer fehlen beim Bereitstellen einer Funktion die Berechtigungen für das Laufzeitdienstkonto

In Umgebungen, in denen mehrere Funktionen auf verschiedene Ressourcen zugreifen, werden anstelle des Standardlaufzeitdienstkontos normalerweise funktionsspezifische Identitäten mit benannten Laufzeitdienstkonten verwendet (PROJECT_ID@appspot.gserviceaccount.com).

Wenn Sie kein Standardlaufzeitdienstkonto verwenden möchten, muss der Bereitsteller für das Konto die Berechtigung iam.serviceAccounts.actAs haben. Ein Nutzer, der ein Konto erstellt, das kein Standardlaufzeitdienstkonto ist, erhält diese Berechtigung automatisch. Anderen Bereitstellern muss diese Berechtigung jedoch von einem Nutzer mit den entsprechenden Berechtigungen gewährt werden.

Fehlermeldung

Cloud SDK

ERROR: (gcloud.functions.deploy) ResponseError: status=[400], code=[Bad Request],
message=[Invalid function service account requested: <SERVICE_ACCOUNT_NAME@<PROJECT_ID>.iam.gserviceaccount.com]

Die Lösung

Weisen Sie dem Nutzer die Rolle roles/iam.serviceAccountUser für das benutzerdefinierte <SERVICE_ACCOUNT_NAME>-Laufzeitdienstkonto zu. Diese Rolle umfasst die Berechtigung iam.serviceAccounts.actAs.

Cloud Functions-Dienst-Agent-Dienstkonto fehlt Berechtigungen für Projekt-Buckets bei der Bereitstellung einer Funktion

Cloud Functions-Funktionen können nur von Ereignissen ausgelöst werden, die aus Cloud Storage-Buckets im gleichen Google Cloud Platform-Projekt stammen. Darüber hinaus muss das Dienstkonto des Cloud Functions-Dienst-Agents (service-<PROJECT_NUMBER>@gcf-admin-robot.iam.gserviceaccount.com) für Ihr Projekt die Rolle cloudfunctions.serviceAgent haben.

Fehlermeldung

Cloud Console

Deployment failure: Insufficient permissions to (re)configure a trigger
(permission denied for bucket <BUCKET_ID>). Please, give owner permissions
to the editor role of the bucket and try again.

Cloud SDK

ERROR: (gcloud.functions.deploy) OperationError: code=7, message=Insufficient
permissions to (re)configure a trigger (permission denied for bucket <BUCKET_ID>).
Please, give owner permissions to the editor role of the bucket and try again.

Die Lösung

Sie haben folgende Möglichkeiten:

Nutzer mit der Rolle "Projektbearbeiter" können keine Funktion veröffentlichen

Damit nicht autorisierte Entwickler die Authentifizierungseinstellungen für Funktionsaufrufe nicht ändern können, muss der Nutzer oder Dienst, der die Funktion bereitstellt, die Berechtigung cloudfunctions.functions.setIamPolicy haben.

Fehlermeldung

Cloud SDK

ERROR: (gcloud.functions.add-iam-policy-binding) ResponseError: status=[403], code=[Forbidden], message=[Permission 'cloudfunctions.functions.setIamPolicy' denied on resource 'projects/<PROJECT_ID>/locations/<LOCATION>/functions/<FUNCTION_NAME> (or resource may not exist).]

Die Lösung

Sie haben folgende Möglichkeiten:

Funktionsbereitstellung schlägt fehl, da Cloud Build VPC-SC nicht unterstützt

Cloud Functions verwendet Cloud Build, um Ihren Quellcode in einem ausführbaren Container zu erstellen. Um Cloud Functions mit VPC Service Controls verwenden zu können, müssen Sie eine Zugriffsebene für das Cloud Build-Dienstkonto in Ihrem Dienstperimeter konfigurieren:

Fehlermeldung

Cloud Console

Eine der folgenden Optionen:

Error in the build environment

OR

Unable to build your function due to VPC Service Controls. The Cloud Build
service account associated with this function needs an appropriate access
level on the service perimeter. Please grant access to the Cloud Build
service account: '{PROJECT_NUMBER}@cloudbuild.gserviceaccount.com' by
following the instructions at
https://cloud.google.com/functions/docs/securing/using-vpc-service-controls#grant-build-access"

Cloud SDK

Eine der folgenden Optionen:

ERROR: (gcloud.functions.deploy) OperationError: code=13, message=Error in
the build environment

OR

Unable to build your function due to VPC Service Controls. The Cloud Build
service account associated with this function needs an appropriate access
level on the service perimeter. Please grant access to the Cloud Build
service account: '{PROJECT_NUMBER}@cloudbuild.gserviceaccount.com' by
following the instructions at
https://cloud.google.com/functions/docs/securing/using-vpc-service-controls#grant-build-access"

Die Lösung

Wenn die Logs Ihres Projekts zu geprüften Ressourcen im Abschnitt "VPC Service Controls" den Hinweis "Request is prohibited by organization's policy" enthalten und ein Cloud Storage-Label haben, müssen Sie dem Cloud Build-Dienstkonto Zugriff auf den Perimeter von VPC Service Controls gewähren.

Funktionsbereitstellung schlägt aufgrund eines falsch angegebenen Einstiegspunkts fehl

Die Cloud Functions-Bereitstellung kann fehlschlagen, wenn der Einstiegspunkt zum Code, d. h. der exportierte Funktionsname, nicht richtig angegeben ist.

Fehlermeldung

Cloud Console

Deployment failure: Function failed on loading user code. Error message:
Error: please examine your function logs to see the error cause:
https://cloud.google.com/functions/docs/monitoring/logging#viewing_logs

Cloud SDK

ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function
failed on loading user code. Error message: Please examine your function
logs to see the error cause:
https://cloud.google.com/functions/docs/monitoring/logging#viewing_logs

Die Lösung

Ihr Quellcode muss eine Einstiegspunktfunktion enthalten, die in Ihrer Bereitstellung korrekt angegeben wurde, entweder über die Cloud Console oder das Cloud SDK.

Die Bereitstellung der Funktion schlägt fehl, wenn die Organisationsrichtlinie „Beschränkung von Ressourcenstandorten” verwendet wird

Wenn Ihre Organisation eine Richtlinie zur Beschränkung von Ressourcenstandorten verwendet, wird dieser Fehler möglicherweise in Ihren Logs angezeigt. Dies weist darauf hin, dass die Bereitstellungspipeline keinen multiregionalen Speicher erstellen konnte.

Fehlermeldung

In Cloud Build-Logs:

Token exchange failed for project '<PROJECT_ID>'.
Org Policy Violated: '<REGION>' violates constraint 'constraints/gcp.resourceLocations'

In Cloud Storage-Logs:

<REGION>.artifacts.<PROJECT_ID>.appspot.com` storage bucket could not be created.

Die Lösung

Wenn Sie constraints/gcp.resourceLocations in den Einschränkungen Ihrer Organisationsrichtlinie verwenden, sollten Sie den entsprechenden Standort mit mehreren Regionen angeben. Wenn Sie beispielsweise Bereitstellungen in einer der us-Regionen vornehmen, sollten Sie us-locations verwenden.

Wenn Sie jedoch eine differenziertere Kontrolle benötigen und die Funktionsbereitstellung auf eine einzelne Region (nicht mehrere Regionen) beschränken möchten, erstellen Sie zuerst den multiregionalen Bucket:

  1. Gesamte Mehrfachregion zulassen
  2. Testfunktion bereitstellen
  3. Ändern Sie die Organisationsrichtlinie nach erfolgreicher Bereitstellung wieder, damit nur die jeweilige Region zugelassen wird.

Der multiregionale Storage-Bucket bleibt für diese Region verfügbar, sodass nachfolgende Bereitstellungen erfolgreich sein können. Wenn Sie später eine Region allowlist außerhalb der Region auswählen möchten, in der der Multi-Regional-Storage-Bucket erstellt wurde, müssen Sie den Vorgang wiederholen.

Fehler bei der Funktionsbereitstellung während der Ausführung des globalen Bereichs der Funktion

Dieser Fehler gibt an, dass ein Problem mit Ihrem Code vorliegt. Die Bereitstellungspipeline hat die Bereitstellung der Funktion abgeschlossen, ist aber im letzten Schritt fehlgeschlagen. Es wird eine Systemdiagnose an die Funktion gesendet. Diese Systemdiagnose dient dazu, den globalen Bereich einer Funktion auszuführen, wodurch eine Ausnahme, ein Absturz oder eine Zeitüberschreitung ausgelöst werden kann. Im globalen Bereich werden Bibliotheken häufig geladen und Clients initialisiert.

Fehlermeldung

In Cloud Logging-Logs:

"Function failed on loading user code. This is likely
due to a bug in the user code."

Die Lösung

Eine ausführlichere Fehlermeldung finden Sie in den Build-Logs Ihrer Funktion sowie in den Laufzeitlogs Ihrer Funktion. Wenn unklar ist, warum die Funktion ihren globalen Bereich nicht ausführen konnte, können Sie den Code vorübergehend mit der verzögerten Initialisierung der globalen Variablen in den Anfrageaufruf verschieben. Dadurch können Sie zusätzliche Logberichte zu Ihren Clientbibliotheken hinzufügen, die bei der Instanziierung möglicherweise eine Zeitüberschreitung auslösen (insbesondere wenn sie andere Dienste aufrufen) oder abstürzen oder Ausnahmen ausgeben. Außerdem können Sie versuchen, das Zeitlimit für Funktionen zu erhöhen.

Build

Wenn Sie den Quellcode Ihrer Funktion in Cloud Functions bereitstellen, wird diese Quelle in einem Cloud Storage-Bucket gespeichert. Cloud Build hinterlegt den Code anschließend automatisch in einem Container-Image und überträgt dieses per Push an Container Registry. Cloud Functions greift auf dieses Image zu, wenn es zum Ausführen der Funktion den Container ausführen muss.

Build ist aufgrund fehlender Container Registry-Images fehlgeschlagen

Cloud Functions (1. Generation) verwendet Container Registry zur Verwaltung von Images der Funktionen. Container Registry verwendet Cloud Storage, um die Ebenen der Images in Buckets mit dem Namen STORAGE-REGION.artifacts.PROJECT-ID.appspot.com zu speichern. Wenn Sie die Verwaltung des Objektlebenszyklus für diese Buckets verwenden, wird die Bereitstellung der Funktionen unterbrochen, da diese von den vorhandenen Images abhängig sind.

Fehlermeldung

Cloud Console

Build failed: Build error details not available. Please check the logs at
<CLOUD_CONSOLE_LINK>

CLOUD_CONSOLE_LINK contains an error like below :
failed to get OS from config file for image 'us.gcr.io/<PROJECT_ID>/gcf/us-central1/<UUID>/worker:latest'"

Cloud SDK

ERROR: (gcloud.functions.deploy) OperationError: code=13, message=Build
failed: Build error details not available. Please check the logs at
<CLOUD_CONSOLE_LINK>

CLOUD_CONSOLE_LINK contains an error like below :
failed to get OS from config file for image 'us.gcr.io/<PROJECT_ID>/gcf/us-central1/<UUID>/worker:latest'"

Die Lösung

  1. Deaktivieren Sie die Lebenszyklusverwaltung für die Buckets, die für Container Registry erforderlich sind.
  2. Löschen Sie alle Images der betroffenen Funktionen. Sie können auf Build-Logs zugreifen, um die Image-Pfade zu finden. Referenzskript zum Bulk-Löschen der Images. Beachten Sie, dass dies keine Auswirkungen auf die Funktionen hat, die derzeit bereitgestellt werden.
  3. Stellen Sie die Funktionen noch einmal bereit.

Serving

Die Bereitstellungsphase kann ebenfalls eine Fehlerquelle sein.

Berechtigungsfehler beim Bereitstellen aufgrund der Funktion, die eine Authentifizierung erfordert

HTTP-Funktionen ohne aktivierte nicht authentifizierte Aufrufe zulassen beschränken den Zugriff auf Endnutzer und Dienstkonten, die nicht die entsprechenden Berechtigungen haben. Diese Fehlermeldung weist darauf hin, dass der Aufrufer nicht die Berechtigung hat, die Funktion aufzurufen.

Fehlermeldung

HTTP-Fehlerantwortcode: 403 Unzulässig

HTTP-Fehlerantworttext: Fehler: Unzulässig. Ihr Client ist zum Abrufen der URL /<FUNCTION_NAME> über diesen Server nicht berechtigt.

Die Lösung

Sie können:

  • Stellen Sie die Funktion noch einmal bereit, um nicht authentifizierte Aufrufe zuzulassen, wenn dies von Ihrer Organisation unterstützt wird. Dies kann zu Testzwecken nützlich sein.

  • Rufen Sie Ihre HTTP-Funktion mit Authentifizierungsdaten im Anfrageheader auf. So können Sie z. B. über gcloud ein Identitätstoken abrufen:

    curl  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
      https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME
    

    Siehe Für Aufruf authentifizieren

  • Für Cloud Functions (1. Generation) zulassen Sie allen Nutzern für die jeweilige Funktion den öffentlichen (nicht authentifizierten) Zugriff.

  • Für Cloud Functions (2. Generation) haben Sie folgende Möglichkeiten:

    • Weisen Sie dem Nutzer für die jeweilige Funktion die Cloud IAM-Rolle Cloud Run Invoker zu.

    • Über die Google Cloud Console:

      Zur Google Cloud Console

      1. Klicken Sie auf den verknüpften Namen der Funktion, auf die Sie Zugriff gewähren möchten.

      2. Klicken Sie oben rechts auf der Übersichtsseite der Funktionsdetails auf den Link Powered by Cloud Run.

      3. Klicken Sie auf Trigger und wählen Sie Nicht authentifizierte Aufrufe zulassen aus.

      4. Klicken Sie auf Speichern.

Fehler beim Bereitstellen der Berechtigung aufgrund der Konfiguration "Nur internen Traffic zulassen"

Mit den Einstellungen für eingehenden Traffic wird festgelegt, ob eine HTTP-Funktion von Ressourcen außerhalb des Google Cloud-Projekts oder des Dienstperimeters für VPC Service Controls aufgerufen werden kann. Wenn für eingehenden Netzwerktraffic die Einstellung "Nur internen Traffic zulassen" konfiguriert ist, weist diese Fehlermeldung darauf hin, dass nur Anfragen von VPC-Netzwerken im selben Projekt oder Perimeter für VPC Service Controls zulässig sind.

Fehlermeldung

HTTP-Fehlerantwortcode: 403 Unzulässig

HTTP-Fehlerantworttext: Fehler 403 (Unzulässig) 403. Hier liegt ein Fehler vor. Der Zugriff ist unzulässig. Weitere Informationen liegen uns nicht vor.

Die Lösung

Sie haben folgende Möglichkeiten:

Der Funktionsaufruf enthält keine gültigen Anmeldedaten für die Authentifizierung

Zum Aufrufen einer Cloud Functions-Funktion, die mit eingeschränktem Zugriff eingerichtet wurde, ist ein ID-Token erforderlich. Zugriffstokens oder Aktualisierungstokens funktionieren nicht.

Fehlermeldung

HTTP-Fehlerantwortcode: 401 Nicht autorisiert

HTTP-Fehlerantworttext: Ihr Client verfügt nicht über die erforderliche Berechtigung für die angeforderte URL.

Die Lösung

Achten Sie darauf, dass Ihre Anfragen einen Authorization: Bearer ID_TOKEN-Header enthalten und das Token ein ID-Token und kein Zugriffs- oder Aktualisierungstoken ist. Wenn Sie dieses Token manuell mit dem privaten Schlüssel eines Dienstkontos generieren, müssen Sie das selbst signierte JWT-Token gemäß dieser Anleitung gegen ein von Google signiertes Identitätstoken austauschen.

Versuch, eine Funktion mit curl-Weiterleitungen zur Google-Anmeldeseite aufzurufen

Wenn Sie versuchen, eine nicht vorhandene Funktion aufzurufen, antwortet Cloud Functions mit einer HTTP/2 302-Weiterleitung, über die Sie zur Anmeldeseite des Google-Kontos gelangen. Das ist falsch. Sie sollte mit einem HTTP/2 404-Fehlercode der Ausgabe antworten. Das Problem wird gerade behoben.

Die Lösung

Achten Sie darauf, dass Sie den Namen der Funktion korrekt angeben. Sie können jederzeit mit gcloud functions call prüfen, was den richtigen 404-Fehler für eine fehlende Funktion zurückgibt.

App stürzt ab und Funktionsausführung schlägt fehl

Dieser Fehler gibt an, dass der Prozess, der die Funktion ausführt, beendet ist. Dies liegt in der Regel daran, dass die Laufzeit aufgrund von Problemen im Funktionscode abstürzt. Das kann auch auftreten, wenn ein Deadlock oder eine andere Bedingung im Code der Funktion dazu führt, dass die Laufzeit auf eingehende Anfragen nicht mehr reagiert.

Fehlermeldung

In Cloud Logging-Logs: "Infrastruktur kann nicht mit der Funktion kommunizieren. Im vom Nutzer bereitgestellten Code ist vermutlich ein Absturz oder ein Deadlock aufgetreten."

Die Lösung

Unterschiedliche Laufzeiten können in verschiedenen Szenarien abstürzen. Um die Ursache zu finden, geben Sie detaillierte Logs zur Fehlerbehebung aus, prüfen Sie die Anwendungslogik und testen Sie auf Grenzfälle.

Die Cloud Functions-Python37-Laufzeit hat derzeit eine bekannte Beschränkung für die Rate, mit der Logging verarbeitet werden kann. Wenn die Logberichte einer Python37-Laufzeitinstanz mit einer ausreichend hohen Rate geschrieben werden, kann dieser Fehler auftreten. Python-Laufzeitversionen >= 3.8 haben diese Einschränkung nicht. Zur Vermeidung dieses Problems empfehlen wir Nutzern, zu einer höheren Version der Python-Laufzeit zu migrieren.

Weitere Informationen zu möglichen Fehlerursachen finden Sie auf unserer Supportseite.

Die Funktion wird während der Ausführung beendet oder nach Beendigung des Codes weiter ausgeführt.

Bei einigen Cloud Functions-Laufzeiten können Nutzer asynchrone Aufgaben ausführen. Wenn Ihre Funktion solche Aufgaben erstellt, muss sie auch explizit warten, bis diese Aufgaben abgeschlossen sind. Andernfalls kann die Funktion mit der falschen Zeit nicht mehr ausgeführt werden.

Fehlerverhalten

Ihre Funktion zeigt eine dieser Verhaltenweisen:

  • Ihre Funktion wird beendet, während asynchrone Aufgaben noch ausgeführt werden, bevor die festgelegte Zeitüberschreitung verstrichen ist.
  • Die Ausführung der Funktion wird nicht gestoppt, wenn diese Aufgaben abgeschlossen sind, und wird bis zum Ablauf des Zeitlimits fortgesetzt.

Die Lösung

Wenn Ihre Funktion vorzeitig beendet wird, sollten Sie überprüfen, ob alle asynchronen Aufgaben der Funktion abgeschlossen sind, bevor Sie eine der folgenden Aktionen ausführen:

  • Zurückgeben eines Werts
  • Ein zurückgegebenes Promise-Objekt auflösen oder ablehnen (nur Node.js-Funktionen)
  • Nicht erfasste Ausnahmen und/oder Fehler auslösen
  • HTTP-Antwort senden
  • Aufruf einer Callback-Funktion

Wenn Ihre Funktion nicht beendet wird, nachdem alle asynchronen Aufgaben abgeschlossen sind, sollten Sie prüfen, ob die Funktion nach Abschluss alle Funktionen von Cloud Functions richtig anzeigt. Wichtig ist, dass Sie eine der oben aufgeführten Vorgänge ausführen, sobald Ihre Funktion die asynchronen Aufgaben abgeschlossen hat.

JavaScript-Heap-Speicher aus Speicher

Bei Funktionen von Node.js 12+ mit Speicherlimits größer als 2 GiB müssen Nutzer NODE_OPTIONS mit max_old_space_size konfigurieren, damit das JavaScript-Heap-Limit dem Speicherlimit der Funktion entspricht.

Fehlermeldung

Cloud Console

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

Die Lösung

Stellen Sie die Node.js 12+-Funktion bereit. Dabei muss NODE_OPTIONS so konfiguriert sein, dass max_old_space_size auf das Speicherlimit Ihrer Funktion festgelegt ist. Beispiel:

gcloud functions deploy envVarMemory \
--runtime nodejs20 \
--set-env-vars NODE_OPTIONS="--max_old_space_size=8192" \
--memory 8Gi \
--trigger-http

Funktion beendet

Wenn der Prozess, der den Code ausführt, aufgrund eines Laufzeitfehlers oder eines absichtlichen Exits beendet wurde, kann eine der folgenden Fehlermeldungen angezeigt werden. Es besteht auch eine geringe Wahrscheinlichkeit, dass ein seltener Infrastrukturfehler aufgetreten ist.

Fehlermeldungen

Funktionsaufruf wurde unterbrochen. Fehler: Funktion beendet. Empfohlene Maßnahme: Prüfen Sie die Logs auf Beendigungsgründe. Weitere Informationen zur Fehlerbehebung finden Sie unter Logging.

Eine Anfrage abgelehnt. Fehler: Funktion beendet. Empfohlene Maßnahme: Prüfen Sie die Logs auf Beendigungsgründe. Weitere Informationen zur Fehlerbehebung finden Sie unter Logging.

Funktion kann nicht initialisiert werden. Fehler: Funktion beendet. Empfohlene Maßnahme: Prüfen Sie die Logs auf Beendigungsgründe. Weitere Informationen zur Fehlerbehebung finden Sie unter Logging.

Die Lösung

  • Bei einer Hintergrundfunktion (durch Pub/Sub ausgelöst), wenn eine executionID mit der Anfrage verknüpft ist, die zu einem Fehler geführt hat, versuchen Sie, die Option Bei Fehler noch einmal versuchen zu aktivieren. Dies ermöglicht das Wiederholen der Funktionsausführung, wenn eine Ausnahme ausgelöst wird, die eine Wiederholung zulässt. Weitere Informationen zur sicheren Verwendung dieser Option, einschließlich der Maßnahmen zur Vermeidung von Endlosschleifen und zur Behebung wiederholbarer/fehlerhafter Fehler, finden Sie unter Best Practices.

  • Hintergrundaktivitäten (alles, was nach Beendigung der Funktion geschieht) können zu Problemen führen. Prüfen Sie daher Ihren Code. Cloud Functions garantiert keine anderen Aktionen als die, die während des Ausführungszeitraums der Funktion ausgeführt werden. Daher kann eine Aktivität, die im Hintergrund ausgeführt wird, möglicherweise durch den Bereinigungsprozess beendet werden.

  • Bei plötzlichen Traffic-Spitzen können Sie die Arbeitslast etwas länger verteilen. Testen Sie die Funktionen auch lokal mit dem Functions Framework, bevor Sie sie in Cloud Functions bereitstellen. So können Sie gewährleisten, dass der Fehler nicht durch fehlende oder widersprüchliche Abhängigkeiten verursacht wird.

Laufzeitfehler beim Zugriff auf Ressourcen, die durch VPC-SC geschützt sind

Cloud Functions verwendet standardmäßig öffentliche IP-Adressen, um ausgehende Anfragen an andere Dienste zu senden. Wenn sich Ihre Funktionen nicht in einem VPC Service Controls-Perimeter befinden, erhalten sie möglicherweise HTTP-403-Antworten, wenn sie versuchen, auf Google Cloud-Dienste zuzugreifen, die durch VPC-SC aufgrund von Ablehnungen von Dienstperimetern geschützt sind.

Fehlermeldung

In Logs von geprüften Ressourcen ein Eintrag wie der Folgende:

"protoPayload": {
  "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
  "status": {
    "code": 7,
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "VPC_SERVICE_CONTROLS",
  ...
  "authenticationInfo": {
    "principalEmail": "CLOUD_FUNCTION_RUNTIME_SERVICE_ACCOUNT",
  ...
  "metadata": {
    "violationReason": "NO_MATCHING_ACCESS_LEVEL",
    "securityPolicyInfo": {
      "organizationId": "ORGANIZATION_ID",
      "servicePerimeterName": "accessPolicies/NUMBER/servicePerimeters/SERVICE_PERIMETER_NAME"
  ...

Die Lösung

Fügen Sie Ihrem Google Cloud-Projekt Cloud Functions als geschützte Ressource im Dienstperimeter hinzu und stellen Sie VPC-SC-konforme Funktionen bereit. Weitere Informationen finden Sie unter VPC Service Controls verwenden.

Wenn Ihr Cloud Functions-Projekt nicht zum Dienstperimeter hinzugefügt werden kann, finden Sie entsprechende Informationen unter VPC Service Controls mit Funktionen außerhalb eines Perimeters verwenden.

Skalierbarkeit

Skalierungsprobleme im Zusammenhang mit der Infrastruktur von Cloud Functions können unter verschiedenen Umständen auftreten.

Die folgenden Bedingungen können mit Skalierungsfehlern verknüpft sein.

  • Ein starker Anstieg des Traffics.
  • Eine lange Kaltstartzeit.
  • Eine lange Verarbeitungszeit für Anfragen.
  • Hohe Fehlerrate der Funktion.
  • Das maximale Instanzlimit wird erreicht. Das System kann daher nicht weiter skaliert werden.
  • Temporäre Faktoren, die dem Cloud Functions-Dienst zugeordnet sind.

In allen Fällen wird Cloud Functions möglicherweise nicht schnell genug hochskaliert, um den Traffic zu verwalten.

Fehlermeldung

  • The request was aborted because there was no available instance
    • severity=WARNING ( Antwortcode: 429) Cloud Functions kann nicht skaliert werden, da Sie bei der Konfiguration ein Limit für max-instances festgelegt haben.
    • severity=ERROR ( Antwortcode: 500) Cloud Functions kann die Rate des Traffics nicht verwaltet.

Die Lösung

  • Lassen Sie bei HTTP-Trigger-basierten Funktionen den Client exponentiellen Backoff und Wiederholungen für Anfragen implementieren, die nicht verworfen werden dürfen. Wenn Sie Cloud Functions über Workflows auslösen, können Sie dafür die Syntax try/retry verwenden.
  • Für Hintergrund-/ereignisgesteuerte Funktionen unterstützt Cloud Functions mindestens einmalige Übermittlung. Auch wenn die Wiederholung nicht explizit aktiviert wird, wird das Ereignis automatisch noch einmal gesendet und die Funktionsausführung wird wiederholt. Weitere Informationen finden Sie unter Ereignisgesteuerte Funktionen wiederholen.
  • Wenden Sie sich bitte an den Support, wenn die Ursache des Problems eine Periode erhöhter transienter Fehler ist, die ausschließlich Cloud Functions zugeschrieben werden, oder wenn Sie Unterstützung bei Ihrem Problem benötigen.

Logging

Wenn Sie das Logging einrichten, um Probleme zu erkennen, können weitere Schwierigkeiten verursacht werden.

Logeinträge haben keine oder falsche Schweregradebenen in Logs

Cloud Functions bietet standardmäßig einfaches Laufzeit-Logging. In stdout oder stderr geschriebene Logs werden automatisch in der Google Cloud Console angezeigt. Sie enthalten jedoch standardmäßig nur einfache Stringnachrichten.

Fehlermeldung

Keine oder falsche Schweregradebenen in Logs.

Die Lösung

Wenn Sie Log-Schweregrade einschließen möchten, müssen Sie stattdessen einen strukturierten Logeintrag senden.

Ausnahmen bei einem Absturz anders behandeln oder protokollieren

Sie haben die Möglichkeit, die Verwaltung und das Logging von Absturzinformationen anzupassen.

Die Lösung

Das Wrappen Ihrer Funktion ist ein try-Block, mit dem die Handhabung von Ausnahmen und das Logging von Stacktraces angepasst werden kann.

Beispiel


import logging
import traceback
def try_catch_log(wrapped_func):
  def wrapper(*args, **kwargs):
    try:
      response = wrapped_func(*args, **kwargs)
    except Exception:
      # Replace new lines with spaces so as to prevent several entries which
      # would trigger several errors.
      error_message = traceback.format_exc().replace('\n', '  ')
      logging.error(error_message)
      return 'Error';
    return response;
  return wrapper;

#Example hello world function
@try_catch_log
def python_hello_world(request):
  request_args = request.args

  if request_args and 'name' in request_args:
    1 + 's'
  return 'Hello World!'

Logs zu groß in Node.js 10 und höher sowie in Python 3.8, Go 1.13 und Java 11

Die maximale Größe für einen regulären Logeintrag in diesen Laufzeiten ist 105 KiB.

Die Lösung

Achten Sie darauf, dass die Logeinträge dieses Limit nicht überschreiten.

Cloud Functions-Funktion gibt Fehler zurück, Logs fehlen jedoch

Cloud Functions-Logs werden in einen Standard-Bucket gestreamt, der beim Erstellen eines Projekts erstellt und aktiviert wird. Wenn der Standard-Bucket deaktiviert ist oder wenn sich Cloud Functions-Logs im Ausschlussfilter befinden, werden die Logs nicht im Log-Explorer angezeigt.

Die Lösung

Achten Sie darauf, dass Standardlogs aktiviert sind.

Cloud Functions-Logs werden nicht im Log-Explorer angezeigt

Einige Cloud Logging-Clientbibliotheken verwenden einen asynchronen Prozess, um Logeinträge zu schreiben. Wenn eine Funktion abstürzt oder anderweitig beendet wird, ist es möglich, dass einige Logeinträge noch nicht geschrieben wurden und später angezeigt werden. Es ist auch möglich, dass einige Logs verloren gehen und im Log-Explorer nicht sichtbar sind.

Die Lösung

Verwenden Sie die Benutzeroberfläche der Clientbibliothek, um gepufferte Logeinträge zu leeren, bevor Sie die Funktion beenden, oder verwenden Sie die Bibliothek, um Logeinträge synchron zu schreiben. Sie können Logs auch synchron direkt in stdout oder stderr schreiben.

Cloud Functions-Logs werden nicht über die Logs Router-Senke angezeigt

Logeinträge werden mithilfe von Logs Router-Senken an verschiedene Ziele weitergeleitet.

Screenshot des Logs Router mit hervorgehobener Schaltfläche "Senkendetails ansehen"

In den Einstellungen sind Ausschlussfilter enthalten, mit denen Einträge definiert werden, die sich einfach verwerfen lassen.

Screenshot des Logs Router-Pop-ups "Senkendetails" mit dem Ausschlussfilter

Die Lösung

Achten Sie darauf, dass kein Ausschlussfilter für resource.type="cloud_functions" festgelegt ist

Datenbankverbindungen

Beim Herstellen einer Verbindung zu einer Datenbank können verschiedene Probleme auftreten, die oft mit dem Überschreiten der Verbindungslimits oder der Zeitüberschreitung zusammenhängen. Wenn in Ihren Logs eine Cloud SQL-Warnung angezeigt wird, z. B. "Kontextfrist überschritten", müssen Sie möglicherweise Ihre Verbindungskonfiguration anpassen. Weitere Informationen finden Sie in der Cloud SQL-Dokumentation.

Netzwerk

Netzwerkverbindung

Wenn alle ausgehenden Anfragen von einer Cloud Functions-Funktion auch nach dem Konfigurieren der Einstellungen für ausgehenden Traffic fehlschlagen, können Sie Konnektivitätstests ausführen, um alle zugrunde liegenden Netzwerkverbindungsprobleme zu identifizieren. Weitere Informationen finden Sie unter Konnektivitätstests erstellen und ausführen.

Connector für serverlosen VPC-Zugriff ist nicht bereit oder nicht vorhanden

Wenn ein Connector für serverlosen VPC-Zugriff fehlschlägt, wird möglicherweise keine /28-Subnetzmaske als erforderlich für den Connector verwendet.

Fehlermeldung

VPC connector projects/xxxxx/locations/REGION/connectors/xxxx
is not ready yet or does not exist.

Die Lösung

Listen Sie Ihre Subnetze auf, um zu prüfen, ob Ihr Connector eine /28-Subnetzmaske verwendet.

Ist dies nicht der Fall, erstellen Sie einen Connector oder stellen Sie ihn wieder her, um ein /28-Subnetz zu verwenden. Achten Sie auf die folgenden Hinweise:

  • Wenn Sie den Connector neu erstellen, müssen Sie andere Funktionen nicht noch einmal bereitstellen. Wenn der Connector neu erstellt wird, kann es zu einer Netzwerkunterbrechung kommen.

  • Wenn Sie einen neuen alternativen Connector erstellen, stellen Sie die Funktionen noch einmal bereit, um den neuen Connector zu verwenden, und löschen Sie dann den ursprünglichen Connector. Bei dieser Methode wird eine Netzwerkunterbrechung vermieden.

Der SMTP-Traffic zu externen Ziel-IP-Adressen, die den TCP-Port 25 verwenden, ist blockiert

Für zusätzliche Sicherheit blockiert Google Cloud Verbindungen zum TCP-Zielport 25, wenn E-Mails von Funktionen gesendet werden.

Die Lösung

Wählen Sie eine der folgenden Optionen aus, um die Blockierung dieser Verbindungen aufzuheben: