Definir tempo limite da tarefa (jobs)

Por padrão, cada tarefa é executada por no máximo 10 minutos: é possível alterar esse tempo para um tempo mais curto ou um tempo mais longo de até 168 horas (7 dias). O suporte a tempos limite maiores que 24 horas está disponível na Prévia.

Defina o tempo limite da tarefa conforme descrito nesta página. Não há tempo limite explícito na execução de um job: a execução do job é concluída quando todas as tarefas forem concluídas.

As unidades especificam uma duração. Você pode especificar a duração do tempo limite como um valor inteiro em segundos, minutos ou horas. Por exemplo, para definir o tempo limite como 10 minutos e 5 segundos, especifique o valor como 605 segundos.

Se o job tiver novas tentativas ativadas, a configuração de tempo limite se aplicará a cada tentativa de uma tarefa. Se a tentativa da tarefa não for concluída nesse período, ela será interrompida. Quanto mais tempo um job é executado, maior é a probabilidade de encontrar problemas que causem falhas, como falhas de dependência downstream, erros de falta de memória ou problemas de infraestrutura. Recomendamos ativar as novas tentativas para todos os jobs, mas principalmente para aqueles com tarefas de longa duração.

Como observar e manipular eventos de manutenção

Os jobs podem passar por eventos de manutenção periodicamente. Durante um evento de manutenção, todas as tarefas em andamento são migradas da máquina atual para uma máquina diferente. Esse processo de migração preserva todo o estado da tarefa. No entanto, há uma breve pausa no processamento durante a migração da tarefa.

Os eventos de manutenção são transparentes. não vai ser preciso fazer mudanças no contêiner para lidar com eventos de manutenção. Sempre que uma tarefa é iniciada e termina a migração, o Cloud Run imprime uma mensagem de registro.

No entanto, se você quiser monitorar ou manipular eventos de manutenção de maneira específica, poderá capturar o sinal SIGTSTP, que é enviado 10 segundos antes de uma tarefa ser migrada. Após a migração, a tarefa recebe um sinal SIGCONT imediatamente após a reinicialização.

A amostra em Go a seguir é uma função que captura esses sinais e imprime uma entrada de registro:

func testSignals() {
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGTSTP, syscall.SIGCONT)
    go func() {
        for  {
            sig := <-sigs
            log.Printf("Got Signal: %v", sig)
        }
    }()
 }
 

Funções exigidas

Para receber as permissões necessárias para configurar os jobs do Cloud Run, peça ao administrador para conceder a você os seguintes papéis do IAM:

Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o job do Cloud Run interagir com APIs do Google Cloud, como bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.

Definir tempo limite da tarefa

Para especificar o tempo limite da tarefa para um job do Cloud Run:

Console

  1. No console do Google Cloud, acesse a página de jobs do Cloud Run:

    Acessar o Cloud Run

  2. Clique em Implantar contêiner e selecione Job para preencher a página inicial de configurações do job. Se você estiver configurando um job, clique nele e em Editar.

  3. Clique em Contêiner, variáveis e secrets, conexões e segurança para expandir a página de propriedades do job.

  4. Clique na guia Geral.

    imagem

    • No campo Tempo limite da tarefa, especifique a duração máxima das tarefas do job em job atual e selecione uma Unidade de tempo. Só é possível especificar a duração do tempo limite como um valor inteiro em segundo, minuto ou hora. Por exemplo, para definir um duração de 10 minutos e 5 segundos, no campo Tempo limite da tarefa, especifique 605 e selecione a Unidade de tempo como segundo.
  5. Clique em Criar ou Atualizar.

gcloud

  1. Para um job que você está criando:

    gcloud run jobs create JOB_NAME --image IMAGE_URL --task-timeout TIMEOUT

    Substituir

    • JOB_NAME pelo nome do job;
    • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest;
    • TIMEOUT com a duração máxima das tarefas do job, especificando a quantidade de tempo e as unidades. Por exemplo, 10m5s é de 10 minutos e 5 segundos.
  2. Para um job que você está atualizando, faça o seguinte:

    gcloud run jobs update JOB_NAME --task-timeout TIMEOUT

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. Atualize o atributo timeoutSeconds::

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
              timeoutSeconds: TIMEOUT

    Substitua:

    • JOB_NAME pelo nome do job.
    • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
    • TIMEOUT pela duração máxima das tarefas do job; especificando a quantidade de tempo e as unidades. Só é possível especificar o horário como um valor inteiro em segundos, minutos ou horas. Por exemplo, para definir com duração de 10 minutos e 5 segundos, especifique 605s.

    Também é possível definir outros detalhes de configurações, como variáveis de ambiente ou limites de memória.

  3. Atualize a configuração do job que já existe:

    gcloud run jobs replace job.yaml

Terraform

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

Para especificar o tempo limite da tarefa para um job do Cloud Run, use o recurso google_cloud_run_v2_job e aplique o seguinte snippet ao seu arquivo main.tf:

resource "google_cloud_run_v2_job" "default" {
  name     = "cloud-run-job-timeout"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    template {
      timeout = "3.500s"

      containers {
        image = "us-docker.pkg.dev/cloudrun/container/job:latest"
      }
    }
  }
}

Ver configurações de tempo limite da tarefa

Para ver as configurações atuais de tempo limite da tarefa do job do Cloud Run:

Console

  1. No console do Google Cloud, acesse a página de jobs do Cloud Run:

    Acessar jobs do Cloud Run

  2. Clique no job em que você tem interesse para abrir a página Detalhes do job.

  3. Clique na guia Configuração.

  4. Localize a definição do tempo limite da tarefa nos detalhes de configuração.

gcloud

  1. Use o comando a seguir:

    gcloud run jobs describe JOB_NAME
  2. Localize a configuração de tempo limite da tarefa na configuração retornada.

# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

source "https://rubygems.org"

gem "functions_framework", "~> 1.4"