תזמון תהליכי עבודה

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

מטרות

  1. ליצור ולפרוס תהליך עבודה שיכול לקבל ארגומנטים של זמן ריצה.
  2. יוצרים משימה ב-Cloud Scheduler שמפעילה את תהליך העבודה ומבצעת אותו כל 5 דקות, ומעבירה ארגומנטים בפורמט JSON.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

  1. מגדירים את הסביבה ל-Cloud Scheduler, כולל יצירת אפליקציית App Engine.
  2. מפעילים את Workflows API.

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

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    להפעלת ה-API

  3. מגדירים את מיקום ברירת המחדל שבו משתמשים במדריך הזה:
      gcloud config set workflows/location REGION
    מחליפים את REGION במיקום נתמך של Workflows לבחירתכם.
  4. יוצרים חשבון שירות לשימוש ב-Workflows, לדוגמה, sa-name.
      gcloud iam service-accounts create sa-name
  5. מקצים לחשבון השירות את התפקיד workflows.invoker כדי שלחשבון תהיה הרשאה להפעיל את תהליך העבודה:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/workflows.invoker"
  6. מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud .
  7. מקצים לחשבון השירות את התפקיד logging.logWriter.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/logging.logWriter"

יצירת תהליך עבודה שמקבל ארגומנטים של זמן ריצה

הגדרת תהליך עבודה מורכבת מסדרה של שלבים שמתוארים באמצעות התחביר של Workflows, שאפשר לכתוב בפורמט YAML או JSON. אחרי שיוצרים תהליך עבודה, פורסים אותו כדי שיהיה זמין להרצה.

המסוף

  1. נכנסים לדף Workflows במסוף Google Cloud :

    כניסה לדף Workflows

  2. לוחצים על יצירה.

  3. מזינים myFirstWorkflow כשם של תהליך העבודה החדש.

  4. בוחרים באזור us-east1.

  5. בוחרים את חשבון השירות שיצרתם קודם.

  6. לוחצים על הבא.

  7. בעורך תהליכי העבודה, מזינים את ההגדרה הבאה לתהליך העבודה.

    YAML

    main:
      params: [args]
      steps:
        - step1:
            assign:
              - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"}
        - step2:
            return: ${outputVar}

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "step1": {
              "assign": [
                {
                  "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}"
                }
              ]
            }
          },
          {
            "step2": {
              "return": "${outputVar}"
            }
          }
        ]
      }
    }
      

    תהליך העבודה הזה מחזיר את הודעת הפתיחה 'שלום' לאדם שהשם הפרטי ושם המשפחה שלו מועברים כארגומנטים בזמן הריצה.

  8. לוחצים על פריסה.

gcloud

  1. פותחים טרמינל.
  2. שומרים את הגדרת תהליך העבודה הבאה כקובץ YAML או JSON, כמו myFirstWorkflow.yaml או myFirstWorkflow.json.

    YAML

    main:
      params: [args]
      steps:
        - step1:
            assign:
              - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"}
        - step2:
            return: ${outputVar}

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "step1": {
              "assign": [
                {
                  "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}"
                }
              ]
            }
          },
          {
            "step2": {
              "return": "${outputVar}"
            }
          }
        ]
      }
    }
      

    תהליך העבודה הזה מחזיר את הודעת הפתיחה 'שלום' לאדם שהשם הפרטי ושם המשפחה שלו מועברים כארגומנטים בזמן הריצה.

  3. מריצים את הפקודה הבאה כדי לפרוס את תהליך העבודה:

    gcloud workflows deploy myFirstWorkflow \
        --location=us-east1 \
        --source=myFirstWorkflow.yaml_OR_json \
        --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com

    מחליפים את yaml_OR_json ב-yaml או ב-json, בהתאם לפורמט של קובץ ההגדרה של Workflows שיצרתם קודם.

תזמון תהליך העבודה

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

המסוף

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

    כניסה ל-Cloud Scheduler

  2. לוחצים על יצירת משימה.

  3. מגדירים את Name לערך my-workflow-job.

  4. בשדה Region, בוחרים באפשרות us-east1 (South Carolina).

  5. בקטע תדירות, מזינים:

    */5 * * * *
    הפעולה הזו תגרום להפעלת העבודה כל 5 דקות. ההגדרה של המרווח היא בפורמט unix-cron.

  6. בשדה אזור זמן, בוחרים מדינה ואזור זמן.

    לדוגמה, בוחרים בארצות הברית ובלוס אנג'לס או בשעון קיץ, החוף המערבי בארה"ב (PDT).

  7. לוחצים על Continue.

  8. בשדה Target type, בוחרים באפשרות HTTP.

  9. בקטע כתובת URL, מזינים:

    https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-east1/workflows/myFirstWorkflow/executions
    

  10. משאירים את שיטת ה-HTTP כברירת המחדל POST.

  11. מוסיפים את שתי כותרות ה-HTTP הבאות:

    • שם: Content-Type וערך: application/octet-stream
    • שם: User-Agent וערך: Google-Cloud-Scheduler
  12. בשדה Body (גוף), מזינים:

    {"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
    

    הפעולה הזו מעבירה קידוד JSON של הארגומנטים של תהליך העבודה. במקרה הזה, השם הפרטי, 'Sherlock', ושם המשפחה, 'Holmes'. המירכאות הכפולות בתוך המחרוזת מסומנות בתו בריחה (escape) באמצעות לוכסנים הפוכים (\).

  13. בקטע Auth header (כותרת אימות), בוחרים באפשרות Add OAuth token (הוספת אסימון OAuth).

  14. מזינים את חשבון השירות שיצרתם קודם.

    sa-name@PROJECT_ID.iam.gserviceaccount.com
    
    לא צריך לציין את ההיקף כי נעשה שימוש בברירת המחדל של https://www.googleapis.com/auth/cloud-platform.

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

gcloud

כדי לתזמן משימה בשם my-workflow-job, מזינים את הפקודה הבאה:

gcloud scheduler jobs create http my-workflow-job \
    --location="us-east1" \
    --schedule="*/5 * * * *" \
    --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-east1/workflows/myFirstWorkflow/executions" \
    --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \
    --time-zone="America/Los_Angeles" \
    --oauth-service-account-email="sa-name@PROJECT_ID.iam.gserviceaccount.com"

ההגדרה של המרווח מתבצעת באמצעות פורמט unix-cron.

הדגל message-body משמש להעברת קידוד JSON של הארגומנטים של זרימת העבודה. במקרה הזה, השם הפרטי, 'Sherlock', והשם המשפחה, 'Holmes'. המירכאות הכפולות בתוך המחרוזת מסומנות בתו בריחה (escape) באמצעות לוכסנים הפוכים (\).

מעכשיו, תהליך העבודה יופעל כל 5 דקות.

מידע נוסף על הדגלים gcloud scheduler ועל אופן ההחלה של רישום שיחות כדי שכל שלב בשיחה במהלך ההפעלה של תהליך העבודה יירשם ביומן, זמין במאמר תזמון תהליך עבודה ובgcloud הפניה.

מריצים את העבודה ומאמתים את התוצאות

המסוף

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

    כניסה ל-Cloud Scheduler

    אם המשרה לא מוצגת, יכול להיות שתצטרכו לרענן את הדף.

  2. בעמודה 'פעולות' של העבודה שנקראת my-workflow-job, לוחצים על הפעלה מיידית.

    הערך של תוצאה אמור להתעדכן להצלחה.

  3. נכנסים לדף Workflows במסוף Google Cloud :

    כניסה לדף Workflows

  4. ברשימת תהליכי העבודה, לוחצים על myFirstWorkflow כדי לפתוח את דף הפרטים שלו.

    מצב ההפעלה של תהליך העבודה צריך להיות Succeeded (הושלם).

  5. לוחצים על מזהה ההרצה של תהליך העבודה כדי לפתוח את דף הפרטים ולראות את התוצאות של תהליך העבודה בחלונית הפלט.

    הפלט צריך להיות 'Hello, Sherlock Holmes!‎'.

gcloud

  1. מריצים את המשימה של Cloud Scheduler כדי להפעיל את תהליך העבודה:

    gcloud scheduler jobs run my-workflow-job --location="us-east1"
    
  2. מאחזרים את מזהה ההרצה של תהליך העבודה:

    gcloud workflows executions list myFirstWorkflow
    

    הפלט אמור להיראות כך, עם מזהה הביצוע באותיות מודגשות:

    projects/316710615161/locations/us-east1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
  3. אחזור התוצאות של הרצת תהליך העבודה:

    gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow

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

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

    argument: '{"firstName":"Sherlock","lastName":"Holmes"}'
    endTime: '2021-09-09T15:15:00.869350639Z'
    name: projects/316710615161/locations/us-east1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
    result: '"Hello, Sherlock Holmes!"'
    startTime: '2021-09-09T15:15:00.839175480Z'
    state: SUCCEEDED
    workflowRevisionId: 000001-4f9

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

הסרת המשאבים

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

מחיקת הפרויקט

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.

כדי למחוק את הפרויקט:

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

מחיקת המשימה ב-Cloud Scheduler

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

    כניסה ל-Cloud Scheduler

  2. מסמנים את התיבה לצד המשרה.

  3. לוחצים על מחיקה בחלק העליון של הדף ומאשרים את המחיקה.

מחיקת תהליך העבודה Workflows

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

    כניסה לדף Workflows

  2. בוחרים את תהליך העבודה.

  3. לוחצים על מחיקה בחלק העליון של הדף, מקלידים את שם תהליך העבודה ומאשרים את המחיקה.

השבתת אפליקציית App Engine

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

  1. עוברים לדף Application settings במסוף Google Cloud .

    מעבר להגדרות האפליקציה

  2. לוחצים על השבתת האפליקציה.

  3. פועלים לפי ההנחיות.

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