Auf dieser Seite erfahren Sie, wie Sie Probleme bei der Verwendung von Workflows beheben.
Weitere Informationen finden Sie unter Workflows überwachen und Workflows debuggen.
Bereitstellungsfehler
Wenn ein Workflow bereitgestellt wird, überprüft Workflows, ob der Quellcode fehlerfrei ist und der Sprachsyntax entspricht. Workflows geben einen Fehler zurück, wenn einer gefunden wird. Die häufigsten Arten von Bereitstellungsfehlern sind:
- Verweis auf eine nicht definierte Variable, einen nicht definierten Schritt oder untergeordneten Workflow
- Falsche Syntax
- Falscher Einzug
- Fehlende oder irrelevante
{
,}
,"
,-
oder:
Der folgende Quellcode gibt beispielsweise einen Bereitstellungsfehler aus, da die Rückgabeanweisung auf die nicht definierte Variable varC
verweist:
- step1: assign: - varA: "Hello" - varB: "World" - step2: return: ${varC + varB}
Dieser falsche Quellcode wird in den folgenden Beispielen für die Google Cloud Console und die gcloud CLI verwendet.
Console
Wenn ein Bereitstellungsfehler auftritt, wird in Workflows die Fehlermeldung in einem Banner auf der Seite Workflow bearbeiten angezeigt: Die Fehlermeldung kennzeichnet das Problem im Quellcode und gibt nach Möglichkeit den Ursprung des Fehlers an:
Could not deploy workflow: failed to build: error in step step2: error
evaluating return value: symbol 'varC' is neither a variable nor a
sub-workflow name (Code: 3)
gcloud
Wenn Sie den Befehl gcloud workflows deploy
ausführen, gibt Workflows eine Fehlermeldung an die Befehlszeile zurück, wenn die Bereitstellung fehlschlägt. Die Fehlermeldung kennzeichnet das Problem im Quellcode und gibt nach Möglichkeit den Ursprung des Fehlers an:
ERROR: (gcloud.workflows.deploy) [INVALID_ARGUMENT] failed to build:
error in step step2: error evaluating return value: symbol 'varC' is neither
a variable nor a sub-workflow name
Bearbeiten Sie den Quellcode des Workflows, um das Problem zu beheben. Verweisen Sie in diesem Fall auf varA
anstelle von varC
.
HTTP 403
-Fehler bei Dienstkontoberechtigungen
Die Workflowausführung schlägt fehl, wenn ein HTTP-Server mit dem Fehlercode 403
antwortet. Beispiel:
Permission 'iam.serviceaccounts.actAs' denied on service account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).
oder
SERVICE_ACCOUNT does not have storage.objects.create access to the Google Cloud Storage object. Permission 'storage.objects.create' denied on resource (or it may not exist).
Jeder Workflow ist bei der Erstellung des Workflows mit einem IAM-Dienstkonto verknüpft. Um dieses Problem zu beheben, müssen Sie dem Dienstkonto eine oder mehrere IAM-Rollen zuweisen, die die Mindestberechtigungen für die Verwaltung Ihres Workflows enthalten. Wenn Sie beispielsweise möchten, dass Ihr Workflow Logs an Cloud Logging sendet, muss dem Dienstkonto, das den Workflow ausführt, eine Rolle mit der Berechtigung logging.logEntries.create
zugewiesen werden. Weitere Informationen finden Sie unter Workflowberechtigungen für den Zugriff auf Google Cloud-Ressourcen gewähren.
HTTP-Fehler 404 No such object
oder Not found
Wenn Sie den Cloud Storage-Connector verwenden, schlägt die Workflowausführung fehl, wenn ein HTTP-Server mit dem Fehlercode 404
antwortet. Beispiel:
HTTP server responded with error code 404 in step "read_input_file", routine "main", line: 13 { "body": "Not Found", "code": 404, ... }
Objektnamen sollten URL-codiert werden, um Pfadsicherheit zu gewährleisten. Sie können die Funktionen url_encode
und url_encode_plus
verwenden, um entsprechende Zeichen zu codieren, wenn sie im Objektnamen oder im Abfragestring einer Anfrage-URL vorkommen. Beispiel:
- init: assign: - source_bucket: "my-bucket" - file_name: "my-folder/my-file.json" - list_objects: call: googleapis.storage.v1.objects.get args: bucket: ${source_bucket} object: ${text.url_encode(file_name)} alt: media result: r - returnStep: return: ${r}
Wenn Sie den Objektnamen nicht URL-codieren und Ihr Speicher-Bucket Ordner enthält, schlägt die Anfrage fehl. Weitere Informationen finden Sie unter URL-Pfadteile codieren und Hinweise zur Benennung von Cloud Storage-Objekten.
HTTP-Fehler 429 Too many requests
Es gibt eine maximale Anzahl aktiver Workflowausführungen, die gleichzeitig ausgeführt werden können. Wenn dieses Kontingent aufgebraucht ist und die Ausführungsaussetzung deaktiviert ist oder das Kontingent für ausstehende Ausführungen erreicht ist, schlagen alle neuen Ausführungen mit dem HTTP-Statuscode 429 Too many requests
fehl.
Mit der Backlog-Ausführung können Sie Workflowausführungen in die Warteschlange stellen, sobald das Kontingent für parallele Ausführungen erreicht ist. Standardmäßig ist die Aussetzung der Ausführung für alle Anfragen (einschließlich der von Cloud Tasks ausgelösten) mit den folgenden Ausnahmen aktiviert:
- Wenn Sie eine Ausführung mit einem
executions.run
- oderexecutions.create
-Connector in einem Workflow erstellen, ist das Backlogging der Ausführung standardmäßig deaktiviert. Sie können sie konfigurieren, indem Sie das FelddisableConcurrencyQuotaOverflowBuffering
der Ausführung explizit auffalse
setzen. - Bei von Pub/Sub ausgelösten Ausführungen ist das Backlogging deaktiviert und kann nicht konfiguriert werden.
Weitere Informationen finden Sie unter Ausführungsrückstände verwalten.
Sie können auch eine Cloud Tasks-Warteschlange aktivieren, um untergeordnete Workflows mit einer von Ihnen festgelegten Rate auszuführen, um eine bessere Ausführungsrate zu erzielen. In diesem Fall sollten Sie das Ausführen von Backlogs deaktivieren.
Fehler bei projektübergreifenden Dienstkontoberechtigungen
Wenn Sie beim Versuch, einen Workflow mit einem projektübergreifenden Dienstkonto bereitzustellen, den Fehler PERMISSION_DENIED
erhalten, prüfen Sie, ob die boolesche Einschränkung iam.disableCrossProjectServiceAccountUsage
für Ihr Projekt nicht erzwungen wird und ob Sie das Dienstkonto richtig eingerichtet haben. Weitere Informationen finden Sie unter Workflow mit einem projektübergreifenden Dienstkonto bereitstellen.
Der Ressourcenname muss RFC 1123 entsprechen
Die Workflowausführung schlägt fehl, wenn ein HTTP-Server mit dem Fehlercode 400
antwortet. Beispiel:
"description": "must conform to RFC 1123: only lowercase, digits, hyphens, and periods are allowed, must begin and end with letter or digit, and less than 64 characters."
Achten Sie zur Behebung dieses Problems darauf, dass der Ressourcenname dem DNS-Labelstandard gemäß RFC 1123 entspricht und dass Sie beim Zuweisen von Variablen Strings und Ausdrücke korrekt zusammenführen.
Sie können beispielsweise keine Variable wie - string: hello-${world}
zuweisen.
Gehen Sie stattdessen so vor:
YAML
- assign_vars: assign: - string: "hello" - string: ${string+" "+"world"}
JSON
[ { "assign_vars": { "assign": [ { "string": "hello" }, { "string": "${string+" "+"world"}" }, ] } } ]
Ausdrücke mit Doppelpunkten
In YAML können Ausdrücke mit Doppelpunkten unerwartetes Verhalten verursachen, wenn der Doppelpunkt als Definition einer Zuordnung interpretiert wird. Es ist zwar möglich, den Workflow bereitzustellen und auszuführen, aber dessen Ausgabe wird nicht wie erwartet ausfallen.
Wenn Sie einen Workflow mit der Google Cloud Console erstellen, kann der Workflow in der Google Cloud Console nicht visuell gerendert werden. Sie erhalten dann möglicherweise eine Warnung wie die folgende:
Sie können dieses Problem beheben, indem Sie den YAML-Ausdruck in einfache Anführungszeichen setzen:
Empfohlen: '${"a: " +string(a)}'
Nicht empfohlen: ${"a: " +string(a)}
Kartenschlüssel mit nicht alphanumerischen Zeichen
Wenn Sie auf Kartenschlüssel mit nicht alphanumerischen Zeichen zugreifen (z. B. das Ausrufezeichen in "special!key": value
), müssen Sie den Schlüsselnamen in Anführungszeichen setzen. Wenn der Schlüsselname nicht in Anführungszeichen gesetzt ist, kann der Workflow nicht bereitgestellt werden. Wenn Sie beispielsweise versuchen, den folgenden Quellcode bereitzustellen, wird eine token recognition error
geworfen:
- init: assign: - var: key: "special!key": bar - returnOutput: return: '${"foo" + var.key[special!key]}'
Verwenden Sie stattdessen den folgenden Code, um die Ausgabe zurückzugeben:
'${"foo" + var.key["special!key"]}'
Mehrere Ausdrücke in einer Liste
Die Verwendung mehrerer Ausdrücke in einer Liste wie im folgenden Beispiel für einen Iterationsbereich ist unzulässig:
[${rangeStart}, ${rangeEnd}])
Sie haben folgende Möglichkeiten, dieses Problem zu beheben:
Setzen Sie die Liste in einen Ausdruck:
${[rangeStart, rangeEnd]}
Setzen Sie jeden Ausdruck in einfache Anführungszeichen:
['${rangeStart}', '${rangeEnd}']
Das Ergebnis ist dann wie erwartet eine Liste mit zwei Werten.
Vom Kunden verwaltete Verschlüsselungsschlüssel (CMEK)
Bei der Verwendung von Cloud KMS mit Workflows können Fehler auftreten. In der folgenden Tabelle werden verschiedene Probleme und deren Behebung beschrieben.
Problem | Beschreibung |
---|---|
Die Berechtigung cloudkms.cryptoKeyVersions.useToEncrypt wurde verweigert. |
Entweder ist der angegebene Cloud KMS-Schlüssel nicht vorhanden oder die Berechtigung ist nicht ordnungsgemäß konfiguriert.
Lösung:
|
Schlüsselversion ist nicht aktiviert | Die bereitgestellte Cloud KMS-Schlüsselversion wurde deaktiviert.
Lösung: Aktivieren Sie die Cloud KMS-Schlüsselversion wieder. |
Die Region des Schlüsselbunds stimmt nicht mit der zu schützenden Ressource überein | Die bereitgestellte KMS-Schlüsselbundregion unterscheidet sich von der Region des Workflows.
Lösung: Verwenden Sie einen Cloud KMS-Schlüsselbund und einen geschützten Workflow aus derselben Region. Sie können sich in verschiedenen Projekten befinden. Weitere Informationen finden Sie unter Cloud KMS-Standorte und Standorte für Workflows. |
Cloud KMS-Kontingent überschritten | Ihr Kontingentlimit für Cloud KMS-Anfragen wurde erreicht.
Lösung: Begrenzen Sie die Anzahl der Cloud KMS-Aufrufe oder erhöhen Sie das Kontingentlimit. Weitere Informationen finden Sie unter Cloud KMS-Kontingente. |
Angeforderte Entität bei Verwendung des Cloud Run-Connectors nicht gefunden
Die Workflowausführung schlägt fehl, wenn ein HTTP-Server bei der Verwendung der Connector-Methode googleapis.run.v1.namespaces.jobs.create
mit dem Fehlercode 404
antwortet.
Bei dieser Methode müssen Sie den Speicherort des HTTP-Endpunkts angeben. Beispiel: us-central1
oder asia-southeast1
. Wenn Sie keinen Standort angeben, wird der globale Endpunkt https://run.googleapis.com
verwendet. Dieser Standort unterstützt jedoch nur Listenmethoden.
Geben Sie beim Anrufen des Connectors ein location
-Argument an, um dieses Problem zu beheben.
Informationen zu den Standortoptionen der Cloud Run Admin API finden Sie unter Dienstendpunkte.
Ressourcenlimits
Wenn Ressourcenlimits oder Fehler wie ResourceLimitError
, MemoryLimitExceededError
oder ResultSizeLimitExceededError
auftreten, können Sie Speicherplatz freigeben, indem Sie Variablen löschen.
So können Sie beispielsweise Arbeitsspeicher freigeben, der für nachfolgende Schritte benötigt wird. Möglicherweise haben Sie auch Anrufe mit Ergebnissen, die Sie nicht interessieren. Diese Ergebnisse können Sie dann ganz weglassen.
YAML-Einzug
Die YAML-Einrückung ist aussagekräftig und sollte mindestens zwei Leerzeichen pro Einrückungsstufe sein. Eine unzureichende Einrückung kann zu Fehlern führen. Eine neue Ebene sollte mindestens zwei Leerzeichen ab dem Start des Textes in der vorherigen Zeile liegen.Im folgenden Beispiel wird beispielsweise ein Listenelement mit einer Zuordnung von stepName
- und call
-Elementen falsch angegeben:
- stepName: call: sys.log
Stattdessen sollten Sie die nachfolgende Zeile um zwei Leerzeichen einrücken, um call
in stepName
zu verschachteln:
- stepName: call: sys.log
Verwenden Sie zum Einrücken von Zeilen Leerzeichen anstelle von Tabulatorzeichen.