הוספת משימה של App Engine לתור משימות של Cloud Tasks

שירות Cloud Tasks מאפשר לשלוח משימות אסינכרוניות לשירותי App Engine כדי לעבד עומסי עבודה ברקע. במדריך למתחילים הזה משתמשים ב-Cloud Tasks API כדי ליצור משימת App Engine ולהוסיף אותה לתור משימות של Cloud Tasks.

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

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

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

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

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

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

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (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. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  7. מפעילים את Cloud Resource Manager API ואת Cloud Tasks API, אם הם עדיין לא מופעלים:

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

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

    gcloud services enable cloudresourcemanager.googleapis.com tasks.googleapis.com
  8. אם אתם משתמשים במעטפת מקומית, צריך ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:

    gcloud auth application-default login

    אם אתם משתמשים ב-Cloud Shell, אתם לא צריכים לעשות את זה.

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

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

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

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

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

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

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (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 .

  13. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  14. מפעילים את Cloud Resource Manager API ואת Cloud Tasks API, אם הם עדיין לא מופעלים:

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

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

    gcloud services enable cloudresourcemanager.googleapis.com tasks.googleapis.com
  15. אם אתם משתמשים במעטפת מקומית, צריך ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:

    gcloud auth application-default login

    אם אתם משתמשים ב-Cloud Shell, אתם לא צריכים לעשות את זה.

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

  16. חשבון השירות שמוגדר כברירת מחדל ב-App Engine נוצר באופן אוטומטי כשמשתמשים ב-App Engine. אפשר להשתמש בחשבון השירות הזה כשמנסים את ההפעלה המהירה הזו. עם זאת, בהתאם להגדרות של מדיניות הארגון, יכול להיות שחשבון השירות שמוגדר כברירת מחדל לא יקבל אוטומטית את התפקיד Editor בפרויקט. במקרה כזה, צריך להקצות לחשבון השירות את התפקידים הבאים:
    1. אדמין של Artifact Registry (roles/artifactregistry.admin)
    2. כותב ב-Artifact Registry עם יצירה בדחיפה (roles/artifactregistry.createOnPushWriter)
    3. אדמין ב-Compute‏ (roles/compute.admin)
    4. כתיבת יומנים (roles/logging.logWriter)
    5. צפייה באובייקטים באחסון (roles/storage.objectViewer)

הוספת אפליקציית App Engine

כשמטרגטים משימה ב-App Engine, ולפני שפורסים אפליקציה בסביבת ברירת המחדל ב-App Engine, צריך להוסיף אפליקציית App Engine לפרויקט.

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

    מעבר אל App Engine

  2. בתיבת הדו-שיח Welcome to App Engine (ברוכים הבאים ל-App Engine), מבצעים אחת מהפעולות הבאות:

    • אם כבר יצרתם אפליקציית App Engine ומוצגת ההודעה Your App Engine application has been created, אתם יכולים לדלג על שאר השלבים בקטע הזה ולהמשיך לשלבים בקטע התקנה ופריסה של הדוגמה.

      או

    • אם עדיין לא יצרתם אפליקציית App Engine, לוחצים על Create application וממשיכים לשאר השלבים בקטע הזה.

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

    שימו לב שהתפקידים europe-west ו-us-central נקראים europe-west1 ו-us-central1 בפקודות של Cloud Tasks.

  4. לא בוחרים חשבון שירות, המערכת משתמשת בחשבון השירות שמוגדר כברירת מחדל ב-App Engine.

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

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

  6. אל תורידו את Cloud SDK, אלא לחצו על אעשה את זה אחר כך.

    אמורה להופיע ההודעה Your App Engine application has been created (האפליקציה שלך ב-App Engine נוצרה).

התקנה ופריסה של הדוגמה

הדוגמה ל-Node.js שבה נעשה שימוש בתחילת העבודה הזו מורכבת משני קבצים: createTask.js מופעל באופן מקומי ככלי של שורת פקודה כדי ליצור משימות ולהוסיף אותן לתור המשימות, ו-server.js נפרס ב-App Engine כשירות worker לעיבוד המשימה.

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

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    
  2. עוברים לספרייה שמכילה את הקוד לדוגמה.

    cd nodejs-docs-samples/cloud-tasks/snippets
    
  3. מתקינים את כל יחסי התלות באמצעות מנהל חבילות של Node.js.

    אפשר להשתמש ב-NPM:

    npm install
    

    אפשר גם להשתמש ב-Yarn:

    yarn install
    
  4. פורסים את שירות ה-worker‏ (server.js) בסביבה הרגילה של App Engine.

    gcloud app deploy app.yaml
    
  5. מוודאים שהאפליקציה שמכילה את השירות פועלת.

    gcloud app browse
    
  6. בדפדפן, עוברים לקישור שסופק. לדוגמה:

    https://PROJECT_ID.uc.r.appspot.com/
    

    האפשרות Hello, World! תוצג.

יצירת תור משימות ב-Cloud Tasks

משתמשים בפקודה gcloud tasks queues create כדי ליצור את התור בסביבה שהכנתם.

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

    gcloud tasks queues create QUEUE_NAME \
        --log-sampling-ratio=1.0 \
        --location=REGION
    

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

    • ‫QUEUE_NAME: שם לתור של Cloud Tasks
    • ‫REGION: האזור שבו פרסתם את האפליקציה
  2. מחכים שהתור יופעל ומוודאים שהוא נוצר בהצלחה.

    gcloud tasks queues describe QUEUE_NAME \
        --location=REGION
    

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

     name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_NAME
     rateLimits:
       maxBurstSize: 100
       maxConcurrentDispatches: 1000
       maxDispatchesPerSecond: 500.0
     retryConfig:
       maxAttempts: 100
       maxBackoff: 3600s
       maxDoublings: 16
       minBackoff: 0.100s
     state: RUNNING
    

הוספת משימה לתור משימות ב-Cloud Tasks

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

  1. מגדירים את משתני הסביבה הבאים. הלקוח משתמש במידע הזה כדי ליצור את הבקשה.

    export PROJECT_ID=PROJECT_ID
    export LOCATION_ID=REGION
    export QUEUE_ID=QUEUE_NAME
    
  2. יוצרים משימה עם מטען ייעודי (payload) של hello ומוסיפים את המשימה לתור. המטען הייעודי (payload) יכול להיות כל נתון מהבקשה ששירות ה-worker צריך כדי לעבד את המשימה.

    node createTask.js $PROJECT_ID $QUEUE_ID $LOCATION_ID hello
    
  3. כדי לוודא שהמשימה בוצעה, מציגים את היומנים של שירות ה-worker.

    gcloud app logs read
    

    היומנים אמורים להיראות כך:

    2024-06-20 15:00:00 default[20240620t143852]  "POST /log_payload HTTP/1.1" 200
    2024-06-20 15:00:00 default[20240620t143852]  App listening on port 8081
    2024-06-20 15:00:00 default[20240620t143852]  Press Ctrl+C to quit.
    2024-06-20 15:00:00 default[20240620t143852]  Received task with payload: hello
    

הסרת המשאבים

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

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

gcloud projects delete PROJECT_ID

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

  1. מוחקים את התור ב-Cloud Tasks:

    gcloud tasks queues delete QUEUE_NAME \
        --location=REGION
    
  2. משביתים את האפליקציה של App Engine.

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