Resolver problemas

Esta página mostra como resolver problemas que pode encontrar ao usar os fluxos de trabalho.

Para mais informações, consulte os artigos sobre a monitorização e a depuração de fluxos de trabalho.

Erros de implementação

Quando um fluxo de trabalho é implementado, o Workflows verifica se o código fonte não tem erros e corresponde à sintaxe da linguagem. Os fluxos de trabalho devolvem um erro se for encontrado um. Os tipos mais comuns de erros de implementação são:

  • Fazer referência a uma variável, um passo ou um subfluxo de trabalho não definidos
  • Sintaxe incorreta
    • Avanço incorreto
    • {, }, ", - ou : em falta ou excesso

Por exemplo, o código fonte seguinte gera um erro de implementação porque a declaração return faz referência a uma variável indefinida, varC:

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

Este código-fonte incorreto é usado nos seguintes exemplos da Google Cloud consola e da CLI gcloud.

Consola

Quando ocorre um erro de implementação, os fluxos de trabalho apresentam a mensagem de erro numa faixa na página Editar fluxo de trabalho: Erro de implementação A mensagem de erro sinaliza o problema no código fonte, especificando a origem do erro sempre que possível:

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

Quando executa o comando gcloud workflows deploy, o Workflows devolve uma mensagem de erro à linha de comandos se a implementação falhar. A mensagem de erro sinaliza o problema no código-fonte, especificando a origem do erro sempre que possível:

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

Para resolver o problema, edite o código-fonte do fluxo de trabalho. Neste caso, consulte varA em vez de varC.

Erros de autorização da conta de serviço HTTP 403

A execução do fluxo de trabalho falha quando um servidor HTTP responde com um código de erro de 403. Por exemplo:

Permission 'iam.serviceaccounts.actAs' denied on service
account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).

ou

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

Cada fluxo de trabalho está associado a uma conta de serviço do IAM no momento em que o fluxo de trabalho é criado. Para resolver este problema, tem de conceder à conta de serviço uma ou mais funções do IAM que contenham as autorizações mínimas necessárias para gerir o seu fluxo de trabalho. Por exemplo, se quiser permitir que o seu fluxo de trabalho envie registos para o Cloud Logging, certifique-se de que foi concedida à conta de serviço que executa o fluxo de trabalho uma função que inclua a autorização logging.logEntries.create. Para mais informações, consulte o artigo Conceda uma autorização de fluxo de trabalho para aceder a Google Cloud recursos.

Erros HTTP 404 No such object ou Not found

Quando usa o conector do Cloud Storage, a execução do fluxo de trabalho falha quando um servidor HTTP responde com um código de erro de 404. Por exemplo:

HTTP server responded with error code 404
in step "read_input_file", routine "main", line: 13
{
  "body": "Not Found",
  "code": 404,
  ...
}

Deve codificar os nomes dos objetos em URL para que sejam seguros para o caminho. Pode usar as funções url_encode e url_encode_plus para codificar os carateres aplicáveis quando aparecem no nome do objeto ou na string de consulta de um URL de pedido. Por exemplo:

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

Se não codificar o nome do objeto com URL e o seu contentor de armazenamento tiver pastas, o pedido falha. Para mais informações, consulte os artigos Codificar partes do caminho do URL e Considerações de nomenclatura do Cloud Storage.

Erros de HTTP 429 Too many requests

Existe um número máximo de execuções de fluxo de trabalho ativas que podem ser executadas em simultâneo. Quando esta quota se esgota e se o registo em atraso de execuções estiver desativado ou se a quota de execuções em atraso for atingida, todas as novas execuções falham com um código de estado HTTP 429 Too many requests.

A acumulação de execuções permite-lhe colocar execuções de fluxos de trabalho em fila de espera assim que a quota de execuções concorrentes for atingida. Por predefinição, o atraso na execução está ativado para todos os pedidos (incluindo os acionados pelo Cloud Tasks) com as seguintes exceções:

  • Quando cria uma execução com um conetor executions.run ou executions.create num fluxo de trabalho, o registo de execuções pendentes está desativado por predefinição. Pode configurá-lo definindo explicitamente o campo disableConcurrencyQuotaOverflowBuffering da execução como false.
  • Para execuções acionadas pelo Pub/Sub, o registo de execuções pendentes está desativado e não pode ser configurado.

Para mais informações, consulte o artigo Faça a gestão do atraso na execução.

Também pode ativar uma fila do Cloud Tasks para executar fluxos de trabalho secundários a uma taxa que define e alcançar uma melhor taxa de execução. Nesse caso, é recomendável desativar explicitamente o registo em atraso da execução.

Erros de autorização da conta de serviço entre projetos

Se receber um erro PERMISSION_DENIED ao tentar usar uma conta de serviço entre projetos para implementar um fluxo de trabalho, certifique-se de que a restrição booleana iam.disableCrossProjectServiceAccountUsage não é aplicada ao seu projeto e que configurou corretamente a conta de serviço. Para mais informações, consulte o artigo Implemente um fluxo de trabalho com uma conta de serviço entre projetos.

O nome do recurso tem de estar em conformidade com o RFC 1123

A execução do fluxo de trabalho falha quando um servidor HTTP responde com um código de erro de 400. Por exemplo:

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

Para resolver este problema, certifique-se de que o nome do recurso segue a norma de etiqueta DNS, conforme definido na RFC 1123, e que, ao atribuir variáveis, está a concatenar strings e expressões corretamente.

Por exemplo, não pode atribuir uma variável da seguinte forma: - string: hello-${world}. Em vez disso, faça o seguinte:

YAML

  - assign_vars:
      assign:
          - string: "hello"
          - string: ${string+" "+"world"}

JSON

  [
    {
      "assign_vars": {
        "assign": [
          {
            "string": "hello"
          },
          {
            "string": "${string+" "+"world"}"
          },
        ]
      }
    }
  ]

Expressões que contêm dois pontos

Em YAML, as expressões que contêm dois pontos podem causar um comportamento inesperado quando os dois pontos são interpretados como a definição de um mapa. Embora seja possível implementar e executar o fluxo de trabalho, o resultado não será o esperado.

Se criar um fluxo de trabalho através da Google Cloud consola, o fluxo de trabalho não pode ser renderizado visualmente na Google Cloud consola e pode receber um aviso semelhante ao seguinte:

Aviso de criação de fluxo de trabalho

Pode resolver este problema ao incluir a expressão YAML entre aspas simples:

Recomendado: '${"a: " +string(a)}'

Não recomendado: ${"a: " +string(a)}

Mapeie teclas com carateres não alfanuméricos

Quando acede a chaves de mapas com carateres não alfanuméricos (por exemplo, o ponto de exclamação em "special!key": value), tem de incluir o nome da chave entre aspas. Se o nome da chave não estiver entre aspas, não é possível implementar o fluxo de trabalho. Por exemplo, se tentar implementar o seguinte código fonte, é gerado um erro de token recognition error:

- init:
    assign:
    - var:
        key:
            "special!key": bar
- returnOutput:
    return: '${"foo" + var.key[special!key]}'

Para resolver este problema, use o seguinte código para devolver o resultado:

'${"foo" + var.key["special!key"]}'

Várias expressões numa lista

A utilização de várias expressões numa lista, como no seguinte exemplo de intervalo de iteração, não é um YAML válido:

[${rangeStart}, ${rangeEnd}])

Pode resolver este problema através de uma das seguintes ações:

  • Coloque a lista numa expressão:

    ${[rangeStart, rangeEnd]}

  • Coloque cada expressão entre aspas simples:

    ['${rangeStart}', '${rangeEnd}']

O resultado é, então, uma lista de dois valores, como esperado.

Chaves de encriptação geridas pelo cliente (CMEK)

Pode encontrar erros quando usar o Cloud KMS com os Workflows. A tabela seguinte descreve diferentes problemas e como resolvê-los.

Problema Descrição
A autorização cloudkms.cryptoKeyVersions.useToEncrypt foi recusada A chave do Cloud KMS fornecida não existe ou a autorização não está configurada corretamente.

Solução:

A versão da chave não está ativada A versão da chave do Cloud KMS fornecida foi desativada.

Solução: reative a versão da chave do Cloud KMS.

A região do conjunto de chaves não corresponde ao recurso a proteger A região do conjunto de chaves do KMS fornecida é diferente da região do fluxo de trabalho.

Solução: use um conjunto de chaves do Cloud KMS e um fluxo de trabalho protegido da mesma região. (Tenha em atenção que podem estar em projetos diferentes.) Para mais informações, consulte as localizações do Cloud KMS e as localizações dos fluxos de trabalho.

O limite da quota do Cloud KMS foi excedido Atingiu o limite da quota de pedidos do Cloud KMS.

Solução: limite o número de chamadas do Cloud KMS ou aumente o limite de quotas. Para mais informações, consulte as cotas do Cloud KMS.

Entidade pedida não encontrada quando usa o conetor do Cloud Run

A execução do fluxo de trabalho falha quando um servidor HTTP responde com um código de erro de 404 ao tentar usar o método do conector, googleapis.run.v1.namespaces.jobs.create.

Este método requer que especifique a localização do ponto final HTTP. Por exemplo, us-central1 ou asia-southeast1. Se não especificar uma localização, é usado o ponto final global https://run.googleapis.com. No entanto, esta localização suporta apenas métodos de lista.

Para resolver este problema, certifique-se de que especifica um argumento location quando chama o conetor. Para opções de localização da API Cloud Run Admin, consulte os endpoints de serviço.

Limites de recursos

Se encontrar limites de recursos ou um erro, como ResourceLimitError, MemoryLimitExceededError ou ResultSizeLimitExceededError, pode libertar memória limpando as variáveis. Por exemplo, pode querer libertar memória necessária para passos subsequentes. Em alternativa, pode ter chamadas com resultados que não lhe interessam e pode omitir esses resultados por completo.

Avanço do YAML

O avanço do YAML é significativo e deve ter, pelo menos, dois espaços por nível de avanço. A indentação insuficiente pode causar erros, e um novo nível deve estar, pelo menos, dois espaços à direita do início do texto na linha anterior.

Por exemplo, o seguinte especifica incorretamente um item de lista que contém um mapa com itens stepName e call:

- stepName:
  call: sys.log

Em alternativa, deve recuar a linha seguinte dois espaços para aninhar call em stepName:

- stepName:
    call: sys.log

Certifique-se de que usa espaços, em vez de carateres de tabulação, para recuar linhas.

O que se segue?