הפעלת תהליך עבודה מ-Google Sheets

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

במדריך הזה נדגים איך להפעיל תהליכי עבודה מ-Sheets.

מטרות

במדריך הזה תלמדו:

  1. אפשר להשתמש ב-Google Forms, פתרון מבוסס-ענן ליצירת שאלונים וסקרים, כדי ליצור טופס שאפשר לשלוח דרכו בקשות ליצירת מכונות וירטואליות (VM).
  2. לקשר גיליון אלקטרוני ב-Google Sheets לטופס כדי לאסוף ולשמור את התשובות.
  3. אפשר להשתמש ב-Google Apps Script, פלטפורמת JavaScript מבוססת-ענן שמאפשרת ליצור, לקרוא ולערוך מוצרים של Google Workspace באופן פרוגרמטי, כדי להפעיל תהליך עבודה בכל פעם שבקשה מאושרת באמצעות עדכון של הגיליון האלקטרוני.
  4. פריסת תהליך עבודה שמפעיל את המחבר של Compute Engine API ויוצר מכונה וירטואלית ב-Compute Engine על סמך המפרטים שנאספו באמצעות הטופס. מחברים מפשטים את הקריאה לממשקי API אחרים Google Cloud מידע נוסף על מחברים של Workflows
  5. בודקים את התהליך כולו ומוודאים שמכונת VM נוצרת כמצופה.

עלויות

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

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

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

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

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

אפשר להריץ חלק מהפקודות הבאות במסוף Google Cloud או באמצעות Google Cloud CLI בטרמינל או ב-Cloud Shell.

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

המסוף

  1. בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.

    כניסה לדף לבחירת הפרויקט

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

  3. מפעילים את ממשקי ה-API של Compute Engine ו-Workflows.

    הפעלת ממשקי ה-API

  4. חשוב שתשימו לב לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, כי תצטרכו לקשר אותו לתהליך העבודה במדריך הזה לצורך בדיקה. בפרויקטים חדשים שבהם מופעל Compute Engine API, חשבון השירות הזה נוצר עם תפקיד העריכה הבסיסי ב-IAM, ובפורמט האימייל הבא:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    אפשר לראות את מספר הפרויקט בדף Welcome במסוף Google Cloud .

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

gcloud

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

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

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

  3. מפעילים את ממשקי ה-API של Compute Engine ו-Workflows.

    gcloud services enable \
        compute.googleapis.com \
        workflows.googleapis.com
  4. חשוב שתשימו לב לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, כי תצטרכו לקשר אותו לתהליך העבודה במדריך הזה לצורך בדיקה. בפרויקטים חדשים שבהם מופעל Compute Engine API, חשבון השירות הזה נוצר עם תפקיד העריכה הבסיסי ב-IAM, ובפורמט האימייל הבא:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    אפשר לאחזר את מספר הפרויקט:

    gcloud projects describe PROJECT_ID

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

יצירת טופס לבקשת מכונות וירטואליות

ליצור טופס שאפשר להשתמש בו כדי לשלוח בקשה ליצירת מכונה וירטואלית (VM) ב-Compute Engine. כברירת מחדל, כשיוצרים טופס באמצעות Google Forms, הוא נשמר ב-Google Drive.

  1. עוברים אל forms.google.com.
  2. לוחצים על טופס חדש Plus.

    ייפתח טופס חדש.

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

    לצפייה בטופס לדוגמה

    דוגמה לטופס לבקשה ליצירת מכונה וירטואלית ב-Google Cloud
    שם המכונה

    טקסט של תשובה קצרה

    תחום (zone)

    תפריט נפתח:

    1. us-central1-a
    2. us-central1-b
    3. us-central1-c
    4. us-central1-f
    סוג

    תפריט נפתח:

    1. e2-micro
    2. e2-small
    3. e2-medium
    4. e2-standard-2
    5. e2-standard-4
    גודל הדיסק (GB)

    טקסט של תשובה קצרה

    מערכת הפעלה

    תפריט נפתח:

    1. debian-10
    2. centos-stream-9
    3. cos-93-lts
    4. cos-97-lts
  4. מפעילים את האפשרות לאיסוף כתובות אימייל כדי לתעד את כתובות האימייל של אנשים שממלאים את הטופס:
    1. לוחצים על הגדרות.
    2. מרחיבים את הקטע Responses (תשובות).
    3. לוחצים על המתג איסוף כתובות אימייל.

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

  1. פותחים את הטופס ב-Forms.
  2. לוחצים על תשובות.
  3. לוחצים על קישור ל-Sheets.
  4. בתיבת הדו-שיח בחירת יעד לתשובות, בוחרים באפשרות יצירת גיליון אלקטרוני חדש.
  5. לוחצים על יצירה.

    הגיליון האלקטרוני המקושר ייפתח.

  6. בעמודה H, מוסיפים את הכותרת Approved? (אושר?).

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

    הגיליון האלקטרוני אמור להיראות כך:

    דוגמה לגיליון אלקטרוני מקושר לאיסוף בקשות

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

הרחבת Google Sheets באמצעות Apps Script

‫Apps Script מאפשר ליצור, לקרוא ולערוך גיליונות אלקטרוניים באופן פרוגרמטי. רוב הסקריפטים שמיועדים ל-Sheets מבצעים מניפולציות במערכים כדי ליצור אינטראקציה עם התאים, השורות והעמודות בגיליון אלקטרוני. במאמר הפעלה מהירה של פונקציה בהתאמה אישית יש מבוא לשימוש ב-Apps Script עם Sheets.

  1. כדי ליצור פרויקט Apps Script מ-Sheets:

    1. פותחים את הגיליון האלקטרוני ב-Sheets.
    2. בוחרים באפשרות תוספים > Apps Script.
    3. בכלי לעריכת סקריפטים, לוחצים על Untitled project (פרויקט ללא שם).
    4. נותנים שם לפרויקט ולוחצים על שינוי השם.

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

    פרויקט סקריפט מייצג אוסף של קבצים ומשאבים של Apps Script. לקובצי קוד בפרויקט סקריפט יש סיומת .gs.

  2. אתם יכולים להשתמש ב-Apps Script כדי לכתוב פונקציות בהתאמה אישית שאפשר להשתמש בהן ב-Sheets בדיוק כמו בפונקציה מובנית. פונקציות בהתאמה אישית נוצרות באמצעות JavaScript רגיל. כדי ליצור פונקציה:

    1. פותחים את פרויקט Apps Script.
    2. לוחצים על עריכה .
    3. קובץ סקריפט מופיע כקובץ פרויקט בשם Code.gs. כדי לערוך את הקובץ, בוחרים אותו.
    4. מחליפים את הקוד בכלי לעריכת סקריפטים בקוד הבא, שקורא את הנתונים בגיליון האלקטרוני ומעביר אותם כקלט להרצת תהליך עבודה:

      const PROJECT_ID = "your-project-id";
      const REGION = "us-central1";
      const WORKFLOW = "create-vm-from-form";
      
      function handleEdit(e) {
        var range = e.range.getA1Notation();
        var sheet = e.source;
      
        if (range.length > 1 && range[0] === 'H') {
          if (e.value == "TRUE") {
            Logger.log("Approved checkbox: true");
      
            var row = range.slice(1)
            var email = sheet.getRange('B' + row).getCell(1, 1).getValue()
            var vmName = sheet.getRange('c' + row).getCell(1, 1).getValue()
            var zone = sheet.getRange('D' + row).getCell(1, 1).getValue()
            var machineType = sheet.getRange('E' + row).getCell(1, 1).getValue()
            var diskSize = sheet.getRange('F' + row).getCell(1, 1).getValue()
            var imageFamily = sheet.getRange('G' + row).getCell(1, 1).getValue()
            var imageProject = imageFamily.substring(0, imageFamily.indexOf('-')) + "-cloud"
      
            const executionPayload = {
              "argument": "{\"diskSize\": \"" + diskSize + "\", \"email\": \"" + email + "\", \"imageFamily\": \"" + imageFamily + "\", \"imageProject\": \"" + imageProject + "\", \"machineType\": \"" + machineType + "\", \"vmName\": \"" + vmName + "\", \"zone\": \"" + zone +  "\"}"
            };
      
            approve(executionPayload);
          }
          else {
            Logger.log("Approved checkbox: false");
          }
        }
      }
      
      function approve(executionPayload) {
        const headers = {
          "Authorization": "Bearer " + ScriptApp.getOAuthToken()
        };
      
        const params = {
          "method": 'post',
          "contentType": 'application/json',
          "headers": headers,
          "payload": JSON.stringify(executionPayload)
        };
      
        const url = "https://workflowexecutions.googleapis.com/v1/projects/" + PROJECT_ID + "/locations/" + REGION + "/workflows/" + WORKFLOW + "/executions";
      
        Logger.log("Workflow execution request to " + url);
        var response = UrlFetchApp.fetch(url, params);
        Logger.log(response);
      }
    5. מחליפים את your-project-id במזהה הפרויקט ב- Google Cloud .

      מזהה הפרויקט מופיע בדף Welcome במסוף Google Cloud .

    6. לוחצים על סמל השמירה .

  3. טריגרים שאפשר להתקין ב-Apps Script מאפשרים להריץ פונקציה מסוימת בפרויקט סקריפט כשמתקיימים תנאים מסוימים, למשל כשפותחים או עורכים גיליון אלקטרוני. כדי ליצור טריגר:

    1. פותחים את פרויקט Apps Script.
    2. לוחצים על Triggers (טריגרים) .
    3. לוחצים על Add Trigger (הוספת טריגר).
    4. בתיבת הדו-שיח Add Trigger for YOUR_PROJECT_NAME (הוספת טריגר ל-YOUR_PROJECT_NAME), מגדירים את הטריגר:
      1. ברשימה Choose which function to run (בחירת הפונקציה להפעלה), בוחרים באפשרות handleEdit.
      2. ברשימה Choose which deployment should run (בחירת הפריסה להפעלה), בוחרים באפשרות Head (ראשי).
      3. ברשימה בחירת מקור אירועים, בוחרים באפשרות מגיליון אלקטרוני.
      4. ברשימה Select event type (בחירת סוג האירוע), בוחרים באפשרות On edit (בעריכה).
      5. ברשימה הגדרות התראות על כשל, בוחרים באפשרות התראה יומית.
    5. לוחצים על Save.
    6. אם מוצגת בקשה לבחירת חשבון Google, בוחרים את החשבון המתאים ולוחצים על אישור.

      ההרשאה הזו מאפשרת לפרויקט Apps Script לראות, לערוך, ליצור ולמחוק את הגיליונות האלקטרוניים שלכם ב-Sheets, וגם להתחבר לשירות חיצוני.

  4. קובץ המניפסט של פרויקט Apps Script הוא קובץ JSON שמצוינים בו פרטי פרויקט בסיסיים ש-Apps Script צריך כדי להריץ סקריפט בהצלחה. שימו לב: הכלי לעריכת סקריפטים של Apps Script מסתיר כברירת מחדל את קובצי המניפסט כדי להגן על הגדרות הפרויקט של Apps Script. עורכים את קובץ המניפסט:

    1. פותחים את פרויקט Apps Script.
    2. לוחצים על הגדרות הפרויקט .
    3. מסמנים את התיבה הצגת קובץ המניפסט 'appsscript.json' בעורך.
    4. לוחצים על עריכה .
    5. קובץ המניפסט מופיע כקובץ פרויקט בשם appsscript.json. כדי לערוך את הקובץ, בוחרים אותו.
    6. השדה oauthScopes מציין מערך של מחרוזות. כדי להגדיר את היקפי ההרשאות שבהם הפרויקט משתמש, מוסיפים מערך עם ההיקפים שרוצים לתמוך בהם. לדוגמה:

      {
        "timeZone": "America/Toronto",
        "dependencies": {
        },
        "exceptionLogging": "STACKDRIVER",
        "runtimeVersion": "V8",
        "oauthScopes": [
          "https://www.googleapis.com/auth/script.external_request",
          "https://www.googleapis.com/auth/cloud-platform",
          "https://www.googleapis.com/auth/spreadsheets"
        ]
      }

      ההגדרה הזו קובעת את ההיקפים המפורשים הבאים:

      • התחברות לשירות חיצוני
      • קריאה, עריכה, הגדרה ומחיקה של הנתונים שלך ב- Google Cloud , וקריאת כתובת האימייל של החשבון שלך ב-Google
      • הצגה, עריכה, יצירה ומחיקה של כל הגיליונות האלקטרוניים שלכם ב-Sheets
    7. לוחצים על סמל השמירה .

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

פריסת תהליך עבודה שמופעל כשבקשה ליצירת מופע של מכונה וירטואלית מאושרת. תהליך העבודה קורא למחבר Compute Engine API כדי ליצור מכונה וירטואלית ב-Compute Engine על סמך המפרטים שנאספו באמצעות הטופס.

המסוף

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

    כניסה לדף Workflows

  2. לוחצים על Create.

  3. מזינים שם לתהליך העבודה החדש: create-vm-from-form.

  4. ברשימה Region, בוחרים באפשרות us-central1 (Iowa).

  5. בקטע חשבון שירות, בוחרים את חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine‏ (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

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

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

    main:
       params: [input]
       steps:
       - init:
           assign:
                - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - zone: ${input.zone}
                - machineType: ${input.machineType}
                - diskSize: ${input.diskSize}
                - imageProject: ${input.imageProject}
                - imageFamily: ${input.imageFamily}
                - vmName: ${input.vmName}
                - email: ${input.email}
       - createResource:
           call: googleapis.compute.v1.instances.insert
           args:
               project: ${projectId}
               zone: ${zone}
               body:
                   name: ${vmName}
                   machineType: ${"projects/" + projectId + "/zones/" + zone + "/machineTypes/" + machineType}
                   disks:
                    - initializeParams:
                        diskSizeGb: ${diskSize}
                        sourceImage: ${"projects/" + imageProject + "/global/images/family/" + imageFamily}
                      type: PERSISTENT
                      boot: true
                      autoDelete: true
                   networkInterfaces:
                    - network: "global/networks/default"
           result: insertResult
       - retStep:
           return: ${insertResult}
  8. לוחצים על פריסה.

gcloud

  1. יוצרים קובץ קוד מקור לתהליך העבודה:

    touch create-vm-from-form.yaml
  2. בכלי לעריכת טקסט, מעתיקים את זרימת העבודה הבאה לקובץ קוד המקור:

    main:
       params: [input]
       steps:
       - init:
           assign:
                - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - zone: ${input.zone}
                - machineType: ${input.machineType}
                - diskSize: ${input.diskSize}
                - imageProject: ${input.imageProject}
                - imageFamily: ${input.imageFamily}
                - vmName: ${input.vmName}
                - email: ${input.email}
       - createResource:
           call: googleapis.compute.v1.instances.insert
           args:
               project: ${projectId}
               zone: ${zone}
               body:
                   name: ${vmName}
                   machineType: ${"projects/" + projectId + "/zones/" + zone + "/machineTypes/" + machineType}
                   disks:
                    - initializeParams:
                        diskSizeGb: ${diskSize}
                        sourceImage: ${"projects/" + imageProject + "/global/images/family/" + imageFamily}
                      type: PERSISTENT
                      boot: true
                      autoDelete: true
                   networkInterfaces:
                    - network: "global/networks/default"
           result: insertResult
       - retStep:
           return: ${insertResult}
  3. מריצים את הפקודה הבאה כדי לפרוס את תהליך העבודה:

    gcloud workflows deploy create-vm-from-form \
        --source=create-vm-from-form.yaml \
        --location=us-central1 \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Google Cloud. אפשר לאחזר את מספר הפרויקט:

    gcloud projects describe PROJECT_ID

בדיקת התהליך מקצה לקצה

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

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

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

  2. כדי לשלוח את התשובה, לוחצים על שליחה.

  3. פותחים את הטופס ב-Forms.

  4. לוחצים על תשובות.

  5. לוחצים על הצגה ב-Sheets.

    הגיליון האלקטרוני המקושר ייפתח.

  6. בשורה של התשובה, מסמנים את תיבת הסימון אושרה?.

  7. פותחים את פרויקט Apps Script.

  8. לוחצים על Executions (הרצות) .

    הטריגר צריך להיות מופעל ורשום עם הסטטוס Completed.

  9. מוודאים שתהליך העבודה create-vm-from-form הושלם בהצלחה:

    המסוף

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

      כניסה לדף Workflows

    2. בדף Workflows (תהליכי עבודה), לוחצים על תהליך העבודה create-vm-from-form (יצירת מכונה וירטואלית מטופס) כדי לעבור לדף הפרטים שלו.

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

      מצב הביצוע צריך להיות Succeeded, ובחלונית Input (קלט) צריכים להופיע המפרטים של המכונה הווירטואלית שביקשתם.

    gcloud

    אחזור רשימה של ניסיונות ההפעלה של תהליך העבודה:

    gcloud workflows executions list create-vm-from-form

    התוצאה אמורה להיות דומה לזו:

    NAME: projects/918619793306/locations/us-central1/workflows/create-vm-from-form/executions/d8947ecb-9ccb-4ea1-ba10-e5c10414e3be
    STATE: SUCCEEDED
    START_TIME: 2023-01-24T15:07:40.404741791Z
    END_TIME: 2023-01-24T15:07:55.649373625Z
  10. בודקים שנוצר מכונה וירטואלית חדשה כמו שציפיתם:

    המסוף

    נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

    מכונת ה-VM אמורה להופיע ברשימה עם סטטוס שמציין שהיא פועלת.

    gcloud

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

    gcloud compute instances list

    מכונת ה-VM אמורה להופיע ברשימה עם סטטוס שמציין שהיא פועלת.

    מידע נוסף על הפקודה gcloud compute instances list זמין בדף העזרה שלה.

הסרת המשאבים

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

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

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

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

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

    כניסה לדף Manage resources

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

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

  1. איך מוחקים קבצים ב-Drive
  2. מחיקת מכונה וירטואלית של Compute Engine.
  3. מחיקת תהליך עבודה

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