הפעלת שירותים לפי לוח זמנים

אפשר להשתמש ב-Cloud Scheduler כדי להפעיל שירות Cloud Run בצורה מאובטחת לפי לוח זמנים. זה דומה לשימוש במשימות cron.

תרחישי שימוש אפשריים:

  • ביצוע גיבויים על בסיס זמן
  • ביצוע משימות ניהוליות חוזרות, כמו:
    • יצירה מחדש של Sitemap
    • מחיקת נתונים, תוכן, הגדרות או גרסאות קודמות
    • סנכרון תוכן בין מערכות נתונים
    • עיבוד התראות יומיות באימייל
    • אימות הגישה לשירותים במורד הזרם ודיווח עליה
  • יצירת מסמכים, כמו חשבונות

בדף הזה מוסבר איך להשתמש ב-Cloud Scheduler עם Cloud Run בצורה מאובטחת באותו Google Cloud פרויקט.

לפני שמתחילים

מפעילים את Cloud Scheduler API בפרויקט שבו אתם משתמשים.

יצירה ופריסה של השירות

כדי ליצור ולפרוס:

  1. בשירות, מטמיעים את העבודה שרוצים להפעיל לפי לוח זמנים.

  2. שימו לב איזה סוג בקשה השירות מצפה לקבל ממנו את בקשות העבודה, לדוגמה, GET או POST. כשיוצרים את המשימה המתוזמנת שמפעילה את השירות, צריך לציין את שיטת ה-HTTP שתואמת לשיטה הזו.

  3. כשפורסים את השירות שבו אתם משתמשים עם Cloud Scheduler, חשוב לבחור באפשרות ** דרוש אימות**. לא לאפשר גישה לכולם.

בדוגמה הבאה אפשר לראות איך פורסים שירות Cloud Run באמצעות 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
  ]
}

מחליפים את us-docker.pkg.dev/cloudrun/container/hello בהפניה לקובץ אימג' של קונטיינר משלכם.

יצירת חשבון שירות ל-Cloud Scheduler

צריך ליצור חשבון שירות כדי לשייך אותו ל-Cloud Scheduler, ולתת לחשבון השירות הזה הרשאה להפעיל את שירות Cloud Run. אפשר להשתמש בחשבון שירות קיים כדי לייצג את Cloud Scheduler, או ליצור חשבון חדש.

כדי ליצור חשבון שירות ולהעניק לו הרשאה להפעיל את שירות Cloud Run:

המסוף

  1. נכנסים לדף Service Accounts במסוף Google Cloud .

    לדף Service accounts

  2. בוחרים פרויקט.

  3. נותנים לחשבון השירות שם שיוצג במסוף Google Cloud .

    המסוף יוצר מזהה לחשבון השירות על סמך השם הזה. Google Cloud עורכים את המזהה לפי הצורך. אי אפשר יהיה לשנות את המזהה בשלב מאוחר יותר.

  4. אופציונלי: מזינים תיאור לחשבון השירות.

  5. לוחצים על Create and continue.

  6. אופציונלי: לוחצים על השדה בחירת תפקיד.

  7. בוחרים באפשרות Cloud Run > Cloud Run Invoker.

  8. לוחצים על סיום.

שורת הפקודה

  1. יוצרים את חשבון השירות:

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

    החלפה

    • SERVICE_ACCOUNT_NAME עם שם באותיות קטנות שהוא ייחודי בתוך הפרויקט Google Cloud , לדוגמה my-invoker-service-account-name.
    • DISPLAYED_SERVICE_ACCOUNT_NAME בשם שרוצים להציג לחשבון השירות הזה, לדוגמה, במסוף, למשל, My Invoker Service Account.
  2. ב-Cloud Run, נותנים לחשבון השירות הרשאה להפעיל את השירות:

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

    החלפה

    • SERVICE בשם השירות שרוצים להפעיל באמצעות Cloud Scheduler.
    • SERVICE_ACCOUNT_NAME בשם של חשבון השירות.
    • PROJECT_ID במזהה הפרויקט ב- Google Cloud .
  3. נותנים לחשבון השירות גישה לפרויקט כדי שתהיה לו הרשאה לבצע פעולות ספציפיות במשאבים בפרויקט:

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

    החלפה

    • RESOURCE_ID: מזהה הפרויקט ב- Google Cloud .

    • PRINCIPAL: המזהה של החשבון הראשי או של המשתמש בקבוצה. בדרך כלל בצורה הבאה: PRINCIPAL_TYPE:ID. לדוגמה: user:my-user@example.com. בדף העזר בנושא קישורי מדיניות תוכלו למצוא רשימה מלאה של הערכים שיכולים להיות ל-PRINCIPAL.

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

כדי ליצור חשבון שירות באמצעות 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}"
}

יצירת משימה ב-Cloud Scheduler

תצטרכו ליצור משימה שמפעילה את השירות בזמנים שצוינו. אפשר להשתמש במסוף או בשורת הפקודה:

כדי ליצור עבודה, אפשר להשתמש במסוף או בשורת הפקודה gcloud. לוחצים על הכרטיסייה המתאימה:

המסוף

  1. נכנסים לדף של Cloud Scheduler במסוף.

    כניסה ל-Cloud Scheduler

  2. לוחצים על Create job (יצירת משימה).

    צילום מסך

  3. מזינים שם למשימה.

  4. מציינים את התדירות או את מרווח הזמן בין ההרצות של המשימה באמצעות מחרוזת הגדרה. לדוגמה, המחרוזת 0 */3 * * * מריצה את העבודה כל 3 שעות. המחרוזת שאתם מציינים כאן יכולה להיות כל מחרוזת שתואמת ל-crontab.

    מידע נוסף זמין במאמר הגדרת לוחות זמנים של משימות.

  5. מהרשימה הנפתחת, בוחרים את אזור הזמן שבו תתבצע התדירות של העבודה.

  6. מציינים את היעד HTTP:

    1. מציינים את כתובת ה-URL המוגדרת במלואה של השירות, לדוגמה https://myservice-abcdef-uc.a.run.app. העבודה תשלח בקשות לכתובת ה-URL הזו.

    2. מציינים את שיטת ה-HTTP: השיטה צריכה להיות זהה לשיטה שהוגדרה בשירות Cloud Run שפרסתם קודם. ברירת המחדל היא POST.

    3. אפשר גם לציין את הנתונים שיישלחו ליעד. הנתונים האלה נשלחים בגוף הבקשה כשבוחרים ב-method ‏HTTP‏ POST או PUT.

    4. לוחצים על עוד כדי להציג את הגדרות האימות.

    5. בתפריט הנפתח, בוחרים באפשרות הוספת טוקן OIDC.

    6. בשדה Service account, מעתיקים את כתובת האימייל של חשבון השירות שיצרתם קודם.

    7. בשדה קהל, מעתיקים את כתובת ה-URL המלאה של השירות.

  7. לוחצים על יצירה כדי ליצור ולשמור את העבודה.

שורת הפקודה

כדי לגשת לשירות מאומת ב-Cloud Run מ-Cloud Scheduler, צריך להשתמש באימות OIDC. אימות OIDC כולל את חשבון השירות ואת דגלי הקהל. מידע נוסף זמין במאמר שימוש באימות עם HTTP Target.

כדי ליצור את המשימה של 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

החלפה

  • HTTP-METHOD עם שיטת ה-HTTP (כלומר, GET, ‏ POST, ‏ PUT וכו').
  • SERVICE-URL מחליפים בכתובת ה-URL של השירות.
  • SERVICE-ACCOUNT-EMAIL מחליפים בכתובת האימייל של חשבון השירות.

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

כדי ליצור משימה של Cloud Scheduler בשביל שירות 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
  ]
}

השירות שלכם ב-Cloud Run יופעל באמצעות בקשה של משימת Cloud Scheduler בתדירות שהגדרתם. כדי לוודא זאת ולעקוב אחרי הפעולה, אפשר לבדוק את היומנים של השירות הזה.

המאמרים הבאים