Membangun dan membuat tugas Shell di Cloud Run

Pelajari cara membuat tugas Cloud Run sederhana, lalu men-deploy dari sumber, yang secara otomatis mengemas kode Anda ke dalam image container, mengupload image container ke Artifact Registry, lalu men-deploy ke Cloud Run. Anda dapat menggunakan bahasa lain selain yang telah ditampilkan.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Jika Anda menggunakan project yang sudah ada untuk panduan ini, pastikan Anda memiliki izin yang diperlukan untuk menyelesaikan panduan ini. Jika berhasil membuat project baru, berarti Anda sudah memiliki izin yang diperlukan.

  7. Verify that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.

  9. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  10. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  11. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Jika Anda menggunakan project yang sudah ada untuk panduan ini, pastikan Anda memiliki izin yang diperlukan untuk menyelesaikan panduan ini. Jika berhasil membuat project baru, berarti Anda sudah memiliki izin yang diperlukan.

  13. Verify that billing is enabled for your Google Cloud project.

  14. Enable the Cloud Run Admin API and Cloud Build APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com

    Setelah Cloud Run Admin API diaktifkan, akun layanan default Compute Engine akan dibuat secara otomatis.

  15. Tinjau harga Cloud Run atau perkirakan biaya dengan kalkulator harga.
  16. Peran yang diperlukan

    Untuk mendapatkan izin yang Anda perlukan guna menyelesaikan panduan memulai cepat ini, minta administrator Anda untuk memberi Anda peran IAM berikut:

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

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

    Memberi akun layanan Cloud Build akses ke project Anda

    Cloud Build otomatis menggunakan akun layanan default Compute Engine sebagai akun layanan Cloud Build default untuk membangun kode sumber dan resource Cloud Run Anda, kecuali jika Anda mengganti perilaku ini.

    Agar Cloud Build dapat membangun sumber Anda, berikan peran Cloud Run Builder (roles/run.builder) ke akun layanan Cloud Build di project Anda:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS \
        --role=roles/run.builder

    Ganti PROJECT_ID dengan project ID Google Cloud Anda dan SERVICE_ACCOUNT_EMAIL_ADDRESS dengan alamat email akun layanan Cloud Build. Jika Anda menggunakan akun layanan default Compute Engine sebagai akun layanan Cloud Build, gunakan format berikut untuk alamat email akun layanan:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Ganti PROJECT_NUMBER dengan nomor project Google Cloud Anda.

    Untuk mengetahui petunjuk mendetail tentang cara menemukan project ID dan nomor project Anda, lihat Membuat dan mengelola project.

    Pemberian peran builder Cloud Run memerlukan waktu beberapa menit untuk diterapkan.

    Menulis contoh tugas

    Menulis tugas Cloud Run yang menjalankan skrip Shell:

    1. Buat sebuah direktori baru bernama jobs dan ubah ke direktori tersebut:

      mkdir jobs
      cd jobs
      
    2. Buat file Dockerfile dengan konten berikut:

      
      # Use the official Ubuntu image from Docker Hub as
      # a base image
      FROM ubuntu:24.04
      
      # Execute next commands in the directory /workspace
      WORKDIR /workspace
      
      # Copy over the script to the /workspace directory
      COPY script.sh .
      
      # Just in case the script doesn't have the executable bit set
      RUN chmod +x ./script.sh
      
      # Run the script when starting the container
      CMD [ "./script.sh" ]
      
    3. Dalam direktori yang sama, buat file script.sh untuk kode tugas yang sebenarnya. Salin baris contoh berikut ke dalamnya:

      #!/bin/bash
      set -euo pipefail
      
      # In production, consider printing commands as they are executed. 
      # This helps with debugging if things go wrong and you only 
      # have the logs.
      #
      # Add -x:
      # `set -euox pipefail`
      
      CLOUD_RUN_TASK_INDEX=${CLOUD_RUN_TASK_INDEX:=0}
      CLOUD_RUN_TASK_ATTEMPT=${CLOUD_RUN_TASK_ATTEMPT:=0}
      
      echo "Starting Task #${CLOUD_RUN_TASK_INDEX}, Attempt #${CLOUD_RUN_TASK_ATTEMPT}..."
      
      # SLEEP_MS and FAIL_RATE should be a decimal
      # numbers. parse and format the input using 
      # printf. 
      #
      # printf validates the input since it 
      # quits on invalid input, as shown here:
      #
      #   $: printf '%.1f' "abc"
      #   bash: printf: abc: invalid number
      #
      SLEEP_MS=$(printf '%.1f' "${SLEEP_MS:=0}")
      FAIL_RATE=$(printf '%.1f' "${FAIL_RATE:=0}")
      
      # Wait for a specific amount of time to simulate
      # performing some work
      SLEEP_SEC=$(echo print\("${SLEEP_MS}"/1000\) | perl)
      sleep "$SLEEP_SEC" # sleep accepts seconds, not milliseconds
      
      # Fail the task with a likelihood of $FAIL_RATE
      
      # Bash does not do floating point arithmetic. Use perl 
      # to convert into integer and multiply by 100.
      FAIL_RATE_INT=$(echo print\("int(${FAIL_RATE:=0}*100"\)\) | perl)
      
      # Generate a random number between 0 and 100
      RAND=$(( RANDOM % 100))
      if (( RAND < FAIL_RATE_INT )); then 
          echo "Task #${CLOUD_RUN_TASK_INDEX}, Attempt #${CLOUD_RUN_TASK_ATTEMPT} failed."
          exit 1
      else 
          echo "Completed Task #${CLOUD_RUN_TASK_INDEX}."
      fi
      

      Tugas Cloud Run mengizinkan pengguna untuk menentukan jumlah tugas yang akan dijalankan oleh tugas tersebut. Kode contoh ini menunjukkan cara menggunakan variabel lingkungan CLOUD_RUN_TASK_INDEX bawaan. Setiap tugas mewakili satu salinan container yang berjalan. Perhatikan bahwa tugas-tugas biasanya dijalankan secara paralel. Menggunakan beberapa tugas akan berguna jika setiap tugas dapat memproses subset data Anda secara independen.

      Setiap tugas mengetahui indeksnya, yang disimpan dalam variabel lingkungan CLOUD_RUN_TASK_INDEX. Variabel lingkungan CLOUD_RUN_TASK_COUNT bawaan berisi jumlah tugas yang disediakan pada waktu eksekusi tugas melalui parameter --tasks.

      Kode yang ditampilkan juga menunjukkan cara mencoba ulang tugas, menggunakan variabel lingkungan CLOUD_RUN_TASK_ATTEMPT bawaan yang berisi berapa kali tugas ini telah dicoba ulang, mulai dari 0 untuk upaya pertama dan bertambah 1 untuk setiap percobaan ulang berturut-turut yang berhasil, hingga --max-retries.

      Kode ini juga memungkinkan Anda menghasilkan kegagalan sebagai cara untuk menguji percobaan ulang dan membuat log error sehingga Anda dapat melihat seperti apa tampilannya.

    Kode Anda telah lengkap dan siap untuk dikemas dalam container.

    Bangun container tugas, kirim ke Artifact Registry, lalu deploy ke Cloud Run

    Panduan memulai ini menggunakan deploy dari sumber, yang membuat container, mengunggahnya ke Artifact Registry, dan men-deploy tugas tersebut ke Cloud Run:

    gcloud run jobs deploy job-quickstart \
        --source . \
        --tasks 50 \
        --set-env-vars SLEEP_MS=10000 \
        --set-env-vars FAIL_RATE=0.1 \
        --max-retries 5 \
        --region REGION \
        --project=PROJECT_ID

    dengan PROJECT_ID sebagai project ID Anda dan REGION adalah region Anda , misalnya, europe-west1. Perhatikan bahwa Anda dapat mengubah berbagai parameter menjadi nilai apa pun yang ingin Anda gunakan untuk tujuan pengujian. SLEEP_MS menyimulasikan pekerjaan dan FAIL_RATE menyebabkan X% tugas gagal sehingga Anda dapat bereksperimen dengan paralelisme dan mencoba ulang tugas yang gagal.

    Menjalankan tugas di Cloud Run

    Untuk menjalankan tugas yang baru saja Anda buat:

    gcloud run jobs execute job-quickstart --region REGION

    Ganti REGION dengan region yang Anda gunakan saat membuat dan men-deploy tugas, misalnya europe-west1.

    Pembersihan

    Untuk menghindari biaya tambahan pada akun Google Cloud Anda, hapus semua resource yang Anda deploy dengan panduan memulai ini.

    Menghapus repositori Anda

    Cloud Run hanya mengenakan biaya untuk waktu eksekusi tugas Anda. Namun, Anda mungkin tetap dikenai biaya atas penyimpanan image container di Artifact Registry. Untuk menghapus repositori Artifact Registry, ikuti langkah-langkah di Menghapus repositori dalam dokumentasi Artifact Registry.

    Menghapus tugas Anda

    Tugas Cloud Run hanya menimbulkan biaya saat tugas sedang dieksekusi. Untuk menghapus tugas Cloud Run, ikuti salah satu langkah berikut:

    Konsol

    Untuk menghapus tugas:

    1. Di konsol Google Cloud , buka Cloud Run:

      Buka Cloud Run

    2. Temukan tugas yang ingin Anda hapus dalam daftar tugas, lalu klik kotak centang tugas tersebut untuk memilihnya.

    3. Klik Hapus. Tindakan ini akan menghentikan semua eksekusi tugas yang sedang berlangsung dan semua instance container yang sedang berjalan.

    gcloud

    Untuk menghapus tugas, jalankan perintah berikut:

    gcloud run jobs delete JOB_NAME

    Ganti JOB_NAME dengan nama tugas.

    Menghapus project pengujian Anda

    Menghapus project Google Cloud akan menghentikan penagihan untuk semua resource dalam project tersebut. Untuk melepaskan semua Google Cloud resource di project Anda, ikuti langkah-langkah berikut:

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Langkah berikutnya

    Untuk informasi lebih lanjut dalam mem-build container dari kode sumber dan penerapan untuk repositori, lihat: