태스크 제한 시간 설정(작업)

기본적으로 각 태스크는 최대 10분 동안 실행됩니다. 이 시간은 더 짧게 변경할 수도 있고 최대 168시간 (7일)까지 더 긴 시간으로 변경할 수도 있습니다. 24시간을 초과하는 제한 시간 지원은 미리보기에서 사용할 수 있습니다.

이 페이지에 설명된 대로 태스크 제한 시간을 설정합니다. 작업 실행에는 명시적인 제한 시간이 없습니다. 모든 태스크가 완료되면 작업 실행이 완료된 것입니다.

단위로 기간을 지정합니다. 초, 분, 시간을 나타내는 정수 값으로 제한 시간 기간을 지정할 수 있습니다. 예를 들어 제한 시간 기간을 10분 5초로 설정하려면 값을 605초로 지정합니다.

작업에 재시도가 사용 설정된 경우 제한 시간 설정이 태스크의 각 시도에 적용됩니다. 이 시간 내에 태스크 시도가 완료되지 않으면 중지됩니다. 작업이 실행되는 시간이 길어질수록 다운스트림 종속 항목 실패, 메모리 부족 오류, 인프라 문제와 같이 작업 실패를 야기하는 문제가 발생할 가능성이 높습니다. 모든 작업에 재시도를 사용 설정하는 것이 좋으며, 특히 장기 실행 태스크가 있는 작업의 경우 더욱 그렇습니다.

유지보수 이벤트 관찰 및 처리

작업에서 주기적으로 유지보수 이벤트가 발생할 수 있습니다. 유지보수 이벤트 중에는 진행 중인 태스크가 현재 머신에서 다른 머신으로 마이그레이션됩니다. 이 마이그레이션 프로세스는 태스크의 전체 상태를 보존합니다. 하지만 태스크가 마이그레이션되는 동안 처리가 잠시 중단됩니다.

유지보수는 이벤트가 투명하므로 유지보수 이벤트를 처리하기 위해 컨테이너를 변경할 필요가 없습니다. 태스크가 시작되고 마이그레이션을 완료할 때마다 Cloud Run이 로그 메시지를 출력합니다.

그러나 특정 방식으로 유지보수 이벤트를 모니터링하거나 처리하려면 태스크가 마이그레이션되기 10초 전에 전송되는 SIGTSTP 신호를 포착할 수 있습니다. 마이그레이션 후에는 태스크가 다시 시작되고 나서 즉시 SIGCONT 신호가 태스크에 수신됩니다.

다음 Go 샘플은 이러한 신호를 포착하고 로그 항목을 출력하는 함수입니다.

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)
        }
    }()
 }
 

필요한 역할

Cloud Run 작업을 구성하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

Cloud Run과 연결된 IAM 역할 및 권한 목록은 Cloud Run IAM 역할Cloud Run IAM 권한을 참조하세요. Cloud Run 작업이 Cloud 클라이언트 라이브러리와 같은 Google Cloud API와 상호작용하는 경우에는 서비스 ID 구성 가이드를 참조하세요. 역할 부여에 대한 자세한 내용은 배포 권한액세스 관리를 참조하세요.

태스크 제한 시간 설정

Cloud Run 작업의 태스크 제한 시간을 지정하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run 작업 페이지로 이동합니다.

    Cloud Run으로 이동

  2. 컨테이너 배포를 클릭하고 작업을 선택하여 초기 작업 설정 페이지를 작성합니다. 기존 작업을 구성하는 경우 작업을 선택한 후 수정을 클릭합니다.

  3. 컨테이너, 변수 및 보안 비밀, 연결, 보안을 클릭하여 작업 속성 페이지를 펼칩니다.

  4. 일반 탭을 클릭합니다.

    이미지

    • 태스크 제한 시간 필드에 현재 작업에 포함된 작업 태스크의 최대 기간을 지정하고 시간 단위를 선택합니다. 제한 시간 기간은 , , 시간의 정수 값으로만 지정할 수 있습니다. 예를 들어 기간을 10분 5초로 설정하려면 태스크 제한 시간 필드에서 605를 지정하고 시간 단위를 선택합니다.
  5. 만들기 또는 업데이트를 클릭합니다.

gcloud

  1. 만들고 있는 작업에 다음 명령어를 실행합니다.

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

    다음과 같이 바꿉니다.

    • JOB_NAME: 작업 이름
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/job:latest)로 바꿉니다.
    • TIMEOUT: 작업 태스크 최대 기간으로 바꾸고 시간과 단위를 지정. 예를 들어 10m5s는 10분 5초입니다.
  2. 업데이트하고 있는 작업에 다음 명령어를 실행합니다.

    gcloud run jobs update JOB_NAME --task-timeout TIMEOUT

YAML

  1. 새 작업을 만드는 경우에는 이 단계를 건너뜁니다. 기존 작업을 업데이트하는 경우 YAML 구성을 다운로드합니다.

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. timeoutSeconds: 속성을 업데이트합니다.

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

    다음과 같이 바꿉니다.

    • JOB_NAME을 작업 이름으로 바꿉니다.
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/job:latest)로 바꿉니다.
    • TIMEOUT을 작업 태스크의 최대 기간으로 바꾸고, 기간과 단위를 지정합니다. 초, 분, 시간의 정수 값으로만 시간을 지정할 수 있습니다. 예를 들어 기간을 10분 5초로 설정하려면 605s를 지정합니다.

    또한 환경 변수 또는 메모리 제한과 같은 추가 구성 세부정보도 지정할 수 있습니다.

  3. 기존 작업 구성을 업데이트합니다.

    gcloud run jobs replace job.yaml

Terraform

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

Cloud Run 작업의 태스크 제한 시간을 지정하려면 google_cloud_run_v2_job 리소스를 사용하고 다음 스니펫을 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"
      }
    }
  }
}

태스크 제한 시간 설정 보기

Cloud Run 작업의 현재 태스크 제한 시간 설정을 보려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run 작업 페이지로 이동합니다.

    Cloud Run 작업으로 이동

  2. 관심 있는 작업을 클릭하여 작업 세부정보 페이지를 엽니다.

  3. 구성 탭을 클릭합니다.

  4. 구성 세부정보에서 태스크 제한 시간 설정을 찾습니다.

gcloud

  1. 다음 명령어를 사용하세요.

    gcloud run jobs describe JOB_NAME
  2. 반환된 구성에서 태스크 제한 시간 설정을 찾습니다.

# 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"