תזמון והרצה של משימת cron באמצעות Terraform

במדריך למתחילים הזה נסביר איך משתמשים ב-Terraform כדי ליצור משימת cron ב-Cloud Scheduler. ‫Terraform הוא כלי מסוג תשתית כקוד (IaC) שמאפשר ליצור, לשנות ולשפר בצורה חזויה את תשתית הענן באמצעות קוד. מידע נוסף על שימוש ב-Terraform לאספקת תשתית ב- Google Cloud

ל-Cloud Scheduler יש תוכנית בחינם, והפעלת המדריך למתחילים הזה לא אמורה לגרום לחיובים. מידע נוסף מפורט במאמר בנושא תמחור.

במדריך למתחילים הזה:

  1. איך משתמשים ב-Terraform כדי ליצור משימת cron ל-Cloud Scheduler.
  2. מגדירים לוח זמנים חוזר למשימה.
  3. מציינים נושא Pub/Sub כיעד של העבודה.
  4. מריצים את המשימה.
  5. מוודאים שהמשימה בוצעה בהצלחה.

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

יכול להיות שאילוצי אבטחה שהוגדרו על ידי הארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה Google Cloud מוגבלת.

  1. נכנסים לחשבון Google.

    אם עדיין אין חשבון, יוצרים חשבון חדש.

  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.

  7. מפעילים את ממשקי ה-API של Resource Manager ו-Service Usage, אם הם עדיין לא מופעלים:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  8. התקינו את ה-CLI של Google Cloud.

  9. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  10. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  11. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  12. אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.

  13. מפעילים את ממשקי ה-API של Resource Manager ו-Service Usage, אם הם עדיין לא מופעלים:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  14. ‫Terraform כבר משולב ב-Cloud Shell. אם אתם צריכים להתקין את Terraform, תוכלו לעיין במסמכי התיעוד של HashiCorp Terraform.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להשלמת המדריך למתחילים, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בפרויקט:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

יצירת קובץ תצורה של Terraform

כדי להשתמש ב-Terraform עם Cloud Scheduler, צריך ליצור קובץ תצורה שמתאר את התשתית וליצור תוכנית ביצוע. לאחר מכן, מחילים את קובץ התצורה על הפלטפורמה או השירות כדי לבצע פעולות להקצאת התשתית.

כדי ליצור קובץ תצורה של Terraform בשם main.tf:

  1. פותחים טרמינל ויוצרים ספרייה:

    mkdir terraform
  2. עוברים לספרייה terraform:

    cd terraform
  3. מוסיפים קובץ חדש, main.tf, לספרייה:

    nano main.tf
  4. מוסיפים לקובץ main.tf את המשאבים הבאים של ספק Terraform ל- Google Cloud:

    1. מפעילים את Cloud Scheduler API ואת Pub/Sub API:

      # Enable Cloud Scheduler API
      resource "google_project_service" "scheduler" {
        service            = "cloudscheduler.googleapis.com"
        disable_on_destroy = false
      }
      # Enable Pub/Sub API
      resource "google_project_service" "pubsub" {
        service            = "pubsub.googleapis.com"
        disable_on_destroy = false
      }
    2. יוצרים נושא Pub/Sub כמשאב שאליו אפליקציות לשליחת הודעות יכולות לשלוח הודעות:

      # Create Pub/Sub topic
      resource "google_pubsub_topic" "default" {
        name = "pubsub_topic"
      }

      כך נוצר נושא בשם pubsub_topic.

    3. יוצרים מינוי כדי לקבל הודעות שפורסמו בנושא Pub/Sub:

      # Create Pub/Sub subscription
      resource "google_pubsub_subscription" "default" {
        name  = "pubsub_subscription"
        topic = google_pubsub_topic.default.name
      }
    4. יוצרים משימת cron באמצעות המשאב google_cloud_scheduler_job:

      # Create a cron job using Cloud Scheduler
      resource "google_cloud_scheduler_job" "default" {
        name        = "test-job"
        description = "test job"
        schedule    = "30 16 * * 7"
        region      = "us-east1"
      
        pubsub_target {
          topic_name = google_pubsub_topic.default.id
          data       = base64encode("Hello world!")
        }
      }

      הארגומנטים הבאים משמשים בדוגמה:

      • ‫name: שם המשימה.
      • ‫description: תיאור של המשימה.
      • ‫schedule: התדירות של העבודה, בפורמט שמבוסס על unix-cron.

        בדוגמה הזו, 30 16 * * 7 מציין שהמשימה תפעל בשעה 16:30 בימי ראשון. מידע נוסף זמין במאמר בנושא פורמט של משימת Cron ואזור זמן.

      • ‫region: האזור שבו נמצאת המשימה.

      • ‫pubsub_target: היעד של נושא Pub/Sub, כולל שם המשאב המלא של הנושא (topic_name) שאליו מתפרסם המטען הייעודי (payload) של ההודעה (data) כשהמשימה פועלת.

      יש תמיכה בארגומנטים אחרים. פרטים נוספים זמינים במאמר Terraform Registry argument reference.

במאמר הפעלת שירותי Cloud Run לפי לוח זמנים מופיעה דוגמה נוספת לשימוש ב-Terraform עם Cloud Scheduler.

יצירת משימת ה-cron

פורסים את משאבי Terraform כדי ליצור את משימת ה-cron.

  1. פותחים טרמינל ובספרייה terraform מפעילים את Terraform:

    terraform init
  2. בודקים שהשינויים שאתם מציעים באמצעות Terraform תואמים לתוכנית הצפויה:

    terraform plan

    אפשר להתעלם מההערה לגבי אי שימוש באפשרות -out.

  3. יוצרים את משימת ה-cron:

    terraform apply
  4. בהנחיה Enter a value, מקלידים yes כדי להמשיך ביצירת המשאבים.

  5. בודקים שנוצרה משימה:

    gcloud scheduler jobs describe test-job --location=us-east1

    הפלט אמור להיראות כך:

    description: test job
    lastAttemptTime: '2024-04-04T13:56:00.669530Z'
    name: projects/PROJECT_ID/locations/us-east1/jobs/test-job
    pubsubTarget:
    data: dGVzdA==
    topicName: projects/PROJECT_ID/topics/pubsub_topic
    schedule: '30 16 * * 7'
    scheduleTime: '2024-04-04T13:58:00.737907Z'
    state: ENABLED

יצרתם ג'וב ששולח הודעה לנושא Pub/Sub בשעה 16:30 בימי ראשון. עכשיו אפשר להריץ את המשימה.

הרצת המשימה

בנוסף להרצה לפי התזמון שצוין, אפשר להריץ את המשימה באופן מיידי באמצעות הפקודה הבאה.

gcloud scheduler jobs run test-job --location=us-east1

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

אימות התוצאות

מוודאים שהנושא ב-Pub/Sub מקבל הודעות מהמשימה.

  1. שליפת הודעות Pub/Sub ממינוי:

    gcloud pubsub subscriptions pull pubsub_subscription --limit 5
    

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

  2. צפייה בתוצאות של הפעלת המשימה. הפלט אמור להיראות כך:

    DATA: Hello world!
    MESSAGE_ID: 5028933846601543
    ORDERING_KEY:
    ATTRIBUTES:
    DELIVERY_ATTEMPT:
    ACK_ID: RFAGFixdRkhRNxkIaFEOT14jPzUgKEUQAgVPAihdeTFXLkFacGhRDRlyfWB9[...]
    

הסרת המשאבים

כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, אתם צריכים למחוק את הפרויקט ב- Google Cloud יחד עם המשאבים.

  1. מחיקת הפרויקט ב- Google Cloud מפסיקה את החיוב על כל המשאבים שמשמשים את הפרויקט. הערה: כברירת מחדל, כל הקבצים בספריית הבית של Cloud Shell (למשל, קובצי Terraform) נשמרים בין סשנים.

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID
  2. לחלופין, אפשר למחוק את כל המשאבים שיצרתם באמצעות Terraform.

    הפקודה terraform destroy מסיימת את כל המשאבים שצוינו במצב Terraform. היא לא מוחקת משאבים שלא מנוהלים על ידי פרויקט Terraform הנוכחי. קובץ התצורה של Terraform לא נמחק. מידע נוסף זמין במאמר Destroy infrastructure.

    terraform destroy

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