Fehlerbehebung bei Cloud Run-Funktionen

In diesem Dokument erfahren Sie, wie Sie Fehlermeldungen beheben und Probleme bei der Verwendung von Cloud Run-Funktionen beheben.

Bereitstellung

In diesem Abschnitt sind mögliche Probleme mit Bereitstellung sowie Vorschläge zu deren Behebung aufgeführt. Viele Probleme, die bei der Bereitstellung auftreten können, stehen im Zusammenhang mit Rollen und Berechtigungen oder einer falschen Konfiguration.

Mit Identity and Access Management können Sie Identitäten autorisieren, administrative Aktionen für Funktionen auszuführen, die mit der Cloud Functions v2 API erstellt wurden, z. B. mit gcloud functions, der REST API oder Terraform. Zu den Verwaltungsaktionen gehören das Erstellen, Aktualisieren und Löschen von Funktionen. Weitere Informationen finden Sie unter Zugriff mit IAM autorisieren.

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

Jede Funktion ist einem Dienstkonto zugeordnet, das als Identität dient, wenn die Funktion auf andere Ressourcen zugreift. Dieses Laufzeitdienstkonto kann das Standarddienstkonto oder ein nutzerverwaltetes Dienstkonto sein. In Umgebungen, in denen mehrere Funktionen auf verschiedene Ressourcen zugreifen, werden anstelle des Standardlaufzeitdienstkontos normalerweise funktionsspezifische Identitäten mit benannten Laufzeitdienstkonten verwendet (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

Wenn Sie ein Laufzeitdienstkonto verwenden möchten, muss der Bereitsteller die Berechtigung iam.serviceAccounts.actAs für dieses Dienstkonto 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 gewährt werden.

Weisen Sie dem Nutzer mit der Rolle „Projektbetrachter“, „Cloud Functions-Entwickler“ oder „Cloud Functions-Administrator“ die Berechtigung iam.serviceAccounts.actAs für das Laufzeitdienstkonto zu.

Fehlermeldung

Console

  You must have the iam.serviceAccounts.actAs permission on the selected service account. To obtain this permission, you can grant a role that includes it like the Service Account User role, on the project.

gcloud

Standarddienstkonto:

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'

Nicht standardmäßiges Dienstkonto:

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'

Die Lösung

Weisen Sie dem Nutzer die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) für das Standard- oder benutzerdefinierte Laufzeitdienstkonto zu. Diese Rolle umfasst die Berechtigung iam.serviceAccounts.actAs.

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 Pub/Sub zugreifen, um Themen und Abos zu konfigurieren. Wenn Sie die dem Dienstkonto zugewiesene Rolle ändern, ohne die entsprechenden Berechtigungen zu gewähren, kann der Cloud Functions-Dienst nicht auf Pub/Sub zugreifen und die Bereitstellung schlägt fehl.

Fehlermeldung

Console

Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/test-project-356312/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]

Die Lösung

Sie können Ihr Dienstkonto auf die Standardrolle cloudfunctions.serviceAgent zurücksetzen.

Das Standarddienstkonto für die Laufzeit ist nicht vorhanden

Wenn Sie kein vom Nutzer verwaltetes Laufzeitdienstkonto angeben, verwendet Cloud Functions das Compute-Standarddienstkonto als Laufzeitdienstkonto. Bereitstellungen schlagen fehl, wenn Sie das Standardkonto löschen, ohne ein vom Nutzer verwaltetes Konto anzugeben.

Fehlermeldung

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[404], code=[Ok], message=[Service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com was not found.]

Die Lösung

Führen Sie einen der folgenden Schritte aus, um das Problem zu beheben:

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

Cloud Run-Funktionen können nur von Ereignissen ausgelöst werden, die aus Cloud Storage-Buckets im selben 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

Console

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/<project-id>/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]

Die Lösung

Um dieses Problem zu beheben, setzen Sie dieses Dienstkonto auf die Standardrolle zurück.

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

Die Rolle „Projektbearbeiter“ hat umfassende Berechtigungen zum Verwalten von Ressourcen innerhalb eines Projekts, aber nicht die Berechtigung, Cloud Functions zu veröffentlichen. Der Nutzer oder Dienst, der die Funktion bereitstellt, benötigt die Berechtigung run.services.setIamPolicy.

Fehlermeldung

gcloud

ERROR: (gcloud.run.services.add-iam-policy-binding) PERMISSION_DENIED: Permission 'run.services.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 :

Die Bereitstellung der Funktion schlägt fehl, wenn die Organisationsrichtlinie „Beschränkung der Ressourcenstandorte“ verwendet wird

Wenn Ihre Organisation eine Richtlinie zur Beschränkung von Ressourcenstandorten verwendet, wird die Bereitstellung von Funktionen in den durch die Richtlinie eingeschränkten Regionen eingeschränkt. In der Google Cloud Console ist die eingeschränkte Region beim Bereitstellen einer Funktion nicht im Drop-down-Menü „Region“ verfügbar.

Fehlermeldung

gcloud

ResponseError: status=[400], code=[Ok], message=["LOCATION" violates constraint "constraints/gcp.resourceLocations" on the resource "projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME".]

Die Lösung

Sie können Standorte zu den Listen allowed_values und denied_values einer Einschränkung der Ressourcenstandorte hinzufügen oder daraus entfernen, um eine erfolgreiche Bereitstellung zu ermöglichen.

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:

Could not create or update Cloud Run service FUNCTION_NAME, Container Healthcheck failed. Revision REVISION_NAMEE is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.

Die Lösung

Führen Sie einen der folgenden Schritte aus, um das Problem zu beheben:

  • Eine ausführlichere Fehlermeldung finden Sie in den Build-Logs und den Laufzeit-Logs 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. Längere Zeitüberschreitungslimits in Cloud Run-Funktionen bieten mehr Spielraum für die Initialisierung und eine skalierbarere Ressourcenzuweisung in einer Cloud Run-Umgebung. Dadurch kann dieses Problem, falls es durch eine Ressourcenausschöpfung verursacht wird, möglicherweise gemildert werden.

  • Der Quellcode muss eine Einstiegspunktfunktion enthalten, die in der Bereitstellung korrekt angegeben wurde, entweder über die Console oder gcloud.

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

Nutzer mit der Rolle „Projektbetrachter“ oder „Cloud Functions-Betrachter“ haben Lesezugriff auf Funktionen und Funktionsdetails und können keine neuen Funktionen bereitstellen. Die Funktion Funktion erstellen ist in der Google Cloud Console ausgegraut und Sie sehen den folgenden Fehler:

Fehlermeldung

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.generateUploadUrl' denied on 'projects/PROJECT_ID/locations/LOCATION/functions']

Die Lösung

Weisen Sie dem Nutzer die Rolle Cloud Functions-Entwickler zu.

Build-Dienstkonto fehlt Berechtigungen

Fehlermeldung

Im Fehler beim Bereitstellen der Funktion oder in den Build-Logs wird möglicherweise einer der folgenden Fehler angezeigt:

The service account running this build does not have permission to write logs. To fix this, grant the Logs Writer (roles/logging.logWriter) role to the service account.
Step #0 - "fetch": failed to Fetch: failed to download archive gs://gcf-v2-sources-PROJECT_NUMBER-LOCATION/FUNCTION_NAME/version-VERSION_NUMBER/function-source.zip: Access to bucket gcf-v2-sources-PROJECT_NUMBER-LOCATION denied. You must grant Storage Object Viewer permission to PROJECT_NUMBER-compute@developer.gserviceaccount.com.
Step #2 - "build": ERROR: failed to create image cache: accessing cache image "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": connect to repo store "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": GET https://LOCATION-docker.pkg.dev/v2/token?scope=repository%3APROJECT%2Fgcf-artifacts%2FFUNCTION_NAME%2Fcache%3Apull&service=: DENIED: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "projects/PROJECT/locations/LOCATION/repositories/gcf-artifacts" (or it may not exist)
Could not build the function due to a missing permission on the build service account. If  you didn't revoke that permission explicitly, this could be caused by a change in the organization policies.

Die Lösung

Das Build-Dienstkonto benötigt Leseberechtigungen für den Quell-Bucket sowie Lese- und Schreibberechtigungen für das Artifact Deployment-Repository. Dieser Fehler kann aufgrund einer Änderung des Standardverhaltens für die Verwendung von Dienstkonten durch Cloud Build auftreten. Weitere Informationen finden Sie unter Änderung des Cloud Build-Dienstkontos.

Verwenden Sie eine der folgenden Lösungen, um dieses Problem zu beheben:

Build-Dienstkonto deaktiviert

Fehlermeldung

Could not build the function due to disabled service account used by Cloud Build. Please make sure that the service account is active.

Die Lösung

Das Build-Dienstkonto muss aktiviert sein, damit eine Funktion bereitgestellt werden kann. Dieser Fehler kann aufgrund einer Änderung des Standardverhaltens für die Verwendung von Dienstkonten durch Cloud Build auftreten. Weitere Informationen finden Sie unter Änderung des Cloud Build-Dienstkontos.

Verwenden Sie eine der folgenden Lösungen, um dieses Problem zu beheben:

Bereitstellung

In diesem Abschnitt sind mögliche Probleme mit der Auslieferung sowie Vorschläge zu deren Behebung aufgeführt.

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:

Error: Forbidden Your client does not have permission
to get URL /FUNCTION_NAME from this server.

Die Lösung

Führen Sie einen der folgenden Schritte aus, um das Problem zu beheben:

Auslieferungsfehler aufgrund der allow internal traffic only-Konfiguration

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 Sie für eingehenden Netzwerktraffic die Einstellung Nur internen Traffic zulassen konfigurieren, weist diese Fehlermeldung darauf hin, dass nur Anfragen von VPC-Netzwerken im selben Projekt oder Perimeter für VPC Service Controls zulässig sind. Es kann sich auch um einen 404-Fehler für die Standard-functions.net-URL handeln.

Fehlermeldung

HTTP-Fehlerantwortcode: 404 NICHT GEFUNDEN

Die Lösung

So beheben Sie diesen Fehler:

  • Prüfen Sie, ob die Anfrage von Ihrem Google Cloud-Projekt oder dem Dienstperimeter für VPC Service Controls stammt.

  • Ändern Sie die Einstellungen für eingehenden Traffic so, dass der gesamte Traffic für die Funktion zugelassen wird.

  • Der Quellcode von Cloud Run-Funktionen kann auch aufgrund von falscher Funktions-URL, HTTP-Methoden, Logikfehlern usw. zu einem 404-Fehler führen.

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

Zum Aufrufen einer Cloud Run-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:

Your client does not have permission to the requested URL 'FUNCTION_NAME'

Die Lösung

So beheben Sie diesen Fehler:

  • 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 gegen ein von Google signiertes Identitätstoken austauschen. Weitere Informationen finden Sie unter Für Aufruf authentifizieren.

    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
    Weitere Informationen finden Sie unter Für Aufruf authentifizieren .

  • Stellen Sie die Funktion noch einmal bereit, um nicht authentifizierte Aufrufe zuzulassen, wenn dies von Ihrer Organisation unterstützt wird. Dies ist zum Testen nützlich.

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

Bei einigen Cloud Run-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 die Funktion eine der folgenden Aktionen ausführt:

  • Wert zurückgeben
  • Ein zurückgegebenes Promise-Objekt auflösen oder ablehnen (nur Node.js-Funktionen)
  • Nicht erfasste Ausnahmen oder Fehler auslösen
  • HTTP-Antwort senden
  • Callback-Funktion aufrufen

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 Run richtig anzeigt. Wichtig ist, dass Sie eine der oben aufgeführten Vorgänge ausführen, sobald Ihre Funktion die asynchronen Aufgaben abgeschlossen hat.

Laufzeitfehler beim Zugriff auf Ressourcen, die durch VPC Service Controls geschützt sind

Cloud Run-Funktionen verwenden 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 Service Controls 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

So beheben Sie diesen Fehler:

Skalierbarkeit

In diesem Abschnitt sind Skalierungsprobleme sowie Vorschläge zu deren Behebung aufgeführt.

Cloud Logging-Fehler im Zusammenhang mit abgebrochenen ausstehenden Warteschlangenanfragen

Skalierungsfehler können in den folgenden Fällen auftreten:

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

In allen Fällen wird Cloud Run 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 Run-Funktionen können nicht skaliert werden, da Sie bei der Konfiguration ein Limit für max-instances festgelegt haben.
    • severity=ERROR ( Antwortcode: 500) Cloud Run-Funktionen können die Rate des Traffics nicht verwalten.

Die Lösung

  • Beheben Sie die zuvor aufgeführten Probleme, um dieses Problem zu beheben.

  • 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 Run-Funktionen über Workflows auslösen, können Sie dazu die try/retry-Syntax verwenden.

  • Für Hintergrund- oder ereignisgesteuerte Funktionen unterstützt Cloud Run 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 Run-Funktionen zugeschrieben werden, oder wenn Sie Unterstützung bei Ihrem Problem benötigen.

  • Bei Problemen mit Kaltstarts können Sie eine Mindestanzahl von Instanzen konfigurieren, um die Anzahl der Kaltstarts mit höheren Abrechnungsfolgen zu reduzieren.

Logging

Im folgenden Abschnitt werden Probleme mit dem Logging und deren Behebung beschrieben.

Logeinträge haben keine oder falsche Schweregradebenen

Cloud Run-Funktionen bieten standardmäßig Laufzeit-Logging. In stdout oder stderr geschriebene Logs werden automatisch in Cloud Logging angezeigt. Sie enthalten jedoch standardmäßig nur Stringnachrichten.

Fehlermeldung

Keine oder falsche Schweregradebenen in Logs.

Die Lösung

Wenn Sie Log-Schweregrade einschließen möchten, müssen Sie 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

Senden Sie Logeinträge, die kleiner als dieses Limit sind.

Fehlende Protokolle, obwohl Cloud Run-Funktionen Fehler zurückgeben

Cloud Run Functions streamt Cloud Run-Funktionsprotokolle in einen Standard-Bucket. Wenn Sie ein Projekt erstellen, wird der Standard-Bucket von Cloud Run-Funktionen erstellt und aktiviert. Wenn der Standard-Bucket deaktiviert ist oder wenn sich Cloud Run-Funktions-Logs im Ausschlussfilter befinden, werden die Logs nicht im Log-Explorer angezeigt.

Die Lösung

Aktivieren Sie Standardprotokolle.

Cloud Run-Funktionslogs 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. Einige Logs gehen möglicherweise verloren und sind im Log-Explorer nicht sichtbar.

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.

Fehlende Cloud Run-Funktionslogs bei Verwendung der Logs Router-Senke

Logs Router-Senken leiten Logeinträge an verschiedene Ziele weiter.

Screenshot des Logs Router mit hervorgehobener Schaltfläche &quot;Senkendetails ansehen&quot;

Mit den Ausschlussfiltern werden Einträge definiert, die Sie verwerfen können.

Die Lösung

Entfernen Sie den Ausschlussfilter für resource.type = "cloud_run_revision".

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. Context deadline exceeded, müssen Sie möglicherweise Ihre Verbindungskonfiguration anpassen. Weitere Informationen finden Sie unter Best Practices für Cloud SQL.

Netzwerk

In diesem Abschnitt sind Netzwerkprobleme sowie Vorschläge zu deren Behebung aufgeführt.

Netzwerkverbindung

Wenn alle ausgehenden Anfragen von einer Cloud Run-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 Serverloser VPC-Zugriff fehlschlägt, wird möglicherweise keine /28-Subnetzmaske als erforderlich für den Connector verwendet.

Fehlermeldung

Problem connecting to VPC Connector projects/xxxxx/locations/REGION/connectors/xxxx: Serverless VPC Access is not found.

Wenn Cloud Run-Funktionen mit einem Connector bereitgestellt werden, der aufgrund einer fehlenden Berechtigung für das Dienstkonto „Google APIs Service Agent“ PROJECT_NUMBER@cloudservices.gserviceaccount.com in einem fehlerhaften Status ist, wird die folgende Fehlermeldung ausgegeben:

Fehlermeldung

Failed to prepare VPC connector. Please try again later.

Die Lösung

Listen Sie Ihre Subnetze auf, um zu prüfen, ob Ihr Connector eine /28-Subnetzmaske verwendet. Wenn für Ihren Connector nicht die Subnetzmaske /28 verwendet wird, erstellen Sie einen neuen Connector oder stellen Sie den vorhandenen wieder her.

Führen Sie einen der folgenden Schritte aus, um das Problem zu beheben:

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

  • Wenn Sie einen neuen alternativen Connector erstellen, stellen Sie Ihre Funktionen neu bereit, damit der neue Connector verwendet wird, und löschen Sie dann den ursprünglichen Connector. Bei dieser Methode wird eine Netzwerkunterbrechung vermieden.

  • Die Cloud Run-Funktionen und der zugehörige Connector müssen in derselben Region bereitgestellt werden.

  • Für die freigegebene VPC-Konfiguration:

    • Achten Sie darauf, dass den Dienstkonten SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com und service-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com, die vom VPC-Connector zum Bereitstellen von Ressourcen im Projekt verwendet werden, keine Berechtigungen fehlen. Diese Dienstkonten sollten die Rolle roles/compute.networkUser im Hostprojekt der freigegebene VPC-Konfiguration haben, wenn sich der Connector im Dienstprojekt befindet.

    • Wenn der Connector im Hostprojekt erstellt wird, muss die Rolle Serverless VPC Access User dem Cloud Run-Dienst-Agent in Ihrem Hostprojekt zugewiesen sein.

  • Wenn der Status des Connectors den Fehler Connector is in a bad state, manual deletion recommended anzeigt und dem Google APIs-Dienst-Agent die erforderlichen Berechtigungen zum Bereitstellen von Rechenressourcen im Projekt des Connectors fehlen, gewähren Sie dem Dienstkonto PROJECT_NUMBER@cloudservices.gserviceaccount.com die Berechtigung roles/compute.admin. In einigen Fällen muss der Connector nach dem Hinzufügen dieser Berechtigungen neu erstellt werden.

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

So heben Sie die Blockierung dieser Verbindungen auf:

404-Fehler für die Standard-functions.net-URL

Wenn Sie die run.app-URL in Cloud Run deaktivieren, wird auch der Zugriff auf die Standard-cloudfunctions.net-URL für Cloud Run-Funktionen (2. Generation) verhindert. Dieser Fehler kann auch durch einen Bereitstellungsfehler aufgrund der Konfiguration „Nur internen Traffic zulassen“ verursacht werden.

Fehlermeldung

HTTP-Fehlerantwortcode: 404 NICHT GEFUNDEN

Die Lösung

Wenn Sie die Standard-cloudfunctions.net-URL für Cloud Run Functions (2. Generation) wieder aktivieren möchten, müssen Sie die run.app-URL in Cloud Run wieder aktivieren. Ersetzen Sie dazu die Datei service.yaml durch eine neue Konfiguration, in der annotations:run.googleapis.com/default-url-disabled: false