Auf dieser Seite erfahren Sie, wie Sie Probleme beheben können, die bei der Verwendung von Workflows
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 der folgenden Google Cloud Console verwendet und gcloud CLI.
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-Fehler mit Dienstkontoberechtigungen 403
Die Workflowausführung schlägt fehl, wenn ein HTTP-Server einen Fehlercode zurückgibt
von 403
. 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 einem IAM-Dienstkonto am
wenn der Workflow erstellt wird. Um dieses Problem zu beheben, müssen Sie dem Dienst
eine oder mehrere IAM-Rollen, die das Minimum
Berechtigungen, die zum Verwalten Ihres Workflows erforderlich sind. 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 429 Too many requests
Es gibt eine maximale Anzahl aktiver Workflows
Ausführungen, die gleichzeitig
ausgeführt werden können. Wenn dieses Kontingent erschöpft ist
deaktiviert ist oder das Kontingent für zurückgestellte Ausführungen
erreicht, schlagen neue Ausführungen mit dem HTTP-Status 429 Too many requests
fehl
Code.
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 das Ausführungsrückprotokoll für alle Anfragen (einschließlich der von Cloud Tasks ausgelösten Anfragen) mit dem folgende Ausnahmen:
- 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 Ausführungen, die von Pub/Sub ausgelöst werden, ist das Backlogging deaktiviert und können nicht konfiguriert werden.
Weitere Informationen finden Sie unter Ausführungsbacklogging 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 den Fehler PERMISSION_DENIED
erhalten, wenn Sie versuchen, einen
projektübergreifenden Dienstkonto zum Bereitstellen eines Workflows. Stellen Sie sicher, dass der
Die boolesche Einschränkung iam.disableCrossProjectServiceAccountUsage
wird nicht erzwungen
für Ihr Projekt und ob Sie das Dienstkonto korrekt eingerichtet haben. Für
Weitere Informationen finden Sie unter Workflow mit einem projektübergreifenden Dienst bereitstellen
Konto.
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 darauf, dass der Ressourcenname dem DNS-Label folgt, um dieses Problem zu beheben wie in den RFC 1123 und beim Zuweisen von Variablen verketten Sie strings und Ausdrücke korrekt.
Eine Variable kann beispielsweise nicht so zugewiesen werden: - 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. Auch wenn es möglich ist, und den Workflow ausführen, ist die Ausgabe nicht wie erwartet.
Wenn Sie einen Workflow über die Google Cloud Console erstellen, kann er nicht in der Google Cloud Console visuell gerendert werden. 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
Beim Zugriff auf Kartenschlüssel mit nicht alphanumerischen Zeichen (z. B.
Ausrufezeichen in "special!key": value
), müssen Sie den Schlüsselnamen in
Anführungszeichen. Wenn der Schlüsselname nicht in Anführungszeichen gesetzt ist, kann der Workflow nicht
bereitgestellt. Wenn Sie beispielsweise versuchen, den folgenden Quellcode bereitzustellen, wird ein
token recognition error
wird ausgelöst:
- init:
assign:
- var:
key:
"special!key": bar
- returnOutput:
return: '${"foo" + var.key[special!key]}'
Um dieses Problem zu beheben, verwenden Sie stattdessen den folgenden Code, um die Ausgabe zurückzugeben:
'${"foo" + var.key["special!key"]}'
Mehrere Ausdrücke in einer Liste
Mehrere Ausdrücke innerhalb einer Liste verwenden, z. B. Iterationsbereich Beispiel ist keine gültige YAML-Datei:
[${rangeStart}, ${rangeEnd}])
Sie haben folgende Möglichkeiten, dieses 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 mit zwei Werten.
Vom Kunden verwaltete Verschlüsselungsschlüssel (CMEK)
Bei der Verwendung von Cloud KMS mit Workflows In der folgenden Tabelle werden verschiedene Probleme und wie Sie sie lösen können.
Problem | Beschreibung |
---|---|
Berechtigung cloudkms.cryptoKeyVersions.useToEncrypt ist
abgelehnt |
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.
|
Schlüsselbundregion entspricht nicht der zu schützenden Ressource | Die angegebene KMS-Schlüsselbundregion unterscheidet sich von der Region der
zu optimieren.
Lösung: Geschützten Cloud KMS-Schlüsselbund verwenden für den Workflow aus derselben Region. (Beachten Sie, dass diese sich projects.) Weitere Informationen finden Sie unter Cloud KMS-Standorte und Workflows-Standorte. |
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. |
Die angeforderte Entität wurde bei Verwendung des Cloud Run-Connectors nicht gefunden
Die Workflowausführung schlägt fehl, wenn ein HTTP-Server einen Fehlercode zurückgibt
404
, wenn Sie versuchen, die Connector-Methode zu verwenden,
googleapis.run.v1.namespaces.jobs.create
Bei dieser Methode müssen Sie den Speicherort des HTTP-Endpunkts angeben. Für
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.
Um dieses Problem zu beheben, geben Sie beim Anrufen des Connectors ein location
-Argument an.
Informationen zu 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 z. B. Arbeitsspeicher freigeben, der für weitere
Schritte. Möglicherweise haben Sie auch Anrufe mit Ergebnissen, die Sie nicht interessieren. Diese Ergebnisse können Sie dann ganz weglassen.
YAML-Einzug
Der YAML-Einzug ist sinnvoll und sollte mindestens zwei Leerzeichen pro Einrückungsebene umfassen. Unzureichende Einzüge können Fehler verursachen. Eine neue Ebene sollte mindestens zwei Leerzeichen zum Anfang des Textes in der vorherigen Zeile.Im folgenden Beispiel wird fälschlicherweise ein Listenelement angegeben, das
eine Karte mit stepName
- und call
-Elementen:
- 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.