תזמון והרצה של משימת cron באמצעות Terraform
במדריך למתחילים הזה נסביר איך משתמשים ב-Terraform כדי ליצור משימת cron ב-Cloud Scheduler. Terraform הוא כלי מסוג תשתית כקוד (IaC) שמאפשר ליצור, לשנות ולשפר בצורה חזויה את תשתית הענן באמצעות קוד. מידע נוסף על שימוש ב-Terraform לאספקת תשתית ב- Google Cloud
ל-Cloud Scheduler יש תוכנית בחינם, והפעלת המדריך למתחילים הזה לא אמורה לגרום לחיובים. מידע נוסף מפורט במאמר בנושא תמחור.
במדריך למתחילים הזה:
- איך משתמשים ב-Terraform כדי ליצור משימת cron ל-Cloud Scheduler.
- מגדירים לוח זמנים חוזר למשימה.
- מציינים נושא Pub/Sub כיעד של העבודה.
- מריצים את המשימה.
- מוודאים שהמשימה בוצעה בהצלחה.
לפני שמתחילים
יכול להיות שאילוצי אבטחה שהוגדרו על ידי הארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה Google Cloud מוגבלת.
-
נכנסים לחשבון Google.
אם עדיין אין חשבון, יוצרים חשבון חדש.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים 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 .
-
אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.
מפעילים את ממשקי ה-API של Resource Manager ו-Service Usage, אם הם עדיין לא מופעלים:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable cloudresourcemanager.googleapis.com
serviceusage.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים 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 .
-
אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.
מפעילים את ממשקי ה-API של Resource Manager ו-Service Usage, אם הם עדיין לא מופעלים:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable cloudresourcemanager.googleapis.com
serviceusage.googleapis.com - Terraform כבר משולב ב-Cloud Shell. אם אתם צריכים להתקין את Terraform, תוכלו לעיין במסמכי התיעוד של HashiCorp Terraform.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להשלמת המדריך למתחילים, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בפרויקט:
- אדמין ב-Cloud Scheduler (
roles/cloudscheduler.admin) - עורך Pub/Sub (
roles/pubsub.editor)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
יצירת קובץ תצורה של Terraform
כדי להשתמש ב-Terraform עם Cloud Scheduler, צריך ליצור קובץ תצורה שמתאר את התשתית וליצור תוכנית ביצוע. לאחר מכן, מחילים את קובץ התצורה על הפלטפורמה או השירות כדי לבצע פעולות להקצאת התשתית.
כדי ליצור קובץ תצורה של Terraform בשם main.tf:
פותחים טרמינל ויוצרים ספרייה:
mkdir terraformעוברים לספרייה
terraform:cd terraform
מוסיפים קובץ חדש,
main.tf, לספרייה:nano main.tfמוסיפים לקובץ
main.tfאת המשאבים הבאים של ספק Terraform ל- Google Cloud:מפעילים את Cloud Scheduler API ואת Pub/Sub API:
יוצרים נושא Pub/Sub כמשאב שאליו אפליקציות לשליחת הודעות יכולות לשלוח הודעות:
כך נוצר נושא בשם
pubsub_topic.יוצרים מינוי כדי לקבל הודעות שפורסמו בנושא Pub/Sub:
יוצרים משימת cron באמצעות המשאב
google_cloud_scheduler_job:הארגומנטים הבאים משמשים בדוגמה:
-
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.
פותחים טרמינל ובספרייה
terraformמפעילים את Terraform:terraform initבודקים שהשינויים שאתם מציעים באמצעות Terraform תואמים לתוכנית הצפויה:
terraform planאפשר להתעלם מההערה לגבי אי שימוש באפשרות
-out.יוצרים את משימת ה-cron:
terraform applyבהנחיה Enter a value, מקלידים
yesכדי להמשיך ביצירת המשאבים.בודקים שנוצרה משימה:
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 מקבל הודעות מהמשימה.
שליפת הודעות Pub/Sub ממינוי:
gcloud pubsub subscriptions pull pubsub_subscription --limit 5אם לא נשלפו הודעות בהתחלה, מריצים שוב את הפקודה.
צפייה בתוצאות של הפעלת המשימה. הפלט אמור להיראות כך:
DATA: Hello world! MESSAGE_ID: 5028933846601543 ORDERING_KEY: ATTRIBUTES: DELIVERY_ATTEMPT: ACK_ID: RFAGFixdRkhRNxkIaFEOT14jPzUgKEUQAgVPAihdeTFXLkFacGhRDRlyfWB9[...]
הסרת המשאבים
כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, אתם צריכים למחוק את הפרויקט ב- Google Cloud יחד עם המשאבים.
- מחיקת הפרויקט ב- Google Cloud מפסיקה את החיוב על כל המשאבים שמשמשים את הפרויקט. הערה: כברירת מחדל, כל הקבצים בספריית הבית של Cloud Shell (למשל, קובצי Terraform) נשמרים בין סשנים.
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
לחלופין, אפשר למחוק את כל המשאבים שיצרתם באמצעות Terraform.
הפקודה
terraform destroyמסיימת את כל המשאבים שצוינו במצב Terraform. היא לא מוחקת משאבים שלא מנוהלים על ידי פרויקט Terraform הנוכחי. קובץ התצורה של Terraform לא נמחק. מידע נוסף זמין במאמר Destroy infrastructure.terraform destroy