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:

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 :

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:

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:

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:

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_NAME

  • Volte 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:

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 de max-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.

Captura de ecrã do Console Log Router com os detalhes do destino de visualização realçados

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 /28dedicada 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 e service-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ção roles/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, conceda roles/compute.admin à conta de serviço PROJECT_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:

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