Mengotomatiskan percobaan ulang tugas

Halaman ini menjelaskan cara mencoba ulang tugas secara otomatis setelah semua atau beberapa kegagalan.

Tugas Batch gagal jika setidaknya salah satu tugasnya gagal, yang dapat terjadi karena berbagai alasan. Secara default, setiap tugas dalam pekerjaan hanya berjalan satu kali; jika tugas gagal, tugas tersebut tidak akan dicoba ulang. Namun, beberapa masalah yang menyebabkan tugas gagal dapat diselesaikan dengan mudah hanya dengan mencoba lagi tugas tersebut. Dalam kasus ini, mengonfigurasi tugas untuk mencoba ulang tugas secara otomatis dapat sangat membantu mengurangi gesekan pemecahan masalah dan waktu proses keseluruhan tugas Anda.

Percobaan ulang otomatis sangat cocok untuk tugas yang terhubung secara longgar (independen) dan dapat membantu mengatasi berbagai masalah. Misalnya, percobaan ulang tugas otomatis dapat menyelesaikan masalah yang sensitif terhadap waktu seperti berikut:

Anda dapat mengonfigurasi percobaan ulang tugas otomatis untuk setiap tugas saat membuat tugas. Secara khusus, untuk setiap tugas, Anda dapat menggunakan salah satu opsi konfigurasi berikut:

  • Secara default, setiap tugas tidak akan dicoba ulang jika gagal.
  • Coba lagi tugas untuk semua kegagalan: Anda dapat mengonfigurasi jumlah maksimum percobaan ulang otomatis untuk tugas yang gagal. Anda dapat menentukan antara 0 (default) dan 10 percobaan ulang.
  • Mencoba lagi tugas untuk beberapa kegagalan: Anda dapat mengonfigurasi berbagai tindakan tugas—baik coba lagi otomatis atau gagal tanpa coba lagi—untuk kegagalan tertentu. Tindakan yang berlawanan dilakukan untuk semua kegagalan yang tidak ditentukan. Setiap kegagalan tertentu dapat diidentifikasi dengan kode keluar yang ditentukan oleh aplikasi atau Batch Anda.

Sebelum memulai

  1. Jika belum pernah menggunakan Batch, baca Mulai menggunakan Batch dan aktifkan Batch dengan menyelesaikan prasyarat untuk project dan pengguna.
  2. Untuk mendapatkan izin yang Anda perlukan untuk membuat tugas, minta administrator Anda untuk memberi Anda peran IAM berikut:

    Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

    Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Mencoba lagi tugas untuk semua kegagalan

Anda dapat menentukan jumlah maksimum percobaan ulang otomatis (kolom maxRetryCount) untuk tugas yang gagal menggunakan gcloud CLI atau Batch API.

gcloud

  1. Buat file JSON yang menentukan detail konfigurasi tugas dan kolom maxRetryCount.

    Misalnya, untuk membuat tugas skrip dasar yang menentukan percobaan ulang maksimum untuk tugas yang gagal, buat file JSON dengan konten berikut:

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                }
              }
            ],
            
            "maxRetryCount": MAX_RETRY_COUNT
            
          },
          "taskCount": 3
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    Ganti MAX_RETRY_COUNT dengan jumlah maksimum percobaan ulang untuk setiap tugas. Agar tugas dapat mencoba ulang tugas yang gagal, nilai ini harus ditetapkan ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba ulang tugas apa pun.

  2. Untuk membuat dan menjalankan tugas, gunakan perintah gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Ganti kode berikut:

    • JOB_NAME: nama tugas.

    • LOCATION: lokasi tugas.

    • JSON_CONFIGURATION_FILE: jalur untuk file JSON dengan detail konfigurasi tugas.

API

Buat permintaan POST ke metode jobs.create yang menentukan kolom maxRetryCount.

Misalnya, untuk membuat tugas skrip dasar yang menentukan percobaan ulang maksimum untuk tugas yang gagal, buat permintaan berikut:

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

Ganti kode berikut:

  • PROJECT_ID: Project ID project Anda.

  • LOCATION: lokasi tugas.

  • JOB_NAME: nama tugas.

  • MAX_RETRY_COUNT: Jumlah maksimum coba lagi untuk setiap tugas. Agar tugas dapat mencoba ulang tugas yang gagal, nilai ini harus ditetapkan ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba ulang tugas apa pun.

Mencoba lagi tugas untuk beberapa kegagalan

Anda dapat menentukan cara tugas menangani kegagalan tugas yang berbeda dengan menggunakan kebijakan siklus proses (kolom lifecyclePolicies[]).

Kebijakan siklus proses terdiri dari tindakan (kolom action), kondisi tindakan (kolom actionCondition), dan kode keluar (kolom exitCodes[]). Tindakan yang ditentukan akan dilakukan setiap kali kondisi tindakan—kode keluar tertentu—terjadi. Anda dapat menentukan salah satu tindakan berikut:

  • RETRY_TASK: coba lagi tugas yang gagal dengan kode keluar yang ditentukan di kolom exitCodes[]. Tugas yang gagal dengan kode keluar yang tidak ditentukan tidak akan dicoba lagi.
  • FAIL_TASK: jangan coba lagi tugas yang gagal dengan kode keluar yang ditentukan di kolom exitCodes[]. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan dicoba lagi.

Khususnya, tugas apa pun yang gagal dengan kode keluar yang tidak ditentukan akan mengambil tindakan yang berlawanan—beberapa kode keluar akan dicoba lagi dan beberapa akan gagal. Oleh karena itu, agar kebijakan siklus proses berfungsi seperti yang diharapkan, Anda juga perlu menentukan jumlah maksimum percobaan ulang otomatis (kolom maxRetryCount) agar tugas dapat otomatis mencoba ulang tugas yang gagal setidaknya satu kali.

Setiap kode keluar mewakili kegagalan tertentu yang ditentukan oleh aplikasi atau Batch. Kode keluar dari 50001 hingga 59999 dicadangkan dan ditentukan oleh Batch. Untuk mengetahui informasi selengkapnya tentang kode keluar yang dicadangkan, lihat Pemecahan masalah.

Anda dapat menentukan apakah tugas akan dicoba lagi atau gagal setelah kegagalan tertentu menggunakan gcloud CLI atau Batch API.

gcloud

  1. Buat file JSON yang menentukan detail konfigurasi tugas, kolom maxRetryCount, dan subkolom lifecyclePolicies[].

    Untuk membuat tugas skrip dasar yang mencoba ulang tugas yang gagal hanya untuk beberapa kode keluar, buat file JSON dengan konten berikut:

    {
      "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"
      }
    }
    

    Ganti kode berikut:

    • MAX_RETRY_COUNT: jumlah maksimum coba lagi untuk setiap tugas. Agar tugas dapat mencoba ulang tugas yang gagal, nilai ini harus ditetapkan ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba ulang tugas apa pun.

    • ACTION: tindakan, baik RETRY_TASK atau FAIL_TASK, yang Anda inginkan untuk tugas yang gagal dengan kode keluar yang ditentukan. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan mengambil tindakan lain.

    • EXIT_CODES: daftar yang dipisahkan koma dari satu atau beberapa kode keluar yang ingin Anda picu untuk melakukan tindakan tertentu—misalnya, 50001, 50002.

      Setiap kode keluar dapat ditentukan oleh aplikasi atau Batch Anda. Kode keluar dari 50001 hingga 59999 dicadangkan oleh Batch. Untuk mengetahui informasi selengkapnya tentang kode keluar yang dicadangkan, lihat Pemecahan masalah.

    Misalnya, tugas berikut hanya mencoba ulang tugas yang gagal karena preemption Spot 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. Untuk membuat dan menjalankan tugas, gunakan perintah gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Ganti kode berikut:

    • JOB_NAME: nama tugas.

    • LOCATION: lokasi tugas.

    • JSON_CONFIGURATION_FILE: jalur untuk file JSON dengan detail konfigurasi tugas.

API

Buat permintaan POST ke metode jobs.create yang menentukan kolom maxRetryCount dan subkolom lifecyclePolicies[].

Untuk membuat tugas skrip dasar yang mencoba ulang tugas yang gagal hanya untuk beberapa kode keluar, buat permintaan berikut:

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

Ganti kode berikut:

  • PROJECT_ID: Project ID project Anda.

  • LOCATION: lokasi tugas.

  • JOB_NAME: nama tugas.

  • MAX_RETRY_COUNT: jumlah maksimum coba lagi untuk setiap tugas. Agar tugas dapat mencoba ulang tugas yang gagal, nilai ini harus ditetapkan ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba ulang tugas apa pun.

  • ACTION: tindakan, baik RETRY_TASK atau FAIL_TASK, yang Anda inginkan untuk tugas yang gagal dengan kode keluar yang ditentukan. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan mengambil tindakan lain.

  • EXIT_CODES: daftar yang dipisahkan koma dari satu atau beberapa kode keluar yang ingin Anda picu untuk melakukan tindakan tertentu—misalnya, 50001, 50002.

    Setiap kode keluar dapat ditentukan oleh aplikasi atau Batch Anda. Kode keluar dari 50001 hingga 59999 dicadangkan oleh Batch. Untuk mengetahui informasi selengkapnya tentang kode keluar yang dicadangkan, lihat Pemecahan masalah.

Misalnya, tugas berikut hanya mencoba ulang tugas yang gagal karena preemption Spot 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"
        }
      }
    ]
  }
}

Memodifikasi perilaku tugas berdasarkan jumlah percobaan ulang

Secara opsional, setelah mengaktifkan coba lagi otomatis untuk tugas seperti yang dijelaskan di bagian sebelumnya di halaman ini, Anda dapat memperbarui runnables untuk menggunakan variabel lingkungan yang telah ditentukan sebelumnya BATCH_TASK_RETRY_ATTEMPT. Variabel BATCH_TASK_RETRY_ATTEMPT menjelaskan jumlah percobaan tugas ini sebelumnya. Gunakan variabel BATCH_TASK_RETRY_ATTEMPT di runnables jika Anda ingin tugas berperilaku berbeda berdasarkan jumlah percobaan ulang. Misalnya, saat tugas dicoba lagi, Anda mungkin ingin mengonfirmasi perintah mana yang sudah berhasil dieksekusi pada percobaan sebelumnya. Untuk mengetahui informasi selengkapnya, lihat Variabel lingkungan standar.

Langkah berikutnya