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:

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:

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:

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:

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:

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:

      curl  -H "Authorization: Bearer $(gcloud auth print-identity-token)" 
    https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME
    Para saber mais, consulte Como autenticar para invocação .

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

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

Captura de tela do roteador de registros do console com uma visualização que tem detalhes do coletor destacados

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 e service-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 papel roles/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, 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 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:

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