Nesta página, mostramos como resolver problemas que podem ocorrer ao usar o Workflows.
Para mais informações, consulte Monitoramento e debugging do Workflows.
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 exemplos do console do Google Cloud e da CLI gcloud a seguir.
Console
Quando ocorre um erro de implantação, o Workflows mostra 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
de 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).
Cada fluxo de trabalho é associado a uma conta de serviço do IAM no momento da criação. 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 o fluxo de trabalho. Por exemplo, se você quer permitir
seu fluxo de trabalho envia registros para o Cloud Logging, verifique se a conta de serviço
para executar o fluxo de trabalho recebeu um papel que inclui o
logging.logEntries.create
. Para mais informações, consulte
Conceda permissão a um fluxo de trabalho para acessar os recursos do Google Cloud.
Erros HTTP 429 Too many requests
Há um número máximo de execuções de fluxo de trabalho ativas que podem ser executadas simultaneamente. Quando essa cota for esgotada e se
a execução de backlogging estiver desativada ou se a cota para execuções em backlogging for
atingida, todas as novas execuções vão falhar com um código de status HTTP
429 Too many requests
.
O backlogging de execução permite enfileirar execuções de fluxo de trabalho quando a cota de execuções simultâneas é atingida. Por padrão, o back-logging de execução é ativado para todas as solicitações (incluindo as acionadas pelo Cloud Tasks) com o seguintes exceções:
- Ao criar uma execução usando um
executions.run
ouexecutions.create
em um fluxo de trabalho, o back-logging de execução será desativado por padrão. Você pode configurá-la definindo explicitamente o tamanhodisableConcurrencyQuotaOverflowBuffering
comofalse
. - Para execuções acionadas pelo Pub/Sub, o registro de execução é desativado e não pode ser configurado.
Para mais informações, consulte Gerenciar a defasagem de execução.
Também é possível ativar uma fila do Cloud Tasks para executar fluxos de trabalho filhos a uma taxa definida e alcançar uma taxa de execução melhor. Nesse caso, é recomendável desativar explicitamente o backlogging de execução.
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 é aplicada
ao seu projeto e se você 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
de 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 rótulo de DNS padrão, conforme definido RFC 1123, e que ao atribuir variáveis, você está concatenando strings e expressions 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á como o esperado.
Se você criar um fluxo de trabalho usando o console do Google Cloud, ele não poderá ser renderizado visualmente no console do Google Cloud e pode receber 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 chaves de mapas com caracteres não alfanuméricos (por exemplo, o
ponto de exclamação em "special!key": value
), será necessário unir o nome da chave
aspas. Se o nome da chave não estiver entre aspas, o fluxo de trabalho não poderá ser
implantados. Por exemplo, se você tentar implantar o seguinte código-fonte, uma
token recognition error
será gerada:
- init:
assign:
- var:
key:
"special!key": bar
- returnOutput:
return: '${"foo" + var.key[special!key]}'
Para resolver esse problema, 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 exemplo de intervalo de iteração abaixo, não é um YAML válido:
[${rangeStart}, ${rangeEnd}])
Para resolver esse problema, faça o seguinte:
Coloque a lista dentro de uma expressão:
${[rangeStart, rangeEnd]}
Coloque cada expressão entre aspas simples:
['${rangeStart}', '${rangeEnd}']
O resultado é, então, uma lista de dois valores, conforme esperado.
Chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês)
Talvez você encontre erros ao usar o Cloud KMS com fluxos de trabalho. A tabela a seguir descreve diferentes problemas e como resolvê-los.
Problema | Descrição |
---|---|
A permissão cloudkms.cryptoKeyVersions.useToEncrypt é
negado |
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: reative 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 uma na mesma região. (Observe que eles podem estar em diferentes projects.) Para mais informações, consulte Locais do Cloud KMS e Locais dos fluxos de trabalho. |
O limite de cota do Cloud KMS foi excedido | Você atingiu o limite de cota para solicitações do Cloud KMS.
Solução: limite o número de chamadas do Cloud KMS ou aumentar o limite da cota. Para mais informações, consulte 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
de 404
ao tentar usar o método do conector,
googleapis.run.v1.namespaces.jobs.create
.
Esse método exige que você especifique o local do endpoint HTTP. Por
exemplo, us-central1
ou asia-southeast1
. Se você não especificar um local,
o endpoint global https://run.googleapis.com
é usado; No entanto, esse local
é compatível apenas com métodos de lista.
Para resolver esse problema, especifique um argumento location
ao
chamar o conector.
Para opções de localização da API Cloud Run Admin, consulte
endpoints de serviço.
Limites de recurso
Se você encontrar limites de recursos ou
um erro, como ResourceLimitError
, MemoryLimitExceededError
ou
ResultSizeLimitExceededError
, é possível liberar memória
limpar variáveis.
Por exemplo, é possível liberar memória necessária para
etapas. Ou você pode ter chamadas com resultados que não são importantes para você
omitem esses resultados completamente.
Recuo no YAML
O recuo YAML é significativo e deve ter pelo menos dois espaços por nível de recuo. Recuo insuficiente pode causar erros, e um novo nível precisa ter pelo menos dois espaços a partir do início do texto na linha anterior.Por exemplo, o código abaixo especifica incorretamente um item de lista contendo
um mapa com itens stepName
e call
:
- stepName:
call: sys.log
Em vez disso, recue a linha subsequente em dois espaços para aninhar call
.
em stepName
:
- stepName:
call: sys.log
Use espaços, em vez de caracteres de tabulação, para recuar as linhas.