Probleme beheben

Auf dieser Seite erfahren Sie, wie Sie Probleme bei der Verwendung von Workflows beheben.

Weitere Informationen finden Sie unter Monitoring und Fehlerbehebung 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 return-Anweisung auf die nicht definierte Variable varC verweist:

- step1:
    assign:
    - varA: "Hello"
    - varB: "World"
- step2:
    return: ${varC + varB}

Dieser falsche Quellcode wird in den folgenden Google Cloud console und gcloud CLI Beispielen verwendet.

Console

Wenn ein Bereitstellungsfehler auftritt, wird in Workflows die Fehler meldung in einem Banner auf der Seite Workflow bearbeiten angezeigt: 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-Fehler 403 aufgrund von 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 zum Verwalten Ihres Workflows enthalten. Wenn Sie beispielsweise zulassen 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 Zugriff auf Ressourcen für einen Workflow gewähren Google Cloud .

HTTP-Fehler 404 No such object oder Not found

Bei Verwendung des Cloud Storage-Connectors, schlägt die Workflowausführung fehl, wenn ein HTTP-Server mit dem Fehlercode 404antwortet. 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, um sie pfadsicher zu machen. Mit den url_encode und url_encode_plus Funktionen können Sie entsprechende Zeichen codieren, wenn sie entweder im Objekt namen 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 Überlegungen zur Benennung von Cloud Storage.

HTTP-Fehler 429 Too many requests

Es gibt eine maximale Anzahl aktiver Workflow ausführungen, die gleichzeitig ausgeführt werden können. Sobald dieses Kontingent ausgeschöpft ist und die Ausführungs-Backlog-Funktion 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 der Ausführungs-Backlog-Funktion können Sie Workflowausführungen in die Warteschlange stellen, sobald das Kontingent für gleichzeitige Ausführungen erreicht ist. Standardmäßig ist die Ausführungs-Backlog-Funktion für alle Anfragen aktiviert (einschließlich der von Cloud Tasks ausgelösten), mit folgenden Ausnahmen:

  • Wenn Sie eine Ausführung mit einem executions.run oder executions.create Connector in einem Workflow erstellen, ist die Ausführungs-Backlog-Funktion standardmäßig deaktiviert. Sie können sie konfigurieren, indem Sie das Feld disableConcurrencyQuotaOverflowBuffering der Ausführung explizit auf false setzen.
  • Bei Ausführungen, die von Pub/Sub ausgelöst werden, ist die Ausführungs-Backlog-Funktion deaktiviert und kann nicht konfiguriert werden.

Weitere Informationen finden Sie unter Ausführungs-Backlog verwalten.

Sie können auch eine Cloud Tasks-Warteschlange 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ührungs-Backlog-Funktion explizit deaktivieren.

Fehler aufgrund von Dienstkontoberechtigungen für projektübergreifende 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 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 Ihr Ressourcenname dem DNS-Label standard gemäß RFC 1123 entspricht und dass Sie beim Zuweisen von Variablen Strings und Ausdrücke richtig verknüpfen.

Sie können beispielsweise keine Variable so 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, 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:

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)}

Zuordnungsschlüssel mit nicht alphanumerischen Zeichen

Wenn Sie auf Zuordnungsschlü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 Iterationsbereich Beispiel ist kein gültiges YAML:

[${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.

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 ist 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.

Das Kontingentlimit für Cloud KMS wurde überschritten Das 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 von 404 antwortet, wenn versucht wird, die Connectormethode googleapis.run.v1.namespaces.jobs.create zu verwenden.

Für diese Methode müssen Sie den Standort 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 zur Behebung dieses Problems beim Aufrufen des Connectors ein location Argument an. 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 Arbeitsspeicher freigeben, indem Sie Variablen löschen. Möglicherweise müssen Sie Arbeitsspeicher freigeben, der für nachfolgende Schritte benötigt wird. Oder Sie haben Aufrufe mit Ergebnissen, die Sie nicht benötigen, 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 ein Listenelement, das eine Zuordnung mit den Elementen stepName und call enthält, 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

Achten Sie darauf, dass Sie Leerzeichen und keine Tabulatorzeichen verwenden, um Zeilen einzurücken.

Nächste Schritte