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

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

מדיניות פריסה היא משאב של Cloud Deploy שבו אפשר להשתמש כדי להגביל פעולות ידניות או אוטומטיות שמתבצעות בצינור עיבוד נתונים או ביעד נבחרים (או בכל צינורות עיבוד הנתונים או היעדים).

אילו התנהגויות אפשר להגביל?

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

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

לכל פעולה ידנית או אוטומטית, Cloud Deploy מבצע את הפעולות הבאות:

  1. בודק את ההרשאות לניהול זהויות וגישה (IAM).

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

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

    • ‫Cloud Deploy בודק את הפעולה שמתבצעת כדי לראות אם הכלל הזה רלוונטי.

      כלומר, האם סוג הפעולה והגורם המפעיל תואמים למדיניות?

    • ‫Cloud Deploy בודק את טווחי התאריכים והשעות שהוגדרו במדיניות כדי לראות אם המדיניות הזו בתוקף בזמן הבקשה.

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

דרישות ומגבלות

  • לכל מדיניות צריך להיות לפחות סלקטור אחד.

  • לכל מדיניות צריך להיות לפחות כלל אחד.

    כל מזהי הכללים חייבים להיות ייחודיים במדיניות פריסה.

  • כל כלל חייב לכלול לפחות timeWindows אחד, ובתוך timeWindows צריך להיות oneTimeWindows או weeklyWindows.

    פרטים נוספים על שימוש בבלוקים של זמן מופיעים במאמר בנושא תאריכים ושעות.

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

תפקידים והרשאות שנדרשים בניהול הזהויות והרשאות הגישה (IAM)

בנוסף להרשאות שנדרשות כדי להפעיל צינור העברה (pipeline) של Cloud Deploy ולבצע את המשימות שמוגבלות על ידי המדיניות, יש כמה הרשאות שנדרשות כדי לבצע פעולות מסוימות במשאב המדיניות:

  • clouddeploy.deployPolicies.create
  • clouddeploy.deployPolicies.delete
  • clouddeploy.deployPolicies.get
  • clouddeploy.deployPolicies.list
  • clouddeploy.deployPolicies.update
  • clouddeploy.deployPolicies.override

ההרשאות האלה כלולות בתפקיד roles/clouddeploy.policyAdmin. בנוסף, התפקיד roles/clouddeploy.policyOverrider כולל את ההרשאה .override.

יצירת מדיניות פריסה

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

  1. יוצרים קובץ YAML עם ההגדרה של מדיניות הפריסה.

    ההגדרה כוללת כותרת שמזהה את המשאב כמדיניות פריסה. השדה name הוא שדה חובה.

     apiVersion: deploy.cloud.google.com/v1
     kind: DeployPolicy
     metadata:
       name: 
     description: 
    
  2. מוסיפים הפניה לצינורות העברת הנתונים וליעדים שהמדיניות חלה עליהם (selectors).

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

  3. מוסיפים מדיניות אחת או יותר rules.

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

  4. מחילים את הקובץ כדי ליצור את המדיניות:

    gcloud deploy apply --file=FILENAME \
                         --region=REGION \
                         --project=PROJECT_ID
    

    כאשר FILENAME הוא שם קובץ ה-YAML שמכיל את ההגדרה של DeployPolicy, ‏ REGION הוא האזור שבו רוצים ליצור את משאב מדיניות הפריסה, ו-PROJECT_ID הוא הפרויקט שבו רוצים ליצור את המשאב.

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

פריסת סלקטורים של מדיניות

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

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

selectors:
- deliveryPipeline:
    id:
    labels:
  target:
    id:
    labels:

ב-YAML של ההגדרה הזו, deliveryPipeline.id מקבל את השם של צינור ההפצה, ו-target.id מקבל את השם של היעד (בשני המקרים, metadata.name).

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

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

פריסת כללי מדיניות

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

אלה הכללים שזמינים:

  • rolloutRestriction

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

אפשר להגביל את הפעולות הבאות בזמן שהכלל בתוקף:

  • ADVANCE

    אי אפשר להקדים את השלבים של ההשקה.

  • APPROVE

    אי אפשר לאשר את המבצע בהשקה.

  • CANCEL

    אי אפשר לבטל השקות.

  • CREATE

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

  • IGNORE_JOB

    אי אפשר להתעלם ממשרות.

  • RETRY_JOB

    אי אפשר לנסות שוב להריץ משימות.

  • ROLLBACK

    אי אפשר לבטל השקות.

  • TERMINATE_JOBRUN

    אי אפשר להפסיק הרצות של משימות

    במאמר הפניה לסכימת ההגדרות מוסבר על מבנה ה-YAML של הכלל הזה.

תאריכים ושעות בכלל rolloutRestriction

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

אלה הדרישות לציון תאריכים ושעות:

  • התאריכים מוצגים בפורמט yyyy-mm-dd.

  • כשמציינים שעה ביום, תחילת היום היא 00:00 וסוף היום הוא 24:00.

  • בפרמטר oneTimeWindows, התאריכים חייבים לכלול את השעה. במקרה של weeklyWindows, אפשר להשמיט את השעה ביום. אבל אם כוללים את startTime, צריך לכלול גם את endTime, ולהיפך.

    לדוגמה, הקפאה רק בימי ראשון תיראה כך:

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
      endTime: "24:00"
    

    אפשר גם:

    - daysOfWeek: [SUNDAY]
    

    אבל לא זה:

    - daysOfWeek: [SUNDAY]
      startTime: "00:00"
    
  • חובה לכלול אזור זמן, בפסקה timeWindows.

    לדוגמה: timeZone: America/New_York.

חלונות זמן לא חוזרים

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

חלונות זמן לא חוזרים מוגדרים באמצעות פסקה oneTimeWindows.

חלונות זמן חוזרים

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

חלונות זמן חוזרים מוגדרים באמצעות פסקה weeklyWindows.

דוגמאות

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

הקפאה שנתית

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

קובץ ה-YAML הבא מציג חלון זמן חד-פעמי (לא חוזר) לאכיפת מדיניות פריסה להקפאה שנתית:

timeWindows:
  timeZone: "America/New_York"
  oneTimeWindows:
  - start: "2024-12-22 17:00"
    end: "2025-01-02 09:00"

קובץ ה-YAML הזה מתאר חלון זמן מ-22 בדצמבר 2024 בשעה 17:00 עד 2 בינואר 2025 בשעה 9:00.

הקפאה חוזרת בסופי שבוע

קובץ ה-YAML הבא מציג חלון זמן חוזר לאכיפת מדיניות פריסה שמגבילה את ההשקות בסופי שבוע, מיום שישי בשעה 17:00 עד יום שני בבוקר בשעה 9:00:

timeWindows:
  timeZone: "America/New_York"
  weeklyWindows:
  - daysOfWeek: [FRIDAY]
    startTime: "17:00"
    endTime: "24:00"
  - daysOfWeek: [SATURDAY, SUNDAY]
    startTime: "00:00"
    endTime: "24:00"
  - daysOfWeek: [MONDAY]
    startTime: "00:00"
    endTime: "09:00"

עדכון מדיניות פריסה

כדי לעדכן מדיניות פריסה:

  1. עורכים את קובץ ה-YAML של הגדרות המדיניות.

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

  2. מחילים את הקובץ כדי לעדכן את המדיניות:

    gcloud deploy apply --file=FILENAME \
                         --region=REGION \
                         --project=PROJECT_ID
    

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

מדיניות הפריסה מוערכת כשמנסים לבצע את הפעולה המוגבלת, ולכן כל הפעולות האלה שמתבצעות על כל המשאבים של Cloud Deploy כפופות למדיניות המעודכנת. כלומר, לא נשאר שום שריד מההגבלות הקודמות. לדוגמה, אם יש לכם בלוק restrictRollouts לכל חודש דצמבר, וב-14 בדצמבר אתם מעדכנים את המדיניות כך שההגבלה תסתיים ב-15 בדצמבר, ההשקות לא ייחסמו יותר אחרי 15 בדצמבר.

שינוי המדיניות מברירת המחדל

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

כדי לבטל מדיניות פריסה, אתם צריכים את הרשאת ה-IAM‏ clouddeploy.deployPolicies.override.

אפשר לבטל את המדיניות באמצעות ה-CLI של gcloud או באמצעות מסוףGoogle Cloud :

console

  1. במסוף Google Cloud , מנסים לבצע פעולה שנחסמת על ידי מדיניות.

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

  2. בשדה הטקסט, מקלידים את שם המדיניות ולוחצים על Attempt to override policies (ניסיון לעקוף את המדיניות).

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

‫CLI של gcloud

כדי לבטל מדיניות פריסה באמצעות ה-CLI של gcloud, מוסיפים את האפשרות --override-deploy-policies לפקודה של כל פעולה שהמדיניות הזו מונעת. לדוגמה, הפקודה הבאה מקדמת גרסה, ומבטלת מדיניות פריסה ספציפית שאחרת הייתה מונעת את הקידום:

 gcloud deploy releases promote --release=my-release-001 \
   --project=my-policy-testing-project \
   --region=us-central1 \
   --delivery-pipeline=my-pipeline \
   --to-target=prod-target \
   --override-deploy-policies=my-deploy-policy

מחיקת מדיניות פריסה

כדי למחוק מדיניות פריסה:

console

  1. במסוף Google Cloud , עוברים לדף Deploy policies של Cloud Deploy.

    פתיחה של הדף 'פריסת מדיניות'

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

  2. לוחצים על לחצן הפעולות ליד המדיניות שרוצים למחוק ואז על מחיקת מדיניות הפריסה.

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

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

‫CLI של gcloud

כדי למחוק מדיניות פריסה באמצעות ה-CLI של gcloud, מריצים את הפקודה הבאה:

 gcloud deploy deploy-policies delete \
    --project=[PROJECT] \
    --region=[REGION] \
    [POLICY_NAME]

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

  • [POLICY_NAME]

    השם של המדיניות כפי שהוגדר בקובץ הגדרת המדיניות.

  • [PROJECT]

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

  • [REGION]

    האזור שבו יצרתם את מדיניות הפריסה.

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

רישום ביומן של מדיניות הפריסה

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

  • הערכת מדיניות

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

  • כשל בהתראה של Pub/Sub בעקבות שינוי במשאב של מדיניות פריסה.

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