Auf dieser Seite erfahren Sie, wie Sie Probleme bei der Verwendung von Workflows beheben können.
Weitere Informationen finden Sie unter monitoring und Fehlerbehebung.
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, zeigt Workflows die Fehlermeldung in einem Banner auf der Seite Workflow bearbeiten an: 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
-Dienstkontoberechtigungsfehler
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 seiner Erstellung mit einem IAM-Dienstkonto verknüpft. Zum Beheben dieses Problems müssen Sie dem Dienstkonto eine oder mehrere IAM-Rollen zuweisen, die die Mindestberechtigungen für die Verwaltung Ihres Workflows enthalten. 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
gewährt worden sein. Weitere Informationen finden Sie unter Workflowberechtigung für den Zugriff auf Google Cloud-Ressourcen gewähren.
Berechtigungsfehler bei projektübergreifenden Dienstkontoberechtigungen
Wenn Sie beim Versuch, ein projektübergreifendes Dienstkonto zum Bereitstellen eines Workflows zu verwenden, die Fehlermeldung PERMISSION_DENIED
erhalten, achten Sie darauf, dass die boolesche Einschränkung iam.disableCrossProjectServiceAccountUsage
für Ihr Projekt nicht erzwungen wird und Sie das Dienstkonto korrekt eingerichtet haben. Weitere Informationen finden Sie unter Workflow mit einem projektübergreifenden Dienstkonto bereitstellen.
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 darauf, dass der Ressourcenname dem in RFC 1123 definierten DNS-Labelstandard entspricht und dass Sie beim Zuweisen von Variablen Strings und Ausdrücke korrekt verketten, um dieses Problem zu beheben.
Sie können beispielsweise keine Variable wie diese zuweisen: - string: hello-${world}
.
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, die Ausgabe wird jedoch nicht wie erwartet aussehen.
Wenn Sie einen Workflow mit der Google Cloud Console erstellen, kann er in der Google Cloud Console nicht visuell gerendert werden. Außerdem erhalten Sie möglicherweise eine Warnung ähnlich der folgenden:
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)}
Schlüssel mit nicht alphanumerischen Zeichen zuordnen
Wenn Sie auf Kartenschlüssel mit nicht alphanumerischen Zeichen zugreifen (z. B. dem 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
ausgegeben:
- 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 keine gültige YAML-Datei:
[${rangeStart}, ${rangeEnd}])
Führen Sie einen der folgenden Schritte aus, um das Problem zu beheben:
Platzieren Sie die Liste innerhalb eines Ausdrucks:
${[rangeStart, rangeEnd]}
Setzen Sie jeden Ausdruck in einfache Anführungszeichen:
['${rangeStart}', '${rangeEnd}']
Das Ergebnis ist dann, wie erwartet, eine Liste von zwei Werten.
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 angegebene Cloud KMS-Schlüsselversion wurde deaktiviert.
Lösung: Aktivieren Sie die Cloud KMS-Schlüsselversion wieder. |
Schlüsselbundregion stimmt nicht mit der zu schützenden Ressource überein | Die angegebene Region für den KMS-Schlüsselbund unterscheidet sich von der Region des Workflows.
Lösung: Verwenden Sie einen Cloud KMS-Schlüsselbund und einen geschützten Workflow aus derselben Region. (Hinweis: Sie können sich in verschiedenen Projekten befinden.) Weitere Informationen finden Sie unter Cloud KMS-Standorte und Standorte für Workflows. |
Cloud KMS-Kontingentlimit ü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 dem Versuch, die Connector-Methode googleapis.run.v1.namespaces.jobs.create
zu verwenden, 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. An diesem Standort werden jedoch nur Listenmethoden unterstützt.
Zum Beheben dieses Problems müssen Sie beim Aufrufen des Connectors das Argument location
angeben.
Standortoptionen für die Cloud Run Admin API finden Sie unter Dienstendpunkte.
Ressourcenlimits
Wenn Ressourcenlimits oder ein Fehler wie ResourceLimitError
, MemoryLimitExceededError
oder ResultSizeLimitExceededError
auftritt, können Sie Arbeitsspeicher freigeben, indem Sie Variablen löschen.
Sie können beispielsweise Arbeitsspeicher freigeben, der für nachfolgende Schritte benötigt wird. Oder es gibt Anrufe mit Ergebnissen, die für Sie nicht relevant sind, und Sie können diese Ergebnisse ganz weglassen.
YAML-Einzug
Die YAML-Einrückung ist sinnvoll und sollte pro Einrückungsebene mindestens zwei Leerzeichen enthalten. Ein unzureichender Einzug kann zu Fehlern führen. Eine neue Ebene sollte mindestens zwei Leerzeichen vom Anfang des Texts in der vorherigen Zeile entfernt sein.Im folgenden Beispiel wird fälschlicherweise ein Listenelement angegeben, das eine Karte mit stepName
- und call
-Elementen enthält:
- stepName:
call: sys.log
Stattdessen sollten Sie die nachfolgende Zeile um zwei Leerzeichen einrücken, um call
innerhalb von stepName
zu verschachteln:
- stepName:
call: sys.log
Verwenden Sie beim Einrücken von Zeilen Leerzeichen anstelle von Tabulatorzeichen.