Defina o limite de tempo de pedidos para serviços

Se um serviço for executado durante demasiado tempo, o sistema toma medidas para o terminar ou limitar.

Para os serviços do Cloud Run, a definição de tempo limite do pedido especifica o tempo durante o qual os serviços implementados no Cloud Run têm de devolver uma resposta. Se não for devolvida uma resposta dentro do tempo especificado, o pedido termina e é devolvido um erro 504. Tenha em atenção que a instância do contentor que serviu o pedido não é terminada. O contentor ou o código podem continuar a processar o pedido terminado e podem estar a processar outros pedidos. Para evitar esta situação, impeça os limites de tempo no seu serviço com as seguintes técnicas:

  • Defina um limite de tempo superior ao tempo de execução esperado.
  • Monitorize o tempo restante durante a execução. Em seguida, faça a limpeza e regresse antecipadamente.

Período limite

Por predefinição, o tempo limite é de 5 minutos (300 segundos) e pode ser prolongado até 60 minutos (3600 segundos).

Quando aciona o seu serviço a partir de eventos do Eventarc, subscrições push do Pub/Sub ou do Cloud Scheduler, aplica-se o limite de tempo destes serviços.

Pode alterar esta definição quando implementar uma imagem de contentor ou atualizando a configuração do serviço.

Além de alterar o limite de tempo do pedido do Cloud Run, também deve verificar a sua framework de linguagem para ver se tem a sua própria definição de limite de tempo do pedido que também tem de atualizar. Alguns clientes do serviço Cloud Run também podem impor um limite de tempo mais restritivo.

Funções necessárias

Para receber as autorizações de que precisa para configurar e implementar serviços do Cloud Run, peça ao seu administrador para lhe conceder as seguintes funções de IAM:

Se estiver a implementar um serviço ou uma função a partir do código fonte, também tem de ter funções adicionais concedidas no seu projeto e na conta de serviço do Cloud Build.

Para ver uma lista de funções e autorizações de IAM associadas ao Cloud Run, consulte os artigos Funções de IAM do Cloud Run e Autorizações de IAM do Cloud Run. Se o seu serviço do Cloud Run interage com Google Cloud APIs, como as bibliotecas cliente da Google Cloud, consulte o guia de configuração da identidade do serviço. Para mais informações sobre a atribuição de funções, consulte as autorizações de implementação e faça a gestão do acesso.

Definir e atualizar o limite de tempo do pedido

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

Pode definir o limite de tempo da solicitação através da Google Cloud consola, da linha de comandos gcloud ou de um ficheiro YAML quando cria um novo serviço ou implementa uma nova revisão.

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

  4. Clique no separador Contentor.

    imagem

    • No campo Tempo limite do pedido, introduza o valor do tempo limite que quer usar em segundos. Use valores entre 1 e 3600 segundos ou entre 1 e 60 minutos.
  5. Clique em Criar ou Implementar.

gcloud

Pode atualizar o limite de tempo do pedido para uma determinada revisão em qualquer altura através do seguinte comando:

gcloud run services update SERVICE --timeout=TIMEOUT

Substitua o seguinte:

  • SERVICE: o nome do seu serviço.
  • TIMEOUT: o tempo dentro do qual uma resposta tem de ser devolvida, usando um valor inteiro ou um valor de duração absoluta, por exemplo, 1m20s, que é 1 minuto e 20 segundos. Se usar um valor inteiro, a unidade é considerada segundos. O valor que especificar tem de ser inferior a 60 minutos.

Também pode definir o limite de tempo do pedido durante a implementação através do comando:

gcloud run deploy --image IMAGE_URL --timeout=TIMEOUT

Substitua o seguinte:

  • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • TIMEOUT: o tempo dentro do qual uma resposta tem de ser devolvida, usando um valor inteiro ou um valor de duração, por exemplo, 1m20s, que é 1 minuto e 20 segundos. Se usar um valor inteiro, a unidade é considerada segundos. O valor especificado tem de ser inferior a 60 minutos.

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize o atributo timeoutSeconds:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE
          timeoutSeconds: VALUE

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço do Cloud Run.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • VALUE: o limite de tempo escolhido, em segundos.
  3. Crie ou atualize o serviço com o seguinte comando:

    gcloud run services replace service.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-request-timeout"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    # Timeout
    timeout = "300s"
  }
}

Substitua 300s pelo tempo limite do pedido pretendido do seu serviço.

Veja as definições de limite de tempo do pedido

Para ver as definições de tempo limite de pedidos atuais do seu serviço do Cloud Run:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Clique no serviço que lhe interessa para abrir a página Detalhes do serviço.

  3. Clique no separador Revisões.

  4. No painel de detalhes à direita, a definição de limite de tempo do pedido é apresentada no separador Contentor.

gcloud

  1. Use o seguinte comando:

    gcloud run services describe SERVICE
  2. Localize a definição de tempo limite do pedido na configuração devolvida.