Menjalankan layanan sesuai jadwal

Anda dapat menggunakan Cloud Scheduler untuk memicu layanan Cloud Run dengan aman sesuai jadwal. Hal ini mirip dengan menggunakan cron job.

Kemungkinan kasus penggunaan meliputi:

  • Melakukan pencadangan berdasarkan waktu
  • Melakukan tugas administrasi berulang, seperti:
    • Membuat kembali sitemap
    • Menghapus data, konten, konfigurasi, atau revisi lama
    • Menyinkronkan konten antar-sistem data
    • Memproses notifikasi email harian
    • Memverifikasi dan melaporkan akses ke layanan downstream
  • Membuat dokumen, seperti tagihan

Halaman ini menunjukkan cara aman menggunakan Cloud Scheduler dengan Cloud Run di project Google Cloud yang sama.

Sebelum memulai

Aktifkan Cloud Scheduler API di project yang Anda gunakan.

Membuat dan men-deploy layanan Anda

Untuk membuat dan men-deploy:

  1. Di layanan Anda, implementasikan tugas yang ingin dijalankan sesuai jadwal.

  2. Perhatikan jenis permintaan yang diperkirakan akan diterima oleh layanan Anda misalnya, dari GET atau POST. Saat membuat tugas terjadwal yang memanggil layanan, Anda harus menentukan metode HTTP yang cocok dengannya.

  3. Saat men-deploy layanan yang Anda gunakan dengan Cloud Scheduler, pastikan Anda TIDAK mengizinkan pemanggilan yang tidak diautentikasi.

Contoh berikut menunjukkan cara men-deploy layanan Cloud Run menggunakan Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "my-scheduled-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
  }

  # Use an explicit depends_on clause to wait until API is enabled
  depends_on = [
    google_project_service.run_api
  ]
}

Ganti us-docker.pkg.dev/cloudrun/container/hello dengan referensi ke image container Anda sendiri.

Membuat akun layanan untuk Cloud Scheduler

Anda perlu membuat akun layanan untuk dikaitkan dengan Cloud Scheduler, dan memberi akun layanan tersebut izin untuk memanggil layanan Cloud Run. Anda dapat menggunakan akun layanan yang ada untuk mewakili Cloud Scheduler, atau membuat yang baru.

Untuk membuat akun layanan dan memberinya izin memanggil layanan Cloud Run:

Konsol

  1. Di Konsol Google Cloud, buka halaman Akun layanan.

    Buka Akun Layanan

  2. Pilih project.

  3. Masukkan nama akun layanan untuk ditampilkan di Google Cloud Console.

    Konsol Google Cloud membuat ID akun layanan berdasarkan nama ini. Edit ID jika diperlukan. Anda tidak dapat mengubah ID nanti.

  4. (Opsional) Masukkan deskripsi tentang akun layanan.

  5. Klik Buat dan lanjutkan.

  6. Opsional: Klik kolom Pilih peran.

  7. Pilih Cloud Run > Cloud Run Invoker.

  8. Klik Done.

Command line

  1. Buat akun layanan:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
       --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"

    Ganti

    • SERVICE_ACCOUNT_NAME dengan nama huruf kecil unik dalam project Google Cloud Anda, misalnya my-invoker-service-account-name.
    • DISPLAYED_SERVICE_ACCOUNT_NAME dengan nama yang ingin Anda tampilkan untuk akun layanan ini, misalnya, di konsol, misalnya, My Invoker Service Account.
  2. Untuk Cloud Run, beri akun layanan Anda izin untuk memanggil layanan Anda:

    gcloud run services add-iam-policy-binding SERVICE \
       --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID. \
       --role=roles/run.invoker

    Ganti

    • SERVICE dengan nama layanan yang ingin Anda panggil oleh Cloud Scheduler.
    • SERVICE_ACCOUNT_NAME dengan nama akun layanan.
    • PROJECT_ID dengan ID project Google Cloud Anda.
  3. Beri akun layanan Anda akses ke project sehingga ia memiliki izin untuk menyelesaikan tindakan tertentu pada resource di project Anda:

    gcloud projects add-iam-policy-binding RESOURCE_ID \
       --member=PRINCIPAL --role=roles/run.invoker

    Ganti

    • RESOURCE_ID: ID project Google Cloud Anda.

    • PRINCIPAL: ID untuk akun utama, atau anggota, yang biasanya memiliki formulir berikut: PRINCIPAL_TYPE:ID. Misalnya, user:my-user@example.com. Untuk daftar lengkap nilai yang dapat dimiliki PRINCIPAL, lihat referensi Binding Kebijakan.

Terraform

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Untuk membuat akun layanan menggunakan Terraform:

resource "google_service_account" "default" {
  account_id   = "scheduler-sa"
  description  = "Cloud Scheduler service account; used to trigger scheduled Cloud Run jobs."
  display_name = "scheduler-sa"

  # Use an explicit depends_on clause to wait until API is enabled
  depends_on = [
    google_project_service.iam_api
  ]
}

resource "google_cloud_run_service_iam_member" "default" {
  location = google_cloud_run_v2_service.default.location
  service  = google_cloud_run_v2_service.default.name
  role     = "roles/run.invoker"
  member   = "serviceAccount:${google_service_account.default.email}"
}

Membuat tugas Cloud Scheduler

Anda harus membuat tugas yang memanggil layanan Anda pada waktu yang telah ditentukan. Anda dapat menggunakan konsol atau command line:

Untuk membuat tugas, Anda dapat menggunakan konsol atau command line gcloud. Klik tab yang sesuai:

Konsol

  1. Buka halaman konsol Cloud Scheduler.

    Buka Cloud Scheduler

  2. Klik Create Job.

    screenshot

  3. Berikan nama untuk tugas.

  4. Tentukan frekuensi, atau interval tugas, saat tugas akan dijalankan, menggunakan string konfigurasi. Misalnya, string 0 */3 * * * menjalankan tugas setiap 3 jam. String yang Anda berikan di sini dapat berupa string apa pun yang kompatibel dengan crontab.

    Untuk informasi selengkapnya, lihat Mengonfigurasi Jadwal Tugas.

  5. Dari daftar dropdown, pilih zona waktu yang akan digunakan untuk frekuensi tugas.

  6. Tentukan HTTP sebagai target:

    1. Tentukan URL layanan Anda yang sepenuhnya memenuhi syarat, misalnya https://myservice-abcdef-uc.a.run.app Tugas akan mengirim permintaan ke URL ini.

    2. Tentukan metode HTTP: metode tersebut harus cocok dengan yang diharapkan oleh layanan Cloud Run yang di-deploy sebelumnya. Defaultnya adalah POST.

    3. (Opsional) Tentukan data yang akan dikirim ke target. Data ini dikirim dalam isi permintaan jika metode HTTP POST atau PUT dipilih.

    4. Klik Lainnya untuk menampilkan setelan autentikasi.

    5. Dari menu dropdown, pilih Tambahkan token OIDC.

    6. Di kolom Service account, salin email akun layanan dari akun layanan yang Anda buat sebelumnya.

    7. Di kolom Audiens, salin URL lengkap layanan Anda.

  7. Klik Buat untuk membuat dan menyimpan tugas.

Command line

Anda harus menggunakan autentikasi OIDC untuk mengakses layanan Cloud Run terautentikasi dari Cloud Scheduler. Autentikasi OIDC mencakup akun layanan dan tanda audiens. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Autentikasi untuk Target HTTP.

Untuk membuat tugas Cloud Scheduler:

gcloud scheduler jobs create http test-job --schedule "5 * * * *" 
--http-method=HTTP-METHOD
--uri=SERVICE-URL
--oidc-service-account-email=SERVICE-ACCOUNT-EMAIL
--oidc-token-audience=SERVICE-URL

Ganti

  • HTTP-METHOD dengan metode HTTP (yaitu GET, POST, PUT, dll.).
  • SERVICE-URL dengan URL layanan Anda.
  • SERVICE-ACCOUNT-EMAIL dengan email akun layanan Anda.

Terraform

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Untuk membuat tugas Cloud Scheduler untuk layanan Cloud Run:

resource "google_cloud_scheduler_job" "default" {
  name             = "scheduled-cloud-run-job"
  region           = "us-central1"
  description      = "Invoke a Cloud Run container on a schedule."
  schedule         = "*/8 * * * *"
  time_zone        = "America/New_York"
  attempt_deadline = "320s"

  retry_config {
    retry_count = 1
  }

  http_target {
    http_method = "POST"
    uri         = google_cloud_run_v2_service.default.uri

    oidc_token {
      service_account_email = google_service_account.default.email
    }
  }

  # Use an explicit depends_on clause to wait until API is enabled
  depends_on = [
    google_project_service.scheduler_api
  ]
}

Layanan Cloud Run akan dipicu melalui permintaan oleh tugas Cloud Scheduler pada frekuensi yang Anda tetapkan. Anda dapat mengonfirmasi dan memantaunya dengan memeriksa log untuk layanan ini.

Langkah berikutnya