Auf dieser Seite erfahren Sie, wie Sie Probleme bei der Verwendung von Workflows beheben.
Weitere Informationen finden Sie unter Monitoring und Debugging von Workflows.
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 die Fehlermeldung in Workflows auf der Seite Workflow bearbeiten in einem Banner 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
Beim Ausführen eines Workflows oder beim Bereitstellen oder Aktualisieren eines Workflows kann ein HTTP-Fehler 403 (PERMISSION_DENIED) auftreten.
Berechtigung beim Ausführen eines Workflows verweigert
Die Workflowausführung schlägt fehl, wenn ein HTTP-Server mit dem Fehlercode 403 antwortet, weil das Dienstkonto des Workflows keine Berechtigung für den Zugriff auf eine Zielressource hat. Beispiel:
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 beim Erstellen mit einem IAM-Dienstkonto (Identity and Access Management) verknüpft. Weisen Sie dem Dienstkonto des Workflows eine oder mehrere IAM-Rollen zu, die die erforderlichen Mindestberechtigungen für den Zugriff auf die vom Workflow verwendeten Ressourcen enthalten, um dieses Problem zu beheben. Wenn Ihr Workflow beispielsweise Logs an Cloud Logging senden soll, muss dem Dienstkonto, das den Workflow ausführt, eine Rolle mit der Berechtigung logging.logEntries.create zugewiesen sein. Weitere Informationen finden Sie unter Workflowberechtigung für den Zugriff auf Google Cloud -Ressourcen gewähren.
Berechtigung beim Bereitstellen oder Aktualisieren eines Workflows verweigert
Wenn Sie einen Workflow bereitstellen oder aktualisieren, schlägt die Anfrage möglicherweise mit dem HTTP-Fehler 403 (PERMISSION_DENIED) fehl, wenn Sie nicht berechtigt sind, als Dienstkonto des Workflows zu agieren. Beispiel:
Permission 'iam.serviceaccounts.actAs' denied on service account PROJECT_NUMBER-compute@ (or it may not exist).
oder
permission iam.serviceAccounts.ActAs is required on the workflow's new/current service account to set it or the workflow source contents
Weisen Sie dem Hauptkonto, das den Workflow bereitstellt oder aktualisiert, eine Rolle zu, die die Berechtigung iam.serviceAccounts.actAs enthält, z. B. Dienstkontonutzer (roles/iam.serviceAccountUser). Je nach Vorgang weisen Sie diese Rolle dem folgenden Dienstkonto zu:
- Nur den Workflow-Quellcode aktualisieren (ohne das Dienstkonto zu aktualisieren): Weisen Sie dem vorhandenen Dienstkonto, das mit dem Workflow verknüpft ist, die Rolle zu.
- Workflow erstellen, Dienstkonto aktualisieren oder sowohl Quellcode als auch Dienstkonto aktualisieren: Weisen Sie dem neuen Dienstkonto, das Sie mit dem Workflow verknüpfen, die Rolle zu.
Weitere Informationen erhalten Sie unter Dienstkontoberechtigungen.
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, ... }
Sie sollten Objektnamen URL-codieren, damit sie pfadsicher sind. Mit den Funktionen url_encode und url_encode_plus können Sie entsprechende Zeichen 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 Storage-Bucket Ordner enthält, schlägt die Anfrage fehl. Weitere Informationen finden Sie unter URL-Pfadteile codieren und Überlegungen zur Benennung in Cloud Storage.
HTTP-429 Too many requests-Fehler
Es gibt eine maximale Anzahl aktiver Workflowausführungen, die gleichzeitig ausgeführt werden können. Wenn dieses Kontingent erschöpft ist und das Backlogging für die Ausführung deaktiviert ist oder das Kontingent für Backlog-Ausführungen erreicht ist, schlagen alle neuen Ausführungen mit dem HTTP-Statuscode 429 Too many requests fehl.
Mit dem Backlog für Ausführungen können Sie Workflowausführungen in die Warteschlange stellen, sobald das Kontingent für gleichzeitige Ausführungen erreicht ist. Standardmäßig ist das Backlogging für alle Anfragen aktiviert (einschließlich der von Cloud Tasks ausgelösten Anfragen), mit folgenden Ausnahmen:
- Wenn Sie eine Ausführung mit einem
executions.run- oderexecutions.create-Connector in einem Workflow erstellen, ist das Backlogging für die Ausführung standardmäßig deaktiviert. Sie können sie konfigurieren, indem Sie das FelddisableConcurrencyQuotaOverflowBufferingder Ausführung explizit auffalsesetzen. - Bei Ausführungen, die von Pub/Sub ausgelöst werden, ist das Backlogging von Ausführungen deaktiviert und kann nicht konfiguriert werden.
Weitere Informationen finden Sie unter Ausführungs-Backlog verwalten.
Sie können auch eine Cloud Tasks-Aufgabenwarteschlange aktivieren, um untergeordnete Workflows mit einer von Ihnen definierten Rate auszuführen und eine bessere Ausführungsrate zu erzielen. In diesem Fall sollten Sie die Ausführungsrückstände explizit deaktivieren.
Berechtigungsfehler bei projektübergreifenden Dienstkonten
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 verketten.
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, die Doppelpunkte enthalten, zu unerwartetem Verhalten führen, wenn der Doppelpunkt als Definition einer Zuordnung interpretiert wird. Obwohl es möglich ist, den Workflow bereitzustellen und auszuführen, entspricht die Ausgabe nicht den Erwartungen.
Wenn Sie einen Workflow mit der Google Cloud Console erstellen, kann der Workflow in der Google Cloud Console nicht visuell gerendert werden. Möglicherweise erhalten Sie 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 ein token recognition error ausgelöst:
- 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 kein gültiges YAML:
[${rangeStart}, ${rangeEnd}])
Sie haben folgende Möglichkeiten, dieses Problem zu beheben:
Platzieren Sie die Liste in einem Ausdruck:
${[rangeStart, rangeEnd]}Setzen Sie jeden Ausdruck in einfache Anführungszeichen:
['${rangeStart}', '${rangeEnd}']
Das Ergebnis ist dann wie erwartet eine Liste mit zwei Werten.
Kundenverwaltete Verschlüsselungsschlüssel (CMEK, Customer-Managed Encryption Keys)
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 |
|---|---|
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. (Beachten Sie, dass sie sich in verschiedenen Projekten befinden können.) Weitere Informationen finden Sie unter Cloud KMS-Standorte und Workflows-Standorte. |
| Cloud KMS-Kontingentlimit überschritten | Ihr Kontingentlimit für Cloud KMS-Anfragen wurde erreicht.
Lösung: Beschränken 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 mit dem Fehlercode 404 antwortet, wenn versucht wird, die Connectormethode googleapis.run.v1.namespaces.jobs.create zu verwenden.
Bei dieser Methode müssen Sie den Standort des HTTP-Endpunkts angeben. Zum 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 Aufrufen 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 Sie auf Ressourcenlimits oder einen Fehler wie ResourceLimitError, MemoryLimitExceededError oder ResultSizeLimitExceededError stoßen, können Sie Speicher freigeben, indem Sie Variablen löschen.
Beispielsweise möchten Sie möglicherweise Arbeitsspeicher freigeben, der für nachfolgende Schritte benötigt wird. Oder Sie haben Aufrufe mit Ergebnissen, die Sie nicht interessieren, und können diese Ergebnisse ganz weglassen.
YAML-Einrückung
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 fälschlicherweise ein Listenelement angegeben, das eine Zuordnung mit stepName- und call-Elementen enthält:
- 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.