Resolver problemas nas funções do Cloud Run
Este documento mostra como resolver mensagens de erro e problemas ao usar funções do Cloud Run.
Implantação
Nesta seção, listamos problemas de implantação que você pode encontrar e fornecemos sugestões de como corrigir cada um deles. Muitos dos problemas que podem ser encontrados durante a implantação estão relacionados a papéis e permissões ou configuração incorreta.
Você usa o Gerenciamento de identidade e acesso para autorizar identidades a realizar ações administrativas em funções criadas usando a API Cloud Functions v2, por exemplo, usando gcloud functions
, a API REST ou o Terraform. As ações administrativas incluem a criação, a atualização e a exclusão de funções. Para mais informações, consulte
Autorizar o acesso com o IAM.
Usuário sem permissões da conta de serviço no ambiente de execução ao implantar uma função
Cada função é associada a uma conta de serviço que serve como identidade quando a função acessa outros recursos. Essa conta de serviço de
ambiente de execução pode ser a
conta de serviço padrão ou uma conta de serviço gerenciada pelo usuário. Nos ambientes em que várias funções acessam recursos diferentes, é recomendável
usar
identidades por função,
com contas de serviço do ambiente de execução nomeadas,
em vez da padrão. (PROJECT_NUMBER-compute@developer.gserviceaccount.com
).
Para usar uma conta de serviço do ambiente de execução, o implantador precisa ter a
permissão iam.serviceAccounts.actAs
nessa conta de serviço. Um usuário que
cria uma conta de serviço no ambiente de execução não padrão recebe automaticamente essa
permissão, mas outros implantadores precisam que um usuário conceda essa permissão.
Atribua a permissão iam.serviceAccounts.actAs
na conta de serviço do ambiente de execução
ao usuário com o papel de leitor do projeto, desenvolvedor do Cloud Functions ou
administrador do Cloud Functions.
A mensagem de erro
Console
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 padrão
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 padrão:
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 usuário
a função de usuário da conta de serviço (roles/iam.serviceAccountUser
) na conta de serviço do ambiente de execução padrão ou não padrão. Esse papel inclui a permissão iam.serviceAccounts.actAs
.
A conta de serviço de implantação não tem permissões do Pub/Sub ao implantar uma função orientada a eventos.
O serviço 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
) ao executar
ações administrativas. Por padrão, essa conta recebe
o papel cloudfunctions.serviceAgent
do Cloud Functions. Para implantar
funções orientadas a eventos,
é necessário que o serviço das funções do Cloud Run
acesse o Pub/Sub
para configurar tópicos e assinaturas. Se você mudar o papel atribuído à conta de serviço sem conceder as permissões apropriadas, o serviço Cloud Functions não poderá acessar o Pub/Sub, e a implantação falhará.
A mensagem de erro
Console
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
É possível redefinir a conta de serviço para o papel padrão cloudfunctions.serviceAgent.
A conta de serviço padrão do ambiente de execução não existe
Quando você não especifica uma conta de serviço de ambiente de execução gerenciada pelo usuário, o Cloud Functions usa a conta de serviço de computação padrão como a conta de serviço de ambiente de execução. As implantações vão falhar se você excluir a conta padrão sem especificar uma conta de serviço gerenciada pelo usuário.
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 esse problema, siga uma destas soluções:
Especifique uma conta de serviço de ambiente de execução gerenciada pelo usuário antes de implantar a função.
Cancelar exclusão da conta de serviço pelo ID numérico da conta de serviço padrão.
A conta de serviço do agente de serviço do Cloud Functions não tem permissões de bucket de projeto ao implantar uma função
As funções do Cloud Run só podem ser
acionadas por eventos
dos buckets do Cloud Storage no mesmo projeto do Google Cloud. 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 um papel cloudfunctions.serviceAgent
no
projeto.
A mensagem de erro
Console
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 esse problema, redefina essa conta de serviço para o papel padrão.
O usuário com papel de "Editor do projeto" não pode tornar a função pública
O papel de editor do projeto tem permissões amplas para gerenciar recursos em
um projeto, mas não concede a capacidade de tornar
as funções do Cloud públicas. O usuário ou o serviço que implanta a função precisa da permissã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
Você pode:
Atribuir ao implantador o papel de Proprietário do projeto ou de Administrador do Cloud Functions.
conceder a permissão manualmente criando um papel personalizado.
Verifique se o compartilhamento restrito de domínio é aplicado no projeto.
A implantação da função falha ao usar a política da organização de restrição de locais de recursos
Se a organização usar uma política de restrição de local de recursos, ela vai restringir a implantação da função nas regiões restritas pela política. No console do Google Cloud, a região restrita não estará disponível no menu suspenso de regiões durante a implantaçã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
É possível adicionar ou remover locais das listas allowed_values
ou denied_values
de uma restrição de locais do recurso para uma implantação bem-sucedida.
A implantação da função falha ao executar o escopo global da função
Esse erro indica que houve um problema com o código. O pipeline de implantação terminou de implantar a função, mas falhou na última etapa: enviar uma verificação de integridade à função. Essa verificação de integridade visa executar o escopo global de uma função, que pode gerar exceções, falhas ou tempos limite. O escopo global é onde você normalmente carrega em bibliotecas e inicializa clientes.
A mensagem de erro
Nos registros 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 esse problema, siga uma destas soluções:
Para uma mensagem de erro mais detalhada, analise os registros da versão e os registros do ambiente de execução da função.
Se não estiver claro por que sua função não executou o escopo global, mova temporariamente o código para a invocação de solicitação usando a inicialização lenta das variáveis globais. Isso permite adicionar declarações de registro extras em torno das bibliotecas de cliente, o que pode esgotar a instanciação (principalmente se elas estiverem chamando outros serviços) ou falhar/falhar exceções.
Além disso, tente aumentar o tempo limite da função. Limites de tempo mais longos nas funções do Cloud Run oferecem mais espaço para inicialização e oferecem uma alocação de recursos mais escalonável em um ambiente do Cloud Run, potencialmente mitigam esse problema se ele for causado pelo esgotamento de recursos.
O código-fonte precisa conter uma função de ponto de entrada que foi especificada corretamente na implantação, seja pelo console ou pelo gcloud.
O usuário com o papel de leitor não pode implantar uma função
Os usuários com o papel de leitor do projeto ou leitor do Cloud Functions têm acesso somente leitura a funções e detalhes da função e não podem implantar novas funções. O recurso Criar função fica esmaecido no console do Google Cloud 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 usuário o papel de Desenvolvedor do Cloud Functions.
A conta de serviço do build não tem permissões
A mensagem de erro
No erro de implantação da função ou nos logs de build, talvez você encontre 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 build precisa ter permissão para ler o bucket de origem e permissões de leitura e gravação para o repositório de implantação de artefatos. Você pode encontrar esse erro devido a uma mudança no comportamento padrão de como o Cloud Build usa contas de serviço, detalhada em Alteração da conta de serviço do Cloud Build.
Para resolver esse problema, use uma destas soluções:
- Crie uma conta de serviço de build personalizada para implantações de função.
- Adicione o
papel da conta de serviço do Cloud Build
(
roles/cloudbuild.builds.builder
) à conta de serviço padrão do Compute. - Revise as orientações do Cloud Build sobre mudanças na conta de serviço padrão e desative essas mudanças.
Conta de serviço de build 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 do build precisa estar ativada para implantar uma função. Você pode encontrar esse erro devido a uma mudança no comportamento padrão de como o Cloud Build usa contas de serviço, detalhada em Alteração da conta de serviço do Cloud Build.
Para resolver esse problema, use uma destas soluções:
- Crie uma conta de serviço de build personalizada para implantações de função.
- Ative a conta de serviço padrão do Compute.
- Revise as orientações do Cloud Build sobre mudanças na conta de serviço padrão e desative essas mudanças.
Disponibilização
Nesta seção, listamos problemas de disponibilização que você pode encontrar e fornecemos sugestões de como corrigir cada um deles.
Erro de permissão de disponibilização devido à função que exige autenticação
As funções HTTP sem Permitir invocações não autenticadas ativaram o acesso restrito a usuários finais e contas de serviço que não têm as permissões apropriadas. Essa mensagem de erro indica que o autor da chamada não tem permissão para invocar a função.
A mensagem de erro
Código de resposta de erro HTTP: 403 Forbidden
Corpo da resposta de erro HTTP:
Error: Forbidden Your client does not have permission
to get URL /FUNCTION_NAME from this server.
A solução
Para resolver esse problema, siga uma destas soluções:
Atribua ao usuário o papel de Invocador do Cloud Run do Cloud IAM para a função específica.
Implantar a função para permitir invocações não autenticadas se for compatível com a sua organização. Isso é útil para testes.
Erro de exibição devido à configuração allow internal traffic only
As configurações de entrada restringem se uma função HTTP pode ser invocada por recursos
fora do projeto do Google Cloud ou pelo perímetro de serviço do VPC Service Controls.
Quando você configura a configuração Permitir somente tráfego interno para a rede de entrada, essa mensagem de erro indica que apenas as solicitações de redes VPC no mesmo projeto ou no perímetro do VPC Service Controls são permitidas. Isso também pode
ser um erro 404 para o URL functions.net
padrão.
A mensagem de erro
Código de resposta de erro HTTP: 404 NOT FOUND
A solução
Para resolver esse erro, siga uma destas soluções:
Verifique se a solicitação é proveniente do projeto do Google Cloud ou do perímetro de serviço do VPC Service Controls.
alterar as configurações de entrada para permitir todo o tráfego da função.
O código-fonte das funções do Cloud Run também pode resultar em um erro 404 devido a URL da função, métodos HTTP, erros lógicos etc. incorretos.
A invocação da função não tem credenciais de autenticação válidas
Para invocar uma função do Cloud Run que foi configurada com acesso restrito, requer um token de ID. Os tokens de acesso ou 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 HTTP:
Your client does not have permission to the requested URL 'FUNCTION_NAME'
A solução
Para resolver esse erro, siga uma destas soluções:
Verifique se suas solicitações incluem um cabeçalho
Authorization: Bearer ID_TOKEN
e se o token é um token de ID, não um token de acesso ou de atualização. Se você gerar esse token manualmente com a chave privada de uma conta de serviço, troque o token JWT autoassinado por um token de identidade assinado pelo Google. Para mais informações, consulte Autenticar para invocação.Invoque sua função HTTP usando credenciais de autenticação no cabeçalho da solicitação. Por exemplo, é possível receber um token de identidade usando o
gcloud
da seguinte maneira: Para saber mais, consulte Como autenticar para invocação .curl -H "Authorization: Bearer $(gcloud auth print-identity-token)"
https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAMEImplantar a função para permitir invocações não autenticadas se for compatível com a sua organização. Isso é útil para testes.
A função é interrompida no meio da execução ou continua a ser executada após a conclusão do código
Alguns ambientes de execução do Cloud Run functions permitem que os usuários executem tarefas assíncronas. Se a função criar essas tarefas, também precisará esperar explicitamente que elas sejam concluídas. Caso contrário, sua função pode parar de ser executada na hora errada.
O comportamento do erro
Sua função exibe um dos seguintes comportamentos:
- A função termina enquanto tarefas assíncronas ainda estão em execução, mas antes do tempo limite especificado ter decorrido.
- A função não para de ser executada quando essas tarefas terminam e continua a ser executada até que o tempo limite tenha decorrido.
A solução
Se a função for encerrada com antecedência, verifique se todas as tarefas assíncronas dela foram concluídas antes de:
- retornar um valor;
- resolver ou rejeitar um objeto
Promise
retornado (somente funções do Node.js); - Gerar exceções ou erros não detectados
- enviar uma resposta HTTP;
- chamar uma função de callback.
Se a função não for encerrada após a conclusão de tarefas assíncronas, verifique se ela está sinalizando corretamente as funções do Cloud Run após a conclusão. Verifique se você executou uma das operações listadas acima assim que a função tiver concluído as tarefas assíncronas.
Erro de execução ao acessar recursos protegidos pelo VPC Service Controls
Por padrão, o Cloud Run functions usa endereços IP públicos para fazer solicitações de saída a outros serviços. Se as funções não estiverem dentro de um perímetro do VPC Service Controls, isso poderá fazer com que elas recebam respostas HTTP 403 ao tentar acessar serviços do Google Cloud protegidos pelo VPC-SC devido às negações do perímetro de serviço.
A mensagem de erro
Nos registros de Recursos auditados, uma entrada como a 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 esse erro, siga uma destas soluções:
A função precisa rotear todo o tráfego de saída pela rede VPC. Consulte a seção Implantar funções que sigam o VPC Service Controls para mais informações.
Como alternativa, conceda à conta de serviço do ambiente de execução a função para o perímetro. Para isso, você pode criar um nível de acesso e adicionar o nível de acesso ao perímetro de serviço ou criar uma política de entrada no perímetro. Consulte Como usar o VPC Service Controls com funções fora de um perímetro para mais informações.
Escalonabilidade
Esta seção lista problemas de escalonabilidade e fornece sugestões de como corrigir cada um deles.
Erros do Cloud Logging relacionados a cancelamentos de solicitações de filas pendentes
As falhas de escalonamento podem ocorrer nos seguintes cenários:
- Um grande aumento repentino no tráfego
- Longo tempo de inicialização a frio.
- Tempo de processamento de solicitação longo.
- Alta taxa de erros da função.
- Atingir o limite máximo de instâncias e impedir que o sistema seja escalonado.
- Fatores temporários atribuídos ao serviço do Cloud Run functions.
Em cada caso, o Cloud Run functions pode não escalonar rapidamente o suficiente para gerenciar o tráfego.
A mensagem de erro
The request was aborted because there was no available instance
severity=WARNING
(Código de resposta: 429) Funções do Cloud Run não podem ser escalonadas devido ao limitemax-instances
que você definiu durante a configuração.severity=ERROR
( Código de resposta: 500) As funções do Cloud Run não podem gerenciar a taxa de tráfego intrinsecamente.
A solução
Para resolver esse problema, resolva as causas listadas anteriormente.
Para funções baseadas em gatilho HTTP, faça com que o cliente implemente a espera exponencial e tente novamente para solicitações que não podem ser descartadas. Se você estiver acionando o Cloud Run functions do Workflows, use a sintaxe
try/retry
para fazer isso.Para funções em segundo plano ou orientadas a eventos, o Cloud Run oferece suporte à entrega pelo menos uma vez. Mesmo sem ativar explicitamente a nova tentativa, o evento é reenviado automaticamente, e a execução da função será repetida. Consulte Como repetir funções orientadas por eventos para mais informações.
Quando a causa raiz do problema for um período de erros transitórios elevados atribuídos exclusivamente às funções do Cloud Run ou se você precisar de ajuda para resolver o problema, entre em contato com o suporte.
Para problemas relacionados a inicializações a frio, configure instâncias mínimas para reduzir a quantidade de inicializações a frio com uma implicação de faturamento maior.
Geração de registros
A seção a seguir aborda problemas com o registro e como corrigi-los.
As entradas de registro têm níveis de gravidade incorretos ou não os têm
O Cloud Run functions inclui por padrão a geração de registros do ambiente de execução. Os registros gravados em
stdout
ou stderr
aparecem automaticamente no
Cloud Logging.
Mas essas entradas de registro, por padrão, contêm apenas mensagens de stringles.
A mensagem de erro
Níveis de gravidade incorretos ou inexistentes.
A solução
Para incluir a gravidade do registro, é preciso enviar uma entrada de registro estruturada.
Processar ou registrar exceções de forma diferente em caso de falha
Convém personalizar a forma como você gerencia e registra as informações de falhas.
A solução
Encapsule a função como try
para personalizar exceções de processamento e
registrar stack traces.
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!'
Registros muito grandes no Node.js 10 e versões superiores, Python 3.8, Go 1.13 e Java 11
O tamanho máximo de uma entrada de registro regular nesses ambientes de execução é de 105 KiB.
A solução
Envie entradas de registro menores que esse limite.
Registros ausentes, apesar de as funções do Cloud Run retornarem erros
As funções do Cloud Run transmitem os registros de funções do Cloud Run para um bucket padrão. Quando você cria um projeto, as funções do Cloud Run criam e ativam o bucket padrão. Se o bucket padrão estiver desativado ou se os registros da função do Cloud Run estiverem no filtro de exclusão, eles não vão aparecer na Análise de registros.
A solução
Ative os registros padrão.
Os registros de funções do Cloud Run não aparecem na análise de registros
Algumas bibliotecas de cliente do Cloud Logging usam um processo assíncrono para gravar entradas de registro. Se uma função falhar ou for encerrada de outra forma, é possível que algumas entradas de registro ainda não tenham sido gravadas e apareçam posteriormente. Alguns registros podem ser perdidos e não aparecer na análise de registros.
A solução
Use a interface da biblioteca de cliente para transferir as entradas de registro em buffer antes de sair
da função ou use a biblioteca para gravar entradas de registro de forma síncrona. Também é possível
gravar registros de maneira síncrona diretamente em stdout
ou stderr
.
Registros de funções do Cloud Run ausentes ao usar o coletor do roteador de registros
O Log Router encaminha rotas de entradas de registro para vários destinos.
Os filtros de exclusão definem as entradas que podem ser descartadas.
A solução
Remova o filtro de exclusão definido para resource.type = "cloud_run_revision"
.
Conexões de banco de dados
Há diversos problemas que podem surgir ao se conectar a um banco de dados. Muitos
estão associados ao exceder limites de conexão ou tempo limite. Se aparecer um aviso do Cloud SQL
nos seus registros, como Context deadline exceeded
, talvez seja necessário ajustar a configuração de conexão. Para mais informações, consulte
Práticas recomendadas do Cloud SQL.
Rede
Esta seção lista problemas de rede e fornece sugestões de como corrigir cada um deles.
Conectividade de rede
Se todas as solicitações de saída de uma função do Cloud Run falharem após a configuração das configurações de saída, você poderá executar testes de conectividade para identificar qualquer problema de conectividade de rede. Para mais informações, consulte Criar e executar testes de conectividade.
O conector de acesso VPC sem servidor não está pronto ou não existe
Se um conector de acesso VPC sem servidor falhar, talvez ele não esteja
usando uma máscara de sub-rede /28
dedicada ao conector 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 implantadas com um conector em um estado inválido devido à falta de permissão na conta de serviço do agente de serviço das APIs do Google PROJECT_NUMBER@cloudservices.gserviceaccount.com
, o resultado é o seguinte erro:
A mensagem de erro
Failed to prepare VPC connector. Please try again later.
A solução
Liste suas sub-redes para verificar se o conector usa uma máscara de sub-rede /28
. Se o conector não usar a máscara de sub-rede /28
, recrie ou crie um novo conector.
Para resolver esse problema, siga uma destas soluções:
Se você recriar o conector, não precisará reimplantar outras funções. Pode haver uma interrupção de rede à medida que o conector é recriado.
Se você criar um novo conector alternativo, reimplante suas funções para usar o novo conector e exclua o conector original. Esse método evita a interrupção da rede.
Verifique se as funções do Cloud Run e o conector associado estão implantados na mesma região.
Para a configuração da VPC compartilhada:
Verifique se as contas de serviço
SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com
eservice-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com
usadas pelo conector VPC para provisionar recursos no projeto não têm permissões. Essas contas de serviço precisam ter o papelroles/compute.networkUser
no projeto host da configuração da VPC compartilhada quando o conector está no projeto de serviço.Se o conector for criado no projeto host, verifique se o papel
Serverless VPC Access User
foi concedido ao Agente de serviço do Cloud Run no projeto host.
Se o status do conector mostrar um erro
Connector is in a bad state, manual deletion recommended
e o agente de serviço de APIs do Google não tiver as permissões necessárias para provisionar 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 essas permissões.
O tráfego SMTP para endereços IP de destino externos usando a porta TCP 25 está bloqueado
Para maior segurança, o Google Cloud bloqueia conexões com a porta de destino 25
ao enviar e-mails de funções.
A solução
Para desbloquear essas conexões, siga uma destas soluções:
Conecte-se ao servidor SMTP em uma porta diferente, como a porta TCP
587
ou465
.
Erro 404 no URL padrão do functions.net
A desativação do URL run.app
no Cloud Run também impede o acesso ao URL cloudfunctions.net
padrão para funções do Cloud Run (2ª geração). Esse erro
também pode ser causado por um erro de exibição devido à configuração "Permitir somente 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
padrão das funções do Cloud Run (2ª geração),
é necessário ativar o URL run.app
no Cloud Run
substituindo o arquivo service.yaml
por uma nova configuração em que
annotations:run.googleapis.com/default-url-disabled: false