이 페이지에서는 전체 또는 일부 실패 후 자동으로 태스크를 재시도하는 방법을 설명합니다.
하나 이상의 태스크가 실패하면 일괄 작업이 실패하며, 이는 다양한 이유로 발생할 수 있습니다. 기본적으로 작업의 각 태스크는 한 번만 실행됩니다. 태스크가 실패하면 재시도되지 않습니다. 하지만 태스크가 실패하도록 하는 일부 문제는 태스크를 다시 시도하기만 해도 쉽게 해결할 수 있습니다. 이러한 경우 태스크를 자동으로 재시도하도록 작업을 구성하면 문제 해결 과정 및 작업의 전체 실행 시간을 크게 줄일 수 있습니다.
자동 재시도는 느슨하게 결합된(독립적인) 태스크에 적합하며 다양한 문제에 도움이 될 수 있습니다. 예를 들어 자동 태스크 재시도는 다음과 같이 시간에 민감한 문제를 해결할 수 있습니다.
- 스팟 VM 선점
- VM 유지보수 이벤트 및 호스트 오류
- 일시적인 네트워킹 오류
작업을 만들 때 각 태스크에 대해 자동 태스크 재시도를 구성할 수 있습니다. 특히 각 태스크에 대해 다음 구성 옵션 중 하나를 사용할 수 있습니다.
- 기본적으로 실패 시 각 태스크가 재시도되지 않습니다.
- 모든 실패에 대해 태스크 재시도: 실패한 태스크를 자동으로 재시도하도록 최대 시간을 구성할 수 있습니다. 0(기본값)과 10회 재시도 사이에 지정할 수 있습니다.
- 일부 실패 시 태스크 재시도: 특정 실패에 대해 자동으로 재시도 또는 재시도 없이 실패를 수행하는 여러 태스크 작업을 구성할 수 있습니다. 지정되지 않은 모든 실패에 대해 반대 조치가 수행됩니다. 애플리케이션 또는 Batch에서 정의된 종료 코드로 각 오류를 식별할 수 있습니다.
시작하기 전에
- Batch를 사용한 적이 없으면 Batch 시작하기를 검토하고 프로젝트 및 사용자 기본 요건을 완료하여 Batch를 사용 설정하세요.
-
작업을 만드는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
프로젝트에 대한 일괄 작업 편집자(
roles/batch.jobsEditor
) -
기본적으로 기본 Compute Engine 서비스 계정인 작업의 서비스 계정에 대한 서비스 계정 사용자(
roles/iam.serviceAccountUser
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
-
프로젝트에 대한 일괄 작업 편집자(
모든 실패에 대해 태스크 재시도
gcloud CLI 또는 Batch API를 사용하여 작업의 실패 태스크에 대한 최대 자동 재시도 횟수(maxRetryCount
필드)를 정의할 수 있습니다.
gcloud
작업의 구성 세부정보와
maxRetryCount
필드를 지정하는 JSON 파일을 만듭니다.예를 들어 실패한 태스크의 최대 재시도 횟수를 지정하는 기본 스크립트 작업을 만들려면 다음 콘텐츠가 포함된 JSON 파일을 만듭니다.
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ], "maxRetryCount": MAX_RETRY_COUNT }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
MAX_RETRY_COUNT
를 각 태스크의 최대 재시도 횟수로 바꿉니다. 작업이 실패한 태스크를 다시 시도할 수 있으려면 이 값을1
에서10
사이의 정수로 설정해야 합니다.maxRetryCount
필드를 지정하지 않으면 기본값은0
이며 태스크를 재시도하지 않습니다.작업을 만들고 실행하려면
gcloud batch jobs submit
명령어를 사용합니다.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
다음을 바꿉니다.
JOB_NAME
: 작업의 이름입니다.LOCATION
: 작업의 위치JSON_CONFIGURATION_FILE
: 작업의 구성 세부정보가 포함된 JSON 파일의 경로
API
maxRetryCount
필드를 지정하는 jobs.create
메서드에 대해 POST
요청을 실행합니다.
예를 들어 실패한 태스크의 최대 재시도 횟수를 지정하는 기본 스크립트 작업을 만들려면 다음 요청을 수행합니다.
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
],
"maxRetryCount": MAX_RETRY_COUNT
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
다음을 바꿉니다.
일부 실패 시 태스크 재시도
수명 주기 정책(lifecyclePolicies[]
필드)을 사용하여 작업이 여러 태스크 실패를 처리하는 방법을 정의할 수 있습니다.
수명 주기 정책은 작업 (action
필드), 작업 조건(actionCondition
필드), 종료 코드(exitCodes[]
필드)로 구성됩니다.
지정된 작업은 작업 조건(특정 종료 코드)이 발생할 때마다 수행됩니다.
다음 작업 중 하나를 지정할 수 있습니다.
RETRY_TASK
:exitCodes[]
필드에 지정된 종료 코드와 함께 실패한 태스크를 재시도합니다. 지정되지 않은 종료 코드와 함께 실패한 태스크는 재시도되지 않습니다.FAIL_TASK
:exitCodes[]
필드에 지정된 종료 코드와 함께 실패한 태스크를 재시도하지 마세요. 지정되지 않은 종료 코드와 함께 실패한 태스크는 재시도됩니다.
특히 지정되지 않은 종료 코드로 실패한 모든 태스크는 반대 조치를 취합니다. 일부 종료 코드는 재시도되고 일부 코드는 실패합니다.
따라서 수명 주기 정책이 예상대로 작동하려면 작업에서 실패한 태스크를 한 번 이상 자동으로 재시도할 수 있도록 최대 자동 재시도 횟수(maxRetryCount
필드)를 정의해야 합니다.
각 종료 코드는 애플리케이션 또는 Batch에서 정의한 특정 실패를 나타냅니다. 50001에서 59999까지의 종료 코드는 Batch에서 예약되고 정의됩니다. 예약된 종료 코드에 대한 자세한 내용은 문제 해결을 참조하세요.
gcloud CLI 또는 Batch API를 사용하여 특정 실패 후 태스크를 재시도하거나 실패하도록 작업을 지정할 수 있습니다.
gcloud
작업의 구성 세부정보,
maxRetryCount
필드,lifecyclePolicies[]
하위 필드를 지정하는 JSON 파일을 만듭니다.일부 종료 코드에 대해서만 실패한 태스크를 재시도하는 기본 스크립트 작업을 만들려면 다음 콘텐츠로 JSON 파일을 만듭니다.
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ], "maxRetryCount": MAX_RETRY_COUNT, "lifecyclePolicies": [ { "action": "ACTION", "actionCondition": { "exitCodes": [EXIT_CODES] } } ] } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
다음을 바꿉니다.
MAX_RETRY_COUNT
: 각 태스크의 최대 재시도 횟수입니다. 작업이 실패한 태스크를 다시 시도할 수 있으려면 이 값을1
에서10
사이의 정수로 설정해야 합니다.maxRetryCount
필드를 지정하지 않으면 기본값은0
이며 태스크를 재시도하지 않습니다.ACTION
: 지정된 종료 코드와 함께 실패한 태스크를 원하는RETRY_TASK
또는FAIL_TASK
작업입니다. 지정되지 않은 종료 코드로 실패한 태스크는 다른 작업을 수행합니다.EXIT_CODES
: 지정된 작업을 트리거할 하나 이상의 쉼표로 구분된 종료 코드 목록입니다(예:50001, 50002
).각 종료 코드는 애플리케이션 또는 Batch로 정의할 수 있습니다.
50001
에서59999
까지의 종료 코드는 Batch에서 예약됩니다. 예약된 종료 코드에 대한 자세한 내용은 문제 해결을 참조하세요.
예를 들어 다음 작업은 스팟 VM 선점으로 인해 실패한 태스크만 재시도합니다.
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "sleep 30" } } ], "maxRetryCount": 3, "lifecyclePolicies": [ { "action": "RETRY_TASK", "actionCondition": { "exitCodes": [50001] } } ] } } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4", "provisioningModel": "SPOT" } } ] } }
작업을 만들고 실행하려면
gcloud batch jobs submit
명령어를 사용합니다.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
다음을 바꿉니다.
JOB_NAME
: 작업의 이름입니다.LOCATION
: 작업의 위치JSON_CONFIGURATION_FILE
: 작업의 구성 세부정보가 포함된 JSON 파일의 경로
API
maxRetryCount
필드와 lifecyclePolicies[]
하위 필드를 지정하는 jobs.create
메서드에 대해 POST
요청을 실행합니다.
일부 종료 코드에 대해서만 실패한 태스크를 재시도하는 기본 스크립트 작업을 만들려면 다음 요청을 수행합니다.
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
],
"maxRetryCount": MAX_RETRY_COUNT,
"lifecyclePolicies": [
{
"action": "ACTION",
"actionCondition": {
"exitCodes": [EXIT_CODES]
}
}
]
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
다음을 바꿉니다.
PROJECT_ID
: 프로젝트의 프로젝트 IDLOCATION
: 작업의 위치JOB_NAME
: 작업의 이름입니다.MAX_RETRY_COUNT
: 각 태스크의 최대 재시도 횟수입니다. 작업이 실패한 태스크를 다시 시도할 수 있으려면 이 값을1
에서10
사이의 정수로 설정해야 합니다.maxRetryCount
필드를 지정하지 않으면 기본값은0
이며 태스크를 재시도하지 않습니다.ACTION
: 지정된 종료 코드와 함께 실패한 태스크를 원하는RETRY_TASK
또는FAIL_TASK
작업입니다. 지정되지 않은 종료 코드로 실패한 태스크는 다른 작업을 수행합니다.EXIT_CODES
: 지정된 작업을 트리거할 하나 이상의 쉼표로 구분된 종료 코드 목록입니다(예:50001, 50002
).각 종료 코드는 애플리케이션 또는 Batch로 정의할 수 있습니다.
50001
에서59999
까지의 종료 코드는 Batch에서 예약됩니다. 예약된 종료 코드에 대한 자세한 내용은 문제 해결을 참조하세요.
예를 들어 다음 작업은 스팟 VM 선점으로 인해 실패한 태스크만 재시도합니다.
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "sleep 30"
}
}
],
"maxRetryCount": 3,
"lifecyclePolicies": [
{
"action": "RETRY_TASK",
"actionCondition": {
"exitCodes": [50001]
}
}
]
}
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4",
"provisioningModel": "SPOT"
}
}
]
}
}
재시도 횟수에 따라 태스크 동작 수정
원하는 경우 이 페이지의 이전 섹션에 설명된 대로 작업에 대한 자동 재시도를 사용 설정한 후 BATCH_TASK_RETRY_ATTEMPT
사전 정의된 환경 변수를 사용하도록 실행 가능한 항목을 업데이트할 수 있습니다.
BATCH_TASK_RETRY_ATTEMPT
변수는 이 태스크가 이미 시도된 횟수를 나타냅니다. 태스크가 재시도 횟수에 따라 다르게 작동하도록 하려면 실행 파일에서 BATCH_TASK_RETRY_ATTEMPT
변수를 사용하세요.
예를 들어 태스크를 재시도할 때 이전 시도에서 이미 실행된 명령어를 확인할 수 있습니다. 자세한 내용은 사전 정의된 환경 변수를 참고하세요.
다음 단계
- 작업을 만들거나 실행하는 데 문제가 있는 경우 문제 해결을 참조하기
- 작업 및 태스크 보기
- 작업 만들기 옵션 자세히 알아보기