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 tugas hanya berjalan sekali; jika tugas gagal, tugas tersebut tidak akan dicoba ulang. Namun, beberapa masalah yang menyebabkan tugas gagal dapat dengan mudah diselesaikan hanya dengan mencoba kembali tugas tersebut. Dalam kasus ini, mengonfigurasi tugas untuk mencoba ulang tugas secara otomatis dapat secara substansial membantu mengurangi hambatan pemecahan masalah dan waktu proses tugas Anda secara keseluruhan.

Percobaan ulang otomatis sangat cocok untuk tugas yang terikat 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.
  • Mencoba ulang tugas untuk semua kegagalan: Anda dapat mengonfigurasi waktu maksimum untuk mencoba ulang tugas yang gagal secara otomatis. Anda dapat menentukan antara 0 (default) dan 10 percobaan ulang.
  • Mencoba kembali tugas untuk beberapa kegagalan: Anda dapat mengonfigurasi berbagai tindakan tugas—baik percobaan ulang otomatis maupun gagal tanpa percobaan ulang—untuk kegagalan tertentu. Tindakan sebaliknya 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 diperlukan untuk membuat tugas, minta administrator 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 ulang tugas untuk semua kegagalan

Anda dapat menentukan jumlah maksimum percobaan ulang otomatis (kolom maxRetryCount) untuk tugas yang gagal dalam tugas 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 dicoba ulang, nilai ini harus ditetapkan ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba kembali 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 percobaan ulang untuk setiap tugas. Agar tugas dapat dicoba ulang, nilai ini harus ditetapkan ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba kembali tugas apa pun.

Mencoba ulang tugas untuk beberapa kegagalan

Anda dapat menentukan cara Anda ingin tugas menangani berbagai kegagalan tugas 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 diambil setiap kali kondisi tindakan—kode keluar tertentu—terjadi. Anda dapat menentukan salah satu tindakan berikut:

  • RETRY_TASK: mencoba ulang tugas yang gagal dengan kode keluar yang ditentukan di kolom exitCodes[]. Tugas yang gagal dengan kode keluar yang tidak ditentukan tidak akan dicoba ulang.
  • 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.

Secara khusus, setiap tugas yang gagal dengan kode keluar yang tidak ditentukan akan mengambil tindakan yang berlawanan—beberapa kode keluar dicoba lagi dan beberapa 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 sekali.

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

Anda dapat menentukan agar tugas dicoba ulang 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 kembali 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 percobaan ulang untuk setiap tugas. Agar tugas dapat dicoba ulang, nilai ini harus ditetapkan ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba kembali 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 melakukan tindakan lain.

    • EXIT_CODES: daftar yang dipisahkan koma dari satu atau beberapa kode keluar yang ingin Anda gunakan untuk memicu tindakan yang ditentukan—misalnya, 50001, 50002.

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

    Misalnya, tugas berikut hanya mencoba kembali 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 percobaan ulang untuk setiap tugas. Agar tugas dapat dicoba ulang, nilai ini harus ditetapkan ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba kembali 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 melakukan tindakan lain.

  • EXIT_CODES: daftar yang dipisahkan koma dari satu atau beberapa kode keluar yang ingin Anda gunakan untuk memicu tindakan yang ditentukan—misalnya, 50001, 50002.

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

Misalnya, tugas berikut hanya mencoba kembali 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"
        }
      }
    ]
  }
}

Mengubah perilaku tugas berdasarkan jumlah percobaan ulang

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

Langkah selanjutnya