Resolva problemas de funções do Cloud Run
Este documento mostra como resolver problemas de mensagens de erro e resolver problemas ao usar funções do Cloud Run. Se criou ou implementou uma função através do Cloud Run, consulte o artigo Resolva problemas do Cloud Run.
Implementação
Esta secção lista os problemas que pode encontrar com a implementação e fornece sugestões sobre como corrigir cada um deles. Muitos dos problemas que pode encontrar durante a implementação estão relacionados com funções e autorizações ou com uma configuração incorreta.
Usa a gestão de identidades e acessos para autorizar identidades a realizar ações administrativas em funções criadas através da API Cloud Functions v2, por exemplo, através da gcloud functions
, da API REST ou do Terraform. As ações de administração incluem
a criação, a atualização e a eliminação de funções. Para mais informações, consulte o artigo
Autorize o acesso com a IAM.
O utilizador não tem autorizações na conta de serviço de tempo de execução durante a implementação de uma função
Cada função está associada a uma conta de serviço que serve como identidade quando a função acede a outros recursos. Esta conta de serviço de tempo de execução pode ser a conta de serviço predefinida ou uma conta de serviço gerida pelo utilizador. Em ambientes onde várias funções estão a aceder a recursos diferentes, é uma prática comum usar identidades por função com contas de serviço de tempo de execução com nome em vez da conta de serviço de tempo de execução predefinida (PROJECT_NUMBER-compute@developer.gserviceaccount.com
).
Para usar uma conta de serviço de tempo de execução, o implementador tem de ter a autorização iam.serviceAccounts.actAs
nessa conta de serviço. Um utilizador que
cria uma conta de serviço de tempo de execução não predefinida recebe automaticamente esta
autorização, mas outros implementadores têm de receber esta autorização de um utilizador.
Atribua a autorização iam.serviceAccounts.actAs
à conta de serviço de tempo de execução
para o utilizador com a função Leitor do projeto, Programador do Cloud Functions ou
Administrador do Cloud Functions.
A mensagem de erro
Consola
You must have the iam.serviceAccounts.actAs permission on the selected service account. To obtain this permission, you can grant a role that includes it like the Service Account User role, on the project.
gcloud
Conta de serviço predefinida:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'
Conta de serviço não predefinida:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'
A solução
Atribua ao utilizador,
a função Utilizador da conta de serviço (roles/iam.serviceAccountUser
) na conta de serviço de tempo de execução predefinida ou não predefinida. Esta função inclui a autorização iam.serviceAccounts.actAs
.
A conta de serviço de implementação não tem autorizações do Pub/Sub quando implementa uma função orientada por eventos
O serviço do Cloud Functions usa a conta de serviço do agente de serviço do Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) quando realiza ações administrativas. Por predefinição, esta conta tem a função cloudfunctions.serviceAgent
do Cloud Functions atribuída. Para implementar funções orientadas por eventos, o serviço Cloud Functions tem de aceder ao Pub/Sub para configurar tópicos e subscrições. Se alterar a função atribuída à conta de serviço sem conceder as autorizações adequadas, o serviço Cloud Functions não pode aceder ao Pub/Sub e a implementação falha.
A mensagem de erro
Consola
Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/test-project-356312/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
A solução
Pode repor a sua conta de serviço para a função cloudfunctions.serviceAgent predefinida.
A conta de serviço de tempo de execução predefinida não existe
Quando não especifica uma conta de serviço de tempo de execução gerida pelo utilizador, o Cloud Functions usa a conta de serviço de computação predefinida como a conta de serviço de tempo de execução. As implementações falham se eliminar a conta predefinida sem especificar uma conta gerida pelo utilizador.
A mensagem de erro
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[404], code=[Ok], message=[Service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com was not found.]
A solução
Para resolver este problema, siga qualquer uma destas soluções:
Especifique uma conta de serviço de tempo de execução gerida pelo utilizador antes de implementar a sua função.
Anule a eliminação da conta de serviço através do ID numérico da conta de serviço predefinida.
A conta de serviço do agente do serviço do Cloud Functions não tem autorizações do contentor do projeto durante a implementação de uma função
As funções do Cloud Run só podem ser acionadas por eventos de contentores do Cloud Storage no Google Cloud projeto da plataforma. Além disso, a conta de serviço do agente de serviço do Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) precisa de uma função cloudfunctions.serviceAgent
no seu projeto.
A mensagem de erro
Consola
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/<project-id>/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
A solução
Para resolver este problema, reponha esta conta de serviço para a função predefinida.
O utilizador com a função de Editor de projetos não pode tornar uma função pública
A função de editor de projetos tem autorizações amplas para gerir recursos num projeto, mas não concede inerentemente a capacidade de tornar as Cloud Functions públicas. O utilizador ou o serviço que implementa a função requer a autorização run.services.setIamPolicy
.
A mensagem de erro
gcloud
ERROR: (gcloud.run.services.add-iam-policy-binding) PERMISSION_DENIED: Permission 'run.services.setIamPolicy' denied on resource 'projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME' (or resource may not exist).
A solução
Pode :
Atribua ao implementador a função de proprietário do projeto ou de administrador das Funções da nuvem.
Conceda a autorização manualmente criando uma função personalizada.
Verifique se a partilha restrita por domínio é aplicada no projeto.
A implementação de funções falha quando usa a política da organização de restrição da localização de recursos
Se a sua organização usar uma política de restrição de localização de recursos, restringe a implementação de funções nas regiões restritas pela política. Na Google Cloud consola, a região restrita não está disponível no menu pendente de regiões durante a implementação de uma função.
A mensagem de erro
gcloud
ResponseError: status=[400], code=[Ok], message=["LOCATION" violates constraint "constraints/gcp.resourceLocations" on the resource "projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME".]
A solução
Pode adicionar ou remover localizações das listas allowed_values
ou denied_values
de uma restrição de localizações de recursos para se adequar a uma implementação bem-sucedida.
A implementação da função falha durante a execução do âmbito global da função
Este erro indica que ocorreu um problema com o seu código. O pipeline de implementação terminou a implementação da função, mas falhou no último passo: o envio de uma verificação de estado para a função. Esta verificação de funcionamento destina-se a executar o âmbito global de uma função, o que pode gerar uma exceção, falhar ou exceder o limite de tempo. O âmbito global é onde carrega normalmente as bibliotecas e inicializa os clientes.
A mensagem de erro
Nos registos do Cloud Logging:
Could not create or update Cloud Run service FUNCTION_NAME, Container Healthcheck failed. Revision REVISION_NAMEE is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.
A solução
Para resolver este problema, siga qualquer uma destas soluções:
Para uma mensagem de erro mais detalhada, reveja os registos de compilação da sua função.
Se não for claro o motivo pelo qual a sua função não executou o respetivo âmbito global, considere mover temporariamente o código para a invocação do pedido, usando a inicialização tardia das variáveis globais. Isto permite-lhe adicionar declarações de registo adicionais em torno das suas bibliotecas cliente, que podem estar a expirar na respetiva instanciação (especialmente se estiverem a chamar outros serviços), a falhar ou a gerar exceções.
Além disso, experimente aumentar o limite de tempo da função. Os limites de tempo limite mais longos nas funções do Cloud Run oferecem mais espaço para a inicialização e uma alocação de recursos mais escalável num ambiente do Cloud Run, o que pode mitigar este problema se for causado por esgotamento de recursos.
O código-fonte tem de conter uma função de ponto de entrada que tenha sido especificada corretamente na implementação, através da consola ou do gcloud.
O utilizador com a função Leitor não pode implementar uma função
Os utilizadores com a função Project Viewer ou Cloud Functions Viewer têm acesso de só de leitura às funções e aos detalhes das funções, e não podem implementar novas funções. A funcionalidade Criar função está esbatida na Google Cloud consola com o seguinte erro:
A mensagem de erro
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.generateUploadUrl' denied on 'projects/PROJECT_ID/locations/LOCATION/functions']
A solução
Atribua ao utilizador a função de Programador das Funções do Google Cloud.
A conta de serviço de compilação tem autorizações em falta
A mensagem de erro
No erro de implementação da função ou nos registos de compilação, pode ver um dos seguintes erros:
The service account running this build does not have permission to write logs. To fix this, grant the Logs Writer (roles/logging.logWriter) role to the service account.
Step #0 - "fetch": failed to Fetch: failed to download archive gs://gcf-v2-sources-PROJECT_NUMBER-LOCATION/FUNCTION_NAME/version-VERSION_NUMBER/function-source.zip: Access to bucket gcf-v2-sources-PROJECT_NUMBER-LOCATION denied. You must grant Storage Object Viewer permission to PROJECT_NUMBER-compute@developer.gserviceaccount.com.
Step #2 - "build": ERROR: failed to create image cache: accessing cache image "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": connect to repo store "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": GET https://LOCATION-docker.pkg.dev/v2/token?scope=repository%3APROJECT%2Fgcf-artifacts%2FFUNCTION_NAME%2Fcache%3Apull&service=: DENIED: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "projects/PROJECT/locations/LOCATION/repositories/gcf-artifacts" (or it may not exist)
Could not build the function due to a missing permission on the build service account. If you didn't revoke that permission explicitly, this could be caused by a change in the organization policies.
A solução
A conta de serviço de compilação precisa de autorização para ler a partir do contentor de origem e autorizações de leitura e escrita para o repositório de implementação de artefactos. Pode encontrar este erro devido a uma alteração no comportamento predefinido de como o Cloud Build usa contas de serviço, detalhado no artigo Alteração da conta de serviço do Cloud Build.
Para resolver este problema, use qualquer uma destas soluções:
- Crie uma conta de serviço de compilação personalizada para implementações de funções.
- Adicione a
função de conta de serviço do Cloud Build
(
roles/cloudbuild.builds.builder
) à conta de serviço predefinida do Compute. - Reveja as orientações do Cloud Build sobre as alterações à conta de serviço predefinida e desative estas alterações.
Conta de serviço de compilação desativada
A mensagem de erro
Could not build the function due to disabled service account used by Cloud Build. Please make sure that the service account is active.
A solução
A conta de serviço de compilação tem de estar ativada para implementar uma função. Pode encontrar este erro devido a uma alteração no comportamento predefinido de como o Cloud Build usa as contas de serviço, detalhado no artigo Alteração da conta de serviço do Cloud Build.
Para resolver este problema, use qualquer uma destas soluções:
- Crie uma conta de serviço de compilação personalizada para implementações de funções.
- Ative a conta de serviço do Compute predefinida.
- Reveja as orientações do Cloud Build sobre as alterações à conta de serviço predefinida e desative estas alterações.
a servir
Esta secção apresenta problemas de publicação que pode encontrar e fornece sugestões sobre como corrigir cada um deles.
Erro de autorização de publicação devido à função que requer autenticação
As funções HTTP sem a opção Permitir invocações não autenticadas ativada restringem o acesso aos utilizadores finais e às contas de serviço que não têm as autorizações adequadas. Esta mensagem de erro indica que o autor da chamada não tem autorização para invocar a função.
A mensagem de erro
Código de resposta de erro HTTP: 403 Proibido
Corpo da resposta de erro de HTTP:
Error: Forbidden Your client does not have permission
to get URL /FUNCTION_NAME from this server.
A solução
Para resolver este problema, siga qualquer uma destas soluções:
Atribua ao utilizador a função Cloud Run Invoker Cloud IAM para a função específica.
Volte a implementar a sua função para permitir o acesso público, se a sua organização o suportar. Isto é útil para testes.
Erro de publicação devido à configuração do allow internal traffic only
As definições de entrada
restringem se uma função HTTP pode ser invocada por recursos
fora do seu Google Cloud projeto ou perímetro de serviço dos VPC Service Controls.
Quando configura a definição Permitir apenas tráfego interno para a rede de entrada, esta mensagem de erro indica que apenas são permitidos pedidos de redes VPC no mesmo projeto ou perímetro dos VPC Service Controls. Também pode ser um erro 404 para o URL functions.net
predefinido.
A mensagem de erro
Código de resposta de erro HTTP: 404 NOT FOUND
A solução
Para resolver este erro, siga qualquer uma destas soluções:
Certifique-se de que o pedido é proveniente do seu Google Cloud projeto ou perímetro de serviço dos VPC Service Controls.
Altere as definições de entrada para permitir todo o tráfego para a função.
O código fonte das funções do Cloud Run também pode resultar num erro 404 devido a um URL de função incorreto, métodos HTTP, erros de lógica, etc.
A invocação da função não tem credenciais de autenticação válidas
A invocação de uma função do Cloud Run configurada com acesso restrito requer um token de ID. As chaves de acesso ou os tokens de atualização não funcionam.
A mensagem de erro
Código de resposta de erro HTTP: 401 não autorizado
Corpo da resposta de erro de HTTP:
Your client does not have permission to the requested URL 'FUNCTION_NAME'
A solução
Para resolver este erro, siga uma destas soluções:
Certifique-se de que os seus pedidos incluem um cabeçalho
Authorization: Bearer ID_TOKEN
e que o token é um token de ID e não um token de acesso ou de atualização. Se gerar este token manualmente com a chave privada de uma conta de serviço, tem de trocar o token JWT autoassinado por um token de identidade assinado pela Google.Invoque a sua função HTTP através de credenciais de autenticação no cabeçalho do pedido. Por exemplo, pode obter um token de identidade através de
gcloud
da seguinte forma:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)"
https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAMEVolte a implementar a sua função para permitir invocações não autenticadas se a sua organização o suportar. Isto é útil para testes.
A função para a meio da execução ou continua a ser executada depois de o código terminar
Alguns tempos de execução de funções do Cloud Run permitem que os utilizadores executem tarefas assíncronas. Se a sua função criar essas tarefas, também tem de aguardar explicitamente que estas sejam concluídas. Caso contrário, a função pode deixar de ser executada no momento errado.
O comportamento do erro
A sua função apresenta um dos seguintes comportamentos:
- A sua função termina enquanto as tarefas assíncronas ainda estão em execução, mas antes de o período de tempo limite especificado ter decorrido.
- A sua função não para de ser executada quando estas tarefas terminam e continua a ser executada até o período de limite de tempo expirar.
A solução
Se a sua função terminar antecipadamente, deve certificar-se de que todas as tarefas assíncronas da função estão concluídas antes de a função realizar qualquer uma das seguintes ações:
- Devolver um valor
- Resolver ou rejeitar um objeto
Promise
devolvido (apenas funções do Node.js) - Acionar exceções ou erros não detetados
- Enviar uma resposta HTTP
- Chamar uma função de chamada de retorno
Se a sua função não terminar após a conclusão das tarefas assíncronas, deve verificar se a função está a sinalizar corretamente as funções do Cloud Run após a conclusão. Em particular, certifique-se de que executa uma das operações indicadas anteriormente assim que a sua função terminar as tarefas assíncronas.
Erro de tempo de execução ao aceder a recursos protegidos pelos VPC Service Controls
Por predefinição, as funções do Cloud Run usam endereços IP públicos para fazer pedidos de saída a outros serviços. Se as suas funções não estiverem dentro de um perímetro dos VPC Service Controls, isto pode fazer com que recebam respostas HTTP 403 quando tentarem aceder a serviços protegidos pelos VPC Service Controls, devido a recusas do perímetro de serviço. Google Cloud
A mensagem de erro
Nos registos de recursos auditados, uma entrada semelhante à seguinte:
"protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 7, "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "VPC_SERVICE_CONTROLS", ... "authenticationInfo": { "principalEmail": "CLOUD_FUNCTION_RUNTIME_SERVICE_ACCOUNT", ... "metadata": { "violationReason": "NO_MATCHING_ACCESS_LEVEL", "securityPolicyInfo": { "organizationId": "ORGANIZATION_ID", "servicePerimeterName": "accessPolicies/NUMBER/servicePerimeters/SERVICE_PERIMETER_NAME" ...
A solução
Para resolver este erro, siga uma destas soluções:
A função deve encaminhar todo o tráfego de saída através da rede VPC. Consulte a secção Implemente funções em conformidade com os VPC Service Controls para mais informações.
Em alternativa, conceda à conta de serviço de tempo de execução da função acesso ao perímetro. Pode fazê-lo criando um nível de acesso e adicionando o nível de acesso ao perímetro de serviço ou criando uma política de entrada no perímetro. Consulte o artigo Use os VPC Service Controls para mais informações.
Escalabilidade
Esta secção enumera os problemas de escalabilidade e fornece sugestões sobre como corrigir cada um deles.
Erros do Cloud Logging relacionados com anulações de pedidos de filas pendentes
As falhas de escalabilidade podem ocorrer nos seguintes cenários:
- Um aumento súbito e enorme no tráfego.
- Tempo de início a frio longo.
- Tempo de processamento de pedidos longo.
- Taxa de erros de função elevada.
- Atingir o limite máximo de instâncias e impedir o sistema de ser dimensionado.
- Fatores transitórios atribuídos ao serviço de funções do Cloud Run.
Em cada caso, as funções do Cloud Run podem não ser dimensionadas rapidamente o suficiente para gerir o tráfego.
A mensagem de erro
The request was aborted because there was no available instance
severity=WARNING
( Código de resposta: 429) As funções do Cloud Run não podem ser dimensionadas devido ao limite demax-instances
que definiu durante a configuração.severity=ERROR
( Código de resposta: 500) As funções do Cloud Run não conseguem gerir intrinsecamente a taxa de tráfego.
A solução
Para resolver este problema, resolva as causas indicadas anteriormente.
Para funções baseadas em acionadores HTTP, faça com que o cliente implemente o recuo exponencial e as novas tentativas para pedidos que não podem ser ignorados. Se estiver a acionar funções do Cloud Run a partir de fluxos de trabalho, pode usar a sintaxe
try/retry
para o fazer.Para funções de segundo plano ou acionadas por eventos, as funções do Cloud Run suportam a entrega, pelo menos, uma vez. Mesmo sem ativar explicitamente a repetição, o evento é reenviado automaticamente e a execução da função é repetida. Consulte o artigo Voltar a tentar funções orientadas por eventos para mais informações.
Quando a causa principal do problema é um período de erros transitórios intensificados atribuídos exclusivamente às funções do Cloud Run ou se precisar de assistência com o seu problema, contacte o apoio técnico.
Para problemas relacionados com inícios a frio, configure o número mínimo de instâncias para reduzir a quantidade de inícios a frio com uma implicação de faturação mais elevada.
Registo
A secção seguinte aborda problemas com o registo e como os corrigir.
As entradas dos registos não têm níveis de gravidade do registo ou têm níveis incorretos
As funções do Cloud Run incluem o registo em tempo de execução por predefinição. Os registos escritos em stdout
ou stderr
aparecem automaticamente no Cloud Logging.
No entanto, estas entradas de registo contêm apenas mensagens de texto por predefinição.
A mensagem de erro
Níveis de gravidade inexistentes ou incorretos nos registos.
A solução
Para incluir gravidades dos registos, tem de enviar uma entrada de registo estruturada.
Processar ou registar exceções de forma diferente em caso de falha
Pode querer personalizar a forma como gere e regista as informações de falhas do sistema.
A solução
Inclua a função num bloco try
para personalizar o processamento de exceções e
o registo de rastreios de pilha.
Exemplo
import logging
import traceback
def try_catch_log(wrapped_func):
def wrapper(*args, **kwargs):
try:
response = wrapped_func(*args, **kwargs)
except Exception:
# Replace new lines with spaces so as to prevent several entries which
# would trigger several errors.
error_message = traceback.format_exc().replace('\n', ' ')
logging.error(error_message)
return 'Error';
return response;
return wrapper;
#Example hello world function
@try_catch_log
def python_hello_world(request):
request_args = request.args
if request_args and 'name' in request_args:
1 + 's'
return 'Hello World!'
Registos demasiado grandes no Node.js 10+, Python 3.8, Go 1.13 e Java 11
O tamanho máximo de uma entrada de registo normal nestes tempos de execução é de 105 KiB.
A solução
Envie entradas de registo inferiores a este limite.
Faltam registos, apesar de as funções do Cloud Run devolverem erros
As funções do Cloud Run transmitem os registos das funções do Cloud Run para um contentor predefinido. Quando cria um projeto, o Cloud Run Functions cria e ativa o contentor predefinido. Se o contentor predefinido estiver desativado ou se os registos da função do Cloud Run estiverem no filtro de exclusão, os registos não aparecem no Explorador de registos.
A solução
Ativar registos predefinidos.
Os registos das funções do Cloud Run não aparecem no Explorador de registos
Algumas bibliotecas cliente do Cloud Logging usam um processo assíncrono para escrever entradas de registo. Se uma função falhar ou terminar de outra forma, é possível que algumas entradas de registo ainda não tenham sido escritas e possam aparecer mais tarde. Alguns registos podem ser perdidos e não podem ser vistos no Explorador de registos.
A solução
Use a interface da biblioteca cliente para limpar as entradas de registo em buffer antes de sair da função ou use a biblioteca para escrever entradas de registo de forma síncrona. Também pode escrever registos de forma síncrona diretamente no stdout
ou no stderr
.
Faltam registos de funções do Cloud Run quando usa o destino do Log Router
Os destinos do Log Router encaminham as entradas de registo para vários destinos.
Os filtros de exclusão definem entradas que pode rejeitar.
A solução
Remova o filtro definido de exclusão para resource.type = "cloud_run_revision"
.
Ligações da base de dados
Existem vários problemas que podem surgir ao estabelecer ligação a uma base de dados, muitos
associados à ultrapassagem dos limites de ligação ou ao tempo limite excedido. Se vir um aviso do Cloud SQL nos seus registos, por exemplo, Context deadline exceeded
, pode ter de ajustar a configuração da ligação. Para mais informações, consulte as práticas recomendadas do Cloud SQL.
Redes
Esta secção apresenta problemas de rede e fornece sugestões sobre como corrigir cada um deles.
Conetividade de rede
Se todos os pedidos de saída de uma função do Cloud Run falharem mesmo depois de configurar as definições de saída, pode executar Connectivity Tests para identificar problemas de conetividade de rede subjacentes. Para mais informações, consulte o artigo Crie e execute testes de conetividade.
O conetor do Acesso a VPC sem servidor não está pronto ou não existe
Se um conetor de acesso à VPC sem servidor falhar, pode não estar a usar uma máscara de sub-rede /28
dedicada ao conetor, conforme necessário.
A mensagem de erro
Problem connecting to VPC Connector projects/xxxxx/locations/REGION/connectors/xxxx: Serverless VPC Access is not found.
Quando as funções do Cloud Run são implementadas com um conector num estado incorreto devido à falta de autorização na conta de serviço do agente de serviço das APIs Google PROJECT_NUMBER@cloudservices.gserviceaccount.com
, é apresentado o seguinte erro:
A mensagem de erro
Failed to prepare VPC connector. Please try again later.
A solução
Liste as suas sub-redes
para verificar se o conector usa uma máscara de sub-rede /28
. Se o seu conetor não usar a máscara de sub-rede /28
, recrie ou crie um novo conetor.
Para resolver este problema, siga qualquer uma destas soluções:
Se recriar o conector, não tem de voltar a implementar outras funções. Pode ocorrer uma interrupção da rede enquanto o conector é recriado.
Se criar um novo conetor alternativo, volte a implementar as suas funções para usar o novo conetor e, em seguida, elimine o conetor original. Este método evita a interrupção da rede.
Certifique-se de que as funções do Cloud Run e o conector associado estão implementados na mesma região.
Para a configuração da VPC partilhada:
Certifique-se de que as contas de serviço
SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com
eservice-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com
usadas pelo conector de VPC para aprovisionar recursos no projeto não têm autorizações em falta. Estas contas de serviço devem ter a funçãoroles/compute.networkUser
no projeto anfitrião da configuração de VPC partilhada quando o conector está no projeto de serviço.Se o conector for criado no projeto anfitrião, certifique-se de que a função
Serverless VPC Access User
é concedida no agente do serviço do Cloud Run no projeto anfitrião.
Se o estado do conector apresentar um erro
Connector is in a bad state, manual deletion recommended
e o agente do serviço das APIs Google não tiver as autorizações necessárias para aprovisionar recursos de computação no projeto do conector, concedaroles/compute.admin
à conta de serviçoPROJECT_NUMBER@cloudservices.gserviceaccount.com
. Em alguns casos, pode ser necessário recriar o conector depois de adicionar estas autorizações.
O tráfego SMTP para endereços IP de destino externos através da porta TCP 25 é bloqueado
Para maior segurança, Google Cloud bloqueia as ligações à porta de destino TCP 25
quando envia emails a partir de funções.
A solução
Para desbloquear estas ligações, siga qualquer uma destas soluções:
Estabeleça ligação ao seu servidor SMTP numa porta diferente, como a porta TCP
587
ou465
.
Erro 404 para o URL functions.net
predefinido
A desativação do URL run.app
no Cloud Run também impede o acesso ao URL cloudfunctions.net
predefinido para as funções do Cloud Run (2.ª geração). Este erro
também pode ser causado por um erro de publicação devido à configuração que permite apenas tráfego interno.
A mensagem de erro
Código de resposta de erro HTTP: 404 NOT FOUND
A solução
Para reativar o URL cloudfunctions.net
predefinido para funções do Cloud Run (2.ª geração),
tem de reativar o URL run.app
no Cloud Run
substituindo o ficheiro service.yaml
por uma nova configuração em que
annotations:run.googleapis.com/default-url-disabled: false