Resolver problemas

Nesta página, mostramos como resolver problemas que podem ser encontrados ao usar o Workflows.

Para mais informações, consulte os Workflows de monitoring e depuração.

Erros de implantação

Quando um fluxo de trabalho é implantado, o Workflows verifica se o código-fonte não tem erros e corresponde à sintaxe da linguagem. Caso haja algum, o Workflows retorna um erro. Os tipos mais comuns de erros de implantação são:

  • Referenciar uma variável, etapa ou subfluxo de trabalho indefinido
  • Sintaxe incorreta
    • Recuo incorreto
    • {, }, ", - ou : ausentes ou irrelevantes

Por exemplo, o código-fonte a seguir gera um erro de implantação porque a instrução de retorno referencia uma variável indefinida, varC:

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

Esse código-fonte incorreto é usado nos seguintes exemplos do Console do Google Cloud e da CLI gcloud.

Console

Quando ocorre um erro de implantação, o Workflows exibe a mensagem de erro em um banner na página Editar fluxo de trabalho: Erro de implantação A mensagem de erro sinaliza o problema no código-fonte, especificando a origem do erro quando 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 você executa o comando gcloud workflows deploy, o Workflows retorna uma mensagem de erro para a linha de comando se a implantação falhar. A mensagem de erro sinaliza o problema no código-fonte, especificando a origem do erro quando 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. Nesse caso, consulte varA em vez de varC.

Erros de permissã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 403. 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).

Todo fluxo de trabalho é associado a uma conta de serviço do IAM no momento em que o fluxo de trabalho é criado. Para resolver esse problema, conceda à conta de serviço um ou mais papéis do IAM que contenham as permissões mínimas necessárias para gerenciar seu fluxo de trabalho. Por exemplo, se você quiser permitir que o fluxo de trabalho envie registros para o Cloud Logging, verifique se a conta de serviço que executa o fluxo de trabalho recebeu um papel que inclua a permissão logging.logEntries.create. Para mais informações, consulte Conceder permissão a um fluxo de trabalho para acessar os recursos do Google Cloud.

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

Se você receber um erro PERMISSION_DENIED ao tentar usar uma conta de serviço entre projetos para implantar um fluxo de trabalho, verifique se a restrição booleana iam.disableCrossProjectServiceAccountUsage não foi aplicada ao projeto e se configurou corretamente a conta de serviço. Para mais informações, consulte Implantar um fluxo de trabalho com uma conta de serviço entre projetos.

O nome do recurso precisa 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 400. 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 esse problema, verifique se o nome do recurso segue o padrão do rótulo DNS, conforme definido na RFC 1123 (em inglês), e se, ao atribuir variáveis, você está concatenando strings e expressões corretamente.

Por exemplo, não é possível atribuir uma variável como esta: - string: hello-${world}. Em vez disso, faça isto:

YAML

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

JSON

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

Expressões com dois-pontos

No YAML, expressões com dois-pontos podem causar um comportamento inesperado se os dois-pontos forem interpretados como a definição de um mapa. Embora seja possível implantar e executar o fluxo de trabalho, a saída não será a esperada.

Se você estiver criando um fluxo de trabalho usando o console do Google Cloud, ele não poderá ser renderizado visualmente, e você poderá receber um aviso semelhante ao seguinte:

Aviso de criação de fluxo de trabalho

Para resolver esse problema, coloque a expressão YAML entre aspas simples:

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

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

Mapear chaves usando caracteres não alfanuméricos

Ao acessar as chaves do mapa com caracteres não alfanuméricos (por exemplo, o ponto de exclamação em "special!key": value), você precisa colocar o nome da chave entre aspas. Se o nome da chave não estiver entre aspas, não será possível implantar o fluxo de trabalho. Por exemplo, se você tentar implantar o código-fonte abaixo, uma token recognition error será gerada:

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

Para resolver isso, use o seguinte código para retornar a saída:

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

Várias expressões em uma lista

O uso de várias expressões dentro de uma lista, como o seguinte exemplo de intervalo de iteração, não é um YAML válido:

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

É possível resolver esse problema seguindo um destes procedimentos:

  • Coloque a lista dentro de uma expressão:

    ${[rangeStart, rangeEnd]}

  • Coloque cada expressão entre aspas simples:

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

O resultado é uma lista de dois valores, conforme esperado.

Chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês)

É possível que você encontre erros ao usar o Cloud KMS com o Workflows. A tabela a seguir descreve diferentes problemas e como resolvê-los.

Problema Descrição
Permissão cloudkms.cryptoKeyVersions.useToEncrypt negada A chave do Cloud KMS fornecida não existe ou a permissã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: reativar a versão da chave do Cloud KMS.

A região do keyring não corresponde ao recurso a ser protegido A região do keyring do KMS fornecida é diferente da região do fluxo de trabalho.

Solução: use um keyring do Cloud KMS e um fluxo de trabalho protegido da mesma região. Elas podem estar em projetos diferentes. Para mais informações, consulte Locais do Cloud KMS e Locais dos fluxos de trabalho.

O limite de cota do Cloud KMS foi excedido Seu limite de cota para solicitações do Cloud KMS foi atingido.

Solução: limite o número de chamadas do Cloud KMS ou aumente o limite da cota. Para mais informações, acesse Cotas do Cloud KMS.

A entidade solicitada não foi encontrada ao usar o conector do Cloud Run

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

Esse método exige que você especifique a localização do endpoint HTTP. Por exemplo, us-central1 ou asia-southeast1. Se você não especificar um local, o endpoint global https://run.googleapis.com será usado. No entanto, esse local aceita apenas métodos de lista.

Para resolver esse problema, especifique um argumento location ao chamar o conector. Para ver as opções de local da API Cloud Run Admin, consulte endpoints do serviço.

Limites de recursos

Se você encontrar limites de recursos ou um erro como ResourceLimitError, MemoryLimitExceededError ou ResultSizeLimitExceededError, libere memória limpando variáveis. Por exemplo, talvez você queira liberar a memória necessária para as etapas subsequentes. Também é possível ter chamadas com resultados que não são importantes para você e omitir esses resultados completamente.

Recuo YAML

O recuo do YAML é significativo e precisa ter pelo menos dois espaços por nível de recuo. Recuo insuficiente pode causar erros, e um novo nível precisa estar pelo menos dois espaços a partir do início do texto na linha anterior.

Por exemplo, o código a seguir especifica incorretamente um item de lista que contém um mapa com itens stepName e call:

- stepName:
  call: sys.log

Em vez disso, você precisa recuar a linha subsequente em dois espaços para aninhar call dentro de stepName:

- stepName:
    call: sys.log

Use espaços, em vez de caracteres de tabulação, para recuar as linhas.

A seguir