תזמון פעולות של תחנות עבודה באמצעות Cloud Scheduler ו-Cloud Run

במדריך הזה נסביר איך להשתמש ב-Cloud Scheduler וב-Cloud Run כדי לבצע באופן אוטומטי פעולות כמו

  • תזמון של הגדלה והקטנה אוטומטיות של גודל המאגר של ההתחלה המהירה.
  • הפעלה אוטומטית של תחנות עבודה לפי לוח זמנים קבוע.

המדריך הזה יעזור לכם להגדיל או להקטין את גודל המאגר של התחלה מהירה כך שיתאים לשעות הפעילות הרגילות של העסק.

מטרות

  1. כתיבה ופריסה של שירות Cloud Run שמעדכן את גודל המאגר של ההפעלה המהירה בהגדרת תחנת עבודה.
  2. מגדירים משימה של Cloud Scheduler שתתזמן את השירות שנוצר בשלב 1 להפעלה בין השעות 9:00 ל-17:00, בימים שני עד שישי, כדי להתאים לשעות הפעילות לפי שעון החוף המערבי.

עלויות

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

  • Cloud Scheduler
  • Cloud Run

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

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

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

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

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

  7. כדי לאתחל את gcloud CLI, מריצים את הפקודה הבאה:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

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

  13. כדי לאתחל את gcloud CLI, מריצים את הפקודה הבאה:

    gcloud init

הכנת הסביבה

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

  1. מגדירים את המשתנים PROJECT_ID ו-REGION שמתכננים להשתמש בהם:

    PROJECT_ID=$PROJECT_ID
    REGION=$REGION
    

    מחליפים את $REGION בשם האזור שבו אתם מתכננים להשתמש – לדוגמה, us-central1.

    מידע נוסף על האזורים הזמינים מופיע במאמר מיקומים של Cloud Workstations.

ארכיטקטורה של אפליקציות

הפתרון הזה כולל את הרכיבים הבאים Google Cloud :

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

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

יצירת שירות Cloud Run

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

כדי לכתוב את אפליקציית ההאזנה של שרת האינטרנט ב-Python, מבצעים את הפעולות הבאות:

  1. יוצרים ספרייה חדשה בשם workstation-config-updater ועוברים אליה:

    mkdir workstation-config-updater
    cd workstation-config-updater
    
  2. יוצרים קובץ בשם app.py ומדביקים בו את הקוד הבא:

    import os, subprocess
    from flask import Flask, request, abort
    
    app = Flask(__name__)
    
    @app.route("/", methods=["POST"])
    def update():
        app.logger.info("Update request received.")
        data = request.json
        cluster = data["cluster"]
        region = data["region"]
        pool_size = data["pool-size"]
    
        path = os.path.join(app.root_path, "update_config.sh")
        o = subprocess.run(
            [path, cluster, region, pool_size],
            stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True
        )
        app.logger.info("Sending response:", o.stdout)
        return o.stdout
    
    if __name__ == "__main__":
        app.run(host="0.0.0.0", port=8080, debug=True)
    

    הקוד הזה יוצר שרת אינטרנט בסיסי שמקשיב ליציאה שמוגדרת על ידי משתנה הסביבה PORT ומריץ את הסקריפט update_config.sh.

  3. יוצרים קובץ בשם update_config.sh ומדביקים בו את הקוד הבא:

    #!/bin/bash
    
    set -e
    
    if [ $# -ne 3 ]
    then
       echo "Usage: update_config.sh CLUSTER REGION POOL_SIZE"
       exit 1
    fi
    
    CLUSTER=$1
    REGION=$2
    POOL_SIZE=$3
    
    # list workstation configs
    echo "Attempting to list workstation configs in cluster $CLUSTER and region $REGION ..."
    for CONFIG in $(gcloud  workstations configs list --cluster $CLUSTER --region $REGION --format="value(NAME)"); do
        echo "Attempting to update Quick Pool Size to $POOL_SIZE for config $CONFIG ..."
        # update the workstation config pool-size
        RET=$(gcloud workstations configs update $CONFIG --cluster $CLUSTER  --region $REGION --pool-size=$POOL_SIZE)
        if [[ $RET -eq 0 ]]; then
            echo "Workstation config $CONFIG updated."
        else
            echo "Workstation config $CONFIG update failed."
        fi
    done
    
    

    הסקריפט הזה משתמש בפקודות gcloud כדי להציג רשימה של כל WorkstationConfig באשכול נתון ולעדכן את גודל המאגר של ההפעלה המהירה ל-POOL_SIZE.

  4. יוצרים קובץ בשם Dockerfile ומדביקים בו את הקוד הבא:

    FROM google/cloud-sdk
    
    RUN apt-get update && apt-get install -y python3-pip python3
    
    # Copy local code to the container image.
    ENV APP_HOME /app
    WORKDIR $APP_HOME
    COPY . ./
    
    RUN /bin/bash -c 'ls -la; chmod +x ./update_config.sh'
    
    # Install production dependencies.
    RUN pip3 install Flask gunicorn
    
    # Run the web service on container startup
    CMD exec gunicorn --bind :8080 --workers 1 --threads 8 app:app
    

    הקוד הזה מכניס את האפליקציה לקונטיינר כדי להכין אותה לפריסה ב-Cloud Run.

פריסה ב-Cloud Run

כדי לפרוס ל-Cloud Run, מריצים את הפקודה הבאה:

gcloud run deploy --source . --project $PROJECT_ID --region $REGION
  1. כשמופיעה בקשה להזין את שם השירות, מקישים על Enter כדי לאשר את שם ברירת המחדל workstation-config-updater.

  2. אם מוצגת בקשה להפעיל את Artifact Registry API או לאפשר יצירה של מאגר Artifact Registry, מקישים על y.

  3. כשמופיעה בקשה לאפשר הפעלות לא מאומתות, מקישים על n.

  4. מחכים עד שהפריסה תסתיים.

  5. מעתיקים את כתובת ה-URL של השירות כשהיא מוצגת בפורמט הבא:

SERVICE_URL=$SERVICE_URL

הגדרת חשבון שירות להפעלת Cloud Run

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

כדי להפעיל את השירות workstation-config-updater, צריך להגדיר ב-Cloud Scheduler חשבון שירות עם פרטי הכניסה המתאימים.

הגדרת חשבון השירות

  1. אם עדיין אין לכם חשבון שירות שבו אתם רוצים להשתמש למשימות של Cloud Scheduler, אתם צריכים ליצור חשבון שירות חדש.

    gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
        --description="$DESCRIPTION" \
        --display-name="$DISPLAY_NAME"
  2. מוסיפים את הקישור הנדרש של תפקיד IAM כדי לאפשר לחשבון השירות להפעיל את Cloud Run.

    gcloud run services add-iam-policy-binding workstation-config-updater \
        --member=serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com \
        --region $REGION \
        --role=roles/run.invoker

יצירת הגדרות אישיות של Cloud Scheduler עם אימות

  1. יוצרים משימה ומציינים את URL שהעתקתם מפריסה ל-Cloud Run:

    gcloud scheduler jobs create http workstation-pool-increaser-cron \
        --http-method=POST \
        --location=us-central1 \
        --schedule="0 9 * * 1-5" \
        --time-zone="America/Los_Angeles" \
        --headers "Content-Type=application/json" \
        --message-body='{"cluster":"$CLUSTER", "region":"$REGION", "pool-size": "2"}' \
        --uri=$SERVICE_URL \
        --oidc-service-account-email=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com

    הפקודה הזו מתזמנת עבודה להגדלת גודל מאגר ההתחלה המהירה עבור כל WorkstationConfigs ב-WorkstationCluster $CLUSTER ל-2 בשעה 9:00 לפי שעון החוף המערבי מיום שני עד יום שישי.

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

  2. באופן דומה, כדי להקטין את גודל המאגר של תצורת תחנת העבודה ל-0 בסוף יום העבודה, מריצים את הפקודה הבאה

    gcloud scheduler jobs create http workstation-pool-decreaser-cron \
        --http-method=POST \
        --location=$REGION \
        --schedule="0 17 * * 1-5" \
        --time-zone="America/Los_Angeles" \
        --headers "Content-Type=application/json" \
        --message-body='{"cluster":"$CLUSTER", "region":"$REGION", "pool-size": "0"}' \
        --uri=$SERVICE_URL \
        --oidc-service-account-email=$SERVICE-ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

אופציונלי: אימות המשרות

כדי לוודא שהעבודות פועלות כמצופה, אפשר לאמת אותן.

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

    כניסה ל-Cloud Scheduler

    workstation-pool-increaser-cron אמורה להופיע ברשימת המשרות.

  2. בשורה של משימה workstation-pool-increaser-cron, לוחצים על פעולות > הפעלת משימה בכוח.

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

  3. בעמודה Status of last execution (סטטוס ההפעלה האחרונה), הסטטוס Success מציין שהפעלתם את העבודה בהצלחה.

כדי לוודא שההגדרות של תחנות העבודה עודכנו:

  1. עוברים לדף Workstation Configurations במסוף Google Cloud .

    כניסה להגדרות של תחנות עבודה

  2. מוודאים שגודל המאגר של ההתחלה המהירה הוא 2.

  3. צפייה ביומנים של שירות Cloud Run.

הסרת המשאבים

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

הסרת פרויקט הבדיקה

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

מחיקת המאגר

ב-Cloud Run לא מחייבים אתכם כשהשירות שפרסתם לא נמצא בשימוש. עם זאת, יכול להיות שעדיין תחויבו על אחסון קובץ האימג' של הקונטיינר ב-Artifact Registry. כדי למחוק מאגרי Artifact Registry, פועלים לפי השלבים שמפורטים במאמר מחיקת מאגרים במסמכי התיעוד של Artifact Registry.

מחיקת השירות

שירותי Cloud Run לא צוברים עלויות עד שהם מקבלים בקשות. כדי למחוק את שירות Cloud Run, פועלים לפי אחד מהשלבים הבאים:

המסוף

כדי למחוק שירות:

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

    כניסה ל-Cloud Run

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

  3. לוחצים על Delete. כל הגרסאות של השירות יימחקו.

gcloud

כדי למחוק שירות, מריצים את הפקודה הבאה:

gcloud run services delete SERVICE --region REGION

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE: השם של השירות.
  • REGION: Google Cloud האזור של השירות.

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

כשמוחקים פרויקט ב- Google Cloud , החיוב על כל המשאבים באותו פרויקט מופסק. כדי לשחרר את כל Google Cloud המשאבים בפרויקט, פועלים לפי השלבים הבאים:

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

    כניסה לדף Manage resources

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

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

כדי למחוק משאבים ספציפיים ב-Cloud Scheduler,

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

    כניסה ל-Cloud Scheduler

  2. לוחצים על תיבות הסימון לצד המשרות.

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

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

  • כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.