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

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

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

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

מטרות

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

עלויות

במסמך הזה משתמשים ברכיבים הבאים של 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, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    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, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    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. כשהכתובת של השירות מוצגת בפורמט הבא, מעתיקים אותה:

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

    הפקודה הזו מתזמנת משימה להגדלת גודל המאגר של ההפעלה המהירה ל-2 בכל WorkstationConfigs ב-WorkstationCluster $CLUSTER בשעה 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, לוחצים על Actions > Force a job run.

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

  3. בעמודה Status of last execution, הסטטוס Success מציין שהמשימה הופעלה בהצלחה.

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

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

    כניסה לדף Workstation Configurations

  2. מוודאים שהערך של Quick start pool size הוא 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. נכנסים לדף Manage resources במסוף Google Cloud .

    כניסה לדף Manage resources

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

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

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

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

    כניסה ל-Cloud Scheduler

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

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

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

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