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:
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
ouexecutions.create
num fluxo de trabalho, o registo de execuções pendentes está desativado por predefinição. Pode configurá-lo definindo explicitamente o campodisableConcurrencyQuotaOverflowBuffering
da execução comofalse
. - 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:
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.