Fehlerbehebung bei Cloud Run Functions

In diesem Dokument erfahren Sie, wie Sie Fehlermeldungen beheben und Probleme bei der Verwendung von Cloud Run Functions lösen. Wenn Sie eine Funktion mit Cloud Run erstellt oder bereitgestellt haben, finden Sie weitere Informationen unter Probleme mit Cloud Run 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.

Sie verwenden Identity and Access Management, um Identitäten zu 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 vom Nutzer verwaltetes 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@).

Damit ein Laufzeitdienstkonto verwendet werden kann, muss der Bereitsteller die Berechtigung iam.serviceAccounts.actAs für dieses Dienstkonto haben. Ein Nutzer, der ein Nicht-Standard-Laufzeit-Dienstkonto erstellt, 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 Laufzeit-Dienstkonto 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@.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/PROJECT_NUMBER-compute@ --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
..Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
..You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
. --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 das 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.). 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@"

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@"]

Die Lösung

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

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@ 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 Functions-Funktionen können nur von Ereignissen ausgelöst werden, die aus Cloud Storage-Buckets im selben Google Cloud Platform-Projekt stammen. Außerdem muss das Dienstkonto des Cloud Functions-Dienst-Agents (service-PROJECT_NUMBER@gcf-admin-robot.) 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@"]

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@"]

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 in einem Projekt, gewährt aber nicht automatisch die Möglichkeit, Cloud Functions öffentlich zu machen. Der Nutzer oder der 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 zur 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ü für die 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 und 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 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 besser skalierbare Ressourcenzuweisung in einer Cloud Run-Umgebung. Dadurch kann dieses Problem möglicherweise behoben werden, wenn es durch Ressourcenmangel verursacht wird.

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

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