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:
Setzen Sie dieses Dienstkonto auf die Standardrolle zurück.
oder
Gewähren Sie dem Dienstkonto manuell die Berechtigungen
pubsub.subscriptions.*
undpubsub.topics.*
.
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
Geben Sie ein vom Nutzer verwaltetes Laufzeitdienstkonto an, wenn Sie Ihre Funktionen der 1. Generation bereitstellen.
oder
Erstellen Sie das Standarddienstkonto
@appspot.gserviceaccount.com für Ihr Projekt neu.
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 ([email protected]
).
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:
Setzen Sie dieses Dienstkonto auf die Standardrolle zurück.
oder
Gewähren Sie dem Laufzeitdienstkonto die Rolle
cloudfunctions.serviceAgent
.oder
Gewähren Sie dem Laufzeitdienstkonto die Berechtigungen
storage.buckets.{get, update}
undresourcemanager.projects.get
.
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:
Weisen Sie dem Bereitsteller die Rolle Projektinhaber oder Cloud Functions-Administrator zu. Beide haben die Berechtigung
cloudfunctions.functions.setIamPolicy
.oder
Erteilen Sie die Berechtigung manuell. Erstellen Sie dazu eine benutzerdefinierte Rolle.
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:
- Gesamte Mehrfachregion zulassen
- Testfunktion bereitstellen
- Ä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, um Images der Funktionen zu verwalten. 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
- Deaktivieren Sie die Lebenszyklusverwaltung für die Buckets, die für Container Registry erforderlich sind.
- 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.
- 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
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:
Klicken Sie auf den verknüpften Namen der Funktion, auf die Sie Zugriff gewähren möchten.
Klicken Sie oben rechts auf der Übersichtsseite der Funktionsdetails auf den Link Powered by Cloud Run.
Klicken Sie auf Trigger und wählen Sie Nicht authentifizierte Aufrufe zulassen aus.
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:
Prüfen Sie, ob die Anfrage von Ihrem Google Cloud-Projekt oder dem Dienstperimeter für VPC Service Controls stammt.
oder
Ändern Sie die Einstellungen für eingehenden Traffic so, dass der gesamte Traffic für die Funktion zugelassen wird.
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.
Cloud Logging-Fehler im Zusammenhang mit abgebrochenen ausstehenden Warteschlangenanfragen
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ürmax-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-Funktionen über Workflows auslösen, können Sie dies mit der
try/retry
-Syntax erreichen. - 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.
In den Einstellungen sind Ausschlussfilter enthalten, mit denen Einträge definiert werden, die sich einfach verwerfen lassen.
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:
Stellen Sie über einen anderen Port, z. B. TCP-Port 587 oder 465, eine Verbindung zu Ihrem SMTP-Server her.