Probleme beheben

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: Bereitstellungsfehler 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:

Warnung bei der Workflowerstellung

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.

Nächste Schritte