Resolver problemas do Cloud Run

Esta página mostra como resolver problemas com o Cloud Run.

Erros na implantação

Nesta seção, listamos problemas de implantação que você pode encontrar e fornecemos sugestões de como corrigir cada um deles.

Falha ao iniciar o contêiner

O seguinte erro ocorre quando você tenta implantar:

Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable.

Para resolver esse problema, elimine as seguintes causas possíveis:

  1. Verifique se é possível executar a imagem do contêiner localmente. Se não for possível executar a imagem do contêiner localmente, será preciso diagnosticar e corrigir o problema localmente primeiro.

  2. Verifique se o contêiner está detectando solicitações na porta esperada, conforme documentado no contrato de ambiente de execução do contêiner. O contêiner precisa detectar solicitações de entrada na porta definida pelo Cloud Run e fornecidas na variável de ambiente PORT.

  3. Verifique se o contêiner está detectando as solicitações em todas as interfaces de rede, normalmente indicadas como 0.0.0.0.

  4. Verifique se a imagem do contêiner é compilada para o Linux de 64 bits, conforme solicitado no contrato de ambiente de execução do contêiner.

  5. Use o Cloud Logging para procurar erros de aplicativo nos registros stdout ou stderr. Também é possível procurar por falhas capturadas no Error Reporting.

    Talvez seja necessário atualizar o código ou as configurações de revisão para corrigir erros ou falhas. Também é possível resolver problemas do serviço localmente.

Erro interno: o prazo de prontidão do recurso foi excedido

O seguinte erro ocorre quando você tenta implantar ou chamar outra API do Google Cloud:

The server has encountered an internal error. Please try again later. Resource readiness deadline exceeded.

Esse problema pode ocorrer quando o agente de serviço do Cloud Run não existe ou não tem o papel de agente de serviço do Cloud Run (roles/run.serviceAgent).

Para verificar se o agente de serviço do Cloud Run existe no projeto do Cloud e se tem o papel necessário, execute estas etapas:

  1. Abra o Console do Cloud:

    Acessar a página "Permissões"

  2. No canto superior direito da página Permissões, marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.

  3. Na lista Principais, localize o ID do agente de serviço do Cloud Run, que usa o ID
    service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

  4. Verifique se o agente de serviço tem o papel Agente de serviço do Cloud Run. Se não tiver, conceda-o.

A conta de serviço padrão do Compute Engine foi excluída

O seguinte erro ocorre quando você tenta implantar:

ERROR: (gcloud.run.deploy) User EMAIL_ADDRESS does not have permission to access namespace NAMESPACE_NAME (or it may not exist): Permission 'iam.serviceaccounts.actAs' denied on service account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).

Esse problema ocorre em um destes casos:

Para resolver o problema:

  1. Especifique uma conta de serviço usando a sinalização --service-account gcloud.
  2. Verifique se a conta de serviço especificada tem as permissões necessárias para implantação.

Se você quiser verificar se o agente de serviço padrão do Compute Engine existe no projeto do Cloud, execute estas etapas:

  1. Abra o Console do Cloud:

    Acessar a página "Permissões"

  2. No canto superior direito da página Permissões, marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.

  3. Na lista Principais, localize o ID do agente de serviço do Compute Engine, que usa o ID
    PROJECT_NUMBER-compute@developer.gserviceaccount.com.

O agente de serviço do Cloud Run não tem permissão para ler a imagem

O seguinte erro ocorre quando você tenta implantar a partir de PROJECT-ID usando uma imagem armazenada no Container Registry em PROJECT-ID-2:

Google Cloud Run Service Agent must have permission to read the image, gcr.io/PROJECT-ID/IMAGE-NAME. Ensure that the provided container image URL is correct and that above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that PROJECT-ID/IMAGE-NAME is not in project PROJECT-ID-2. Permission must be granted to the Google Cloud Run Service Agent from this project.

Para resolver esse problema, siga as instruções para implantar imagens de contêiner de outros projetos do Google Cloud para que os seus principais tenham as permissões necessárias.

Erros de veiculação

Nesta seção, listamos problemas de veiculação que você pode encontrar e fornecemos sugestões de como corrigir cada um deles.

HTTP 403: o cliente não está autorizado a invocar ou chamar o serviço

Um destes erros ocorre durante a veiculação:

403 Forbidden
Your client does not have permission to get URL from this server.
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header
The request was not authorized to invoke this service

Para resolver o problema:

  • Se você quiser que o serviço possa ser chamado por qualquer pessoa, atualize as configurações do IAM para tornar o serviço público.
  • Se quiser que o serviço possa ser invocado apenas por determinadas identidades, invoque-o com o token de autorização apropriado.
    • Se invocado por um desenvolvedor ou usuário final: verifique se o desenvolvedor ou usuário tem a permissão run.routes.invoke, que é possível fornecer com o papel de administrador do Cloud Run (roles/run.admin) e de invocador do Cloud Run (roles/run.invoker).
    • Se invocado por uma conta de serviço: verifique se a conta é membro do serviço do Cloud Run e se tem o invocador do Cloud Run (roles/run.invoker). Além disso, a reivindicação de público-alvo (aud) do token de ID assinado pelo Google precisa estar definida como o URL do serviço de recebimento.
  • Se o projeto estiver em um perímetro do VPC-SC, verifique se as políticas do VPC-SC estão negando o tráfego run.googleapis.com/HttpIngress proveniente do IP ou da identidade do autor da chamada. Faça isto para verificar se esse é o caso:

    1. Abra o Explorador de registros no Console do Cloud (não a página Registros do Cloud Run):

      Acessar o Explorador de registros

    2. Digite o seguinte texto no campo de consulta:

      resource.type="audited_resource"
      log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy"
      resource.labels.method="run.googleapis.com/HttpIngress"
      
    3. Se você vir alguma entrada de registro depois de usar esta consulta, examine e determine se é necessário atualizar as políticas do VPC-SC.

HTTP 404: não encontrado

Este problema ocorre durante a veiculação:

Ocorreu um erro HTTP 404.

Para resolver o problema:

  1. Verifique se o app não retorna o erro 404 ao executá-lo localmente.
  2. Confirme se o URL solicitado está correto. Para isso, verifique a página de detalhes do serviço no Console do Cloud ou execute o seguinte comando:

    gcloud run services describe SERVICE_NAME | grep URL
    
  3. Inspecione onde a lógica do seu app pode retornar explicitamente erros 404.

HTTP 429: o serviço atingiu o número máximo de instâncias de contêiner

Este erro ocorre durante a veiculação:

HTTP 429
The request was aborted because there was no available instance.
The Cloud Run service probably has reached its maximum container instance limit. Consider increasing this limit. This error can also be caused by a sudden increase in traffic, a long container startup time or a long request processing time.

Para resolver esse problema, aumente as configurações de"instância máxima". Se você precisar de mais de 1000 instâncias, solicite um aumento de cota.

HTTP 500: o Cloud Run não pôde gerenciar a taxa de tráfego

Este erro ocorre durante a veiculação:

HTTP 500
The request was aborted because there was no available instance

Esse erro pode ser causado por um dos motivos a seguir:

Para resolver esse problema, resolva os problemas citados anteriormente.

Além disso, é possível implementar espera exponencial e novas tentativas para solicitações que o cliente não pode descartar.

Quando a causa raiz do problema for um período de erros temporários maiores atribuíveis exclusivamente ao Cloud Run, entre em contato com o Suporte.

HTTP 500: instâncias de contêiner excedem os limites de memória

Este erro ocorre durante a veiculação:

No Cloud Logging:

While handling this request, the container instance was found to be using too much memory and was terminated. This is likely to cause a new container instance to be used for the next request to this revision. If you see this message frequently, you may have a memory leak in your code or may need more memory. Consider creating a new revision with more memory.

Para resolver o problema:

  1. Determine se as instâncias de contêiner estão excedendo a memória disponível. Procure erros relacionados nos registros varlog/system.
  2. Se as instâncias estiverem excedendo a memória disponível, considere aumentar o limite de memória.

No Cloud Run, os arquivos gravados no sistema de arquivos local são contabilizados na memória disponível. Isso também inclui todos os arquivos de registro gravados em locais diferentes de /var/log/* e /dev/log.

HTTP 503: as solicitações de longa execução estão expirando

Um destes erros ocorre durante a veiculação:

HTTP 503
The request failed because either the HTTP response was malformed or connection to the instance had an error.
[CRITICAL] WORKER TIMEOUT

Para resolver o problema:

  • Se o serviço estiver processando solicitações longas, é possível aumentar o tempo limite da solicitação. Se o serviço não retornar uma resposta dentro do tempo especificado, a solicitação será finalizada, e o serviço retornará um erro HTTP 504.

  • Se as solicitações forem encerradas anteriormente com o código de erro 503, talvez seja necessário atualizar a configuração do tempo limite da solicitação para o framework de linguagem:

HTTP 503: não foi possível processar algumas solicitações devido à alta configuração de simultaneidade

Estes erros ocorrem durante a veiculação:

HTTP 503
The Cloud Run service probably has reached its maximum container instance limit. Consider increasing this limit.

Esse problema ocorre quando as instâncias de contêiner estão usando muita CPU para processar solicitações e, como resultado, as instâncias de contêiner não podem processar todas as solicitações. Por isso, algumas solicitações retornam um código de erro 503.

Para resolver esse problema, tente uma ou mais destas opções:

Conexão redefinida pelo par

Estes erros ocorrem durante a veiculação:

Connection reset by peer

Esse erro ocorre quando um aplicativo tem uma conexão TCP estabelecida com um peering na rede e ele fecha a conexão inesperadamente.

Para resolver o problema:

  • Se você estiver tentando executar o trabalho em segundo plano com a limitação de CPU, tente usar a configuração de alocação de CPU "A CPU está sempre alocada".

  • Verifique se você está dentro dos tempos limite das solicitações de saída. Se o aplicativo mantiver qualquer conexão em um estado inativo além desses limites, o gateway precisará conseguir a conexão.

  • Por padrão, a opção de soquete TCP keepalive está desativada para o Cloud Run. Não há uma forma direta de configurar a opção keepalive no Cloud Run no nível do serviço, mas é possível ativar a opção keepalive em cada conexão de soquete. Para isso, forneça as opções corretas ao abrir uma nova conexão de soquete TCP, dependendo da biblioteca de cliente que você está usando para essa conexão no aplicativo;

Assinatura do token de identidade editada pelo Google

Estes erros ocorrem durante a veiculação:

SIGNATURE_REMOVED_BY_GOOGLE

Isso pode ocorrer durante o desenvolvimento e teste nestas circunstâncias:

  1. Um usuário faz login usando a ferramenta de linha de comando gcloud ou o Cloud Shell.
  2. O usuário gera um token de ID usando comandos gcloud.
  3. O usuário tenta usar o token de ID para invocar um serviço não público do Cloud Run.

Isso ocorre por design. O Google remove a assinatura do token devido a questões de segurança para evitar que serviços não públicos do Cloud Run reproduzam tokens de ID gerados dessa forma.

Para resolver esse problema, invoque o seu serviço privado com um novo token de ID. Veja como testar a autenticação no seu serviço para mais informações.

Problema causado por uma limitação no sandbox do contêiner

Os seguintes erros ocorrem durante a veiculação no sandbox do contêiner:

Container Sandbox: Unsupported syscall setsockopt(0x3,0x1,0x6,0xc0000753d0,0x4,0x0)

Se seu contêiner for executado localmente, mas falhar no Cloud Run, o sandbox do contêiner do Cloud Run poderá ser responsável pela falha dele.

Para resolver o problema:

  1. Abra o Explorador de registros no Console do Cloud (não a página Registros do Cloud Run):

    Acessar o Explorador de registros

  2. Digite o seguinte texto no campo de consulta:

    resource.type="cloud_run_revision"
    logName="projects/PROJECT_ID/logs/run.googleapis.com%2Fvarlog%2Fsystem"
    
  3. Se você encontrar um registro Container Sandbox com uma gravidade DEBUG e suspeitar que ele é responsável pela falha do contêiner, entre em contato com o suporte e forneça a mensagem de registro no tíquete de suporte.

    O suporte do Google Cloud pode pedir que você rastreie chamadas do sistema feitas pelo seu serviço para diagnosticar chamadas de nível inferior que não foram exibidas nos registros do Cloud Logging.

Como mapear domínios personalizados

O domínio personalizado está travado no estado de provisionamento de certificados

Um destes erros ocorre quando você tenta mapear um domínio personalizado:

The domain is available over HTTP.  Waiting for certificate provisioning. You must configure your DNS records for certificate issuance to begin and to accept HTTP traffic.
Waiting for certificate provisioning. You must configure your DNS records for certificate issuance to begin.

Para resolver o problema:

  • Aguarde pelo menos 24 horas. O provisionamento do certificado SSL geralmente leva cerca de 15 minutos, mas pode levar até 24 horas.
  • Verifique se você atualizou corretamente os registros DNS no registrador de domínios usando a ferramenta dig do Google Admin Toolbox.

    Os registros DNS no registrador de domínios precisam corresponder ao que o Console do Cloud solicita a adicionar.

  • Confirme se a raiz do domínio foi verificada na sua conta usando um destes métodos:

    • Siga as instruções para adicionar proprietários de domínio verificados e confira se a sua conta está listada como Proprietário verificado.
    • Acesse o seguinte URL:

      https://www.google.com/webmasters/verification/details?domain=ROOT_DOMAIN
      
  • Verifique se o certificado do domínio não expirou. Para encontrar os limites de expiração, use este comando:

    echo | openssl s_client -servername 'ROOT_DOMAIN' -connect 'ROOT_DOMAIN:443' 2>/dev/null | openssl x509 -startdate -enddate -noout
    

Admin API

O recurso não tem suporte na etapa do lançamento declarado

Este erro ocorre ao chamar a API Cloud Run Admin:

The feature is not supported in the declared launch stage

Esse erro ocorre quando você chama a API Cloud Run Admin diretamente e usa um recurso Beta sem especificar uma anotação da etapa do lançamento.

Para resolver esse problema, anote o recurso com um valor run.googleapis.com/launch-stage de BETA na solicitação quando usar algum recurso Beta.

O exemplo a seguir adiciona uma anotação da etapa do lançamento a uma solicitação de serviço:

kind: Service
metadata:
  annotations:
    run.googleapis.com/launch-stage: BETA