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