태스크 재시도 자동화

이 페이지에서는 전체 또는 일부 실패 후 자동으로 태스크를 재시도하는 방법을 설명합니다.

하나 이상의 태스크가 실패하면 일괄 작업이 실패하며, 이는 다양한 이유로 발생할 수 있습니다. 기본적으로 작업의 각 태스크는 한 번만 실행됩니다. 태스크가 실패하면 재시도되지 않습니다. 하지만 태스크가 실패하도록 하는 일부 문제는 태스크를 다시 시도하기만 해도 쉽게 해결할 수 있습니다. 이러한 경우 태스크를 자동으로 재시도하도록 작업을 구성하면 문제 해결 과정 및 작업의 전체 실행 시간을 크게 줄일 수 있습니다.

자동 재시도는 느슨하게 결합된(독립적인) 태스크에 적합하며 다양한 문제에 도움이 될 수 있습니다. 예를 들어 자동 태스크 재시도는 다음과 같이 시간에 민감한 문제를 해결할 수 있습니다.

작업을 만들 때 각 태스크에 대해 자동 태스크 재시도를 구성할 수 있습니다. 특히 각 태스크에 대해 다음 구성 옵션 중 하나를 사용할 수 있습니다.

  • 기본적으로 실패 시 각 태스크가 재시도되지 않습니다.
  • 모든 실패에 대해 태스크 재시도: 실패한 태스크를 자동으로 재시도하도록 최대 시간을 구성할 수 있습니다. 0(기본값)과 10회 재시도 사이에 지정할 수 있습니다.
  • 일부 실패 시 태스크 재시도: 특정 실패에 대해 자동으로 재시도 또는 재시도 없이 실패를 수행하는 여러 태스크 작업을 구성할 수 있습니다. 지정되지 않은 모든 실패에 대해 반대 조치가 수행됩니다. 애플리케이션 또는 Batch에서 정의된 종료 코드로 각 오류를 식별할 수 있습니다.

시작하기 전에

모든 실패에 대해 태스크 재시도

gcloud CLI 또는 Batch API를 사용하여 작업의 실패 태스크에 대한 최대 자동 재시도 횟수(maxRetryCount 필드)를 정의할 수 있습니다.

gcloud

  1. 작업의 구성 세부정보와 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이며 태스크를 재시도하지 않습니다.

  2. 작업을 만들고 실행하려면 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"
  }
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트의 프로젝트 ID

  • LOCATION: 작업의 위치

  • JOB_NAME: 작업의 이름입니다.

  • MAX_RETRY_COUNT: 각 태스크의 최대 재시도 횟수입니다. 작업이 실패한 태스크를 다시 시도할 수 있으려면 이 값을 1에서 10 사이의 정수로 설정해야 합니다. maxRetryCount 필드를 지정하지 않으면 기본값은 0이며 태스크를 재시도하지 않습니다.

일부 실패 시 태스크 재시도

수명 주기 정책(lifecyclePolicies[] 필드)을 사용하여 작업이 여러 태스크 실패를 처리하는 방법을 정의할 수 있습니다.

수명 주기 정책은 작업 (action 필드), 작업 조건(actionCondition 필드), 종료 코드(exitCodes[] 필드)로 구성됩니다. 지정된 작업은 작업 조건(특정 종료 코드)이 발생할 때마다 수행됩니다. 다음 작업 중 하나를 지정할 수 있습니다.

  • RETRY_TASK: exitCodes[] 필드에 지정된 종료 코드와 함께 실패한 태스크를 재시도합니다. 지정되지 않은 종료 코드와 함께 실패한 태스크는 재시도되지 않습니다.
  • FAIL_TASK: exitCodes[] 필드에 지정된 종료 코드와 함께 실패한 태스크를 재시도하지 마세요. 지정되지 않은 종료 코드와 함께 실패한 태스크는 재시도됩니다.

특히 지정되지 않은 종료 코드로 실패한 모든 태스크는 반대 조치를 취합니다. 일부 종료 코드는 재시도되고 일부 코드는 실패합니다. 따라서 수명 주기 정책이 예상대로 작동하려면 작업에서 실패한 태스크를 한 번 이상 자동으로 재시도할 수 있도록 최대 자동 재시도 횟수(maxRetryCount 필드)를 정의해야 합니다.

각 종료 코드는 애플리케이션 또는 Batch에서 정의한 특정 실패를 나타냅니다. 50001에서 59999까지의 종료 코드는 Batch에서 예약되고 정의됩니다. 예약된 종료 코드에 대한 자세한 내용은 문제 해결을 참조하세요.

gcloud CLI 또는 Batch API를 사용하여 특정 실패 후 태스크를 재시도하거나 실패하도록 작업을 지정할 수 있습니다.

gcloud

  1. 작업의 구성 세부정보, 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"
            }
          }
        ]
      }
    }
    
  2. 작업을 만들고 실행하려면 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: 프로젝트의 프로젝트 ID

  • LOCATION: 작업의 위치

  • 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 변수를 사용합니다. 예를 들어 태스크가 재시도될 때 이전 시도에서 이미 성공적으로 실행된 명령어를 확인할 수 있습니다. 자세한 내용은 사전 정의된 환경 변수를 참조하세요.

다음 단계