Git לאדמינים של ענן: שיטות עבודה מומלצות לבקרת גרסאות מעבר לפיתוח תוכנה
By Mirko Peters ·
ברוכים השבים לפודקאסט ולבלוג המלווה שלנו! אם אתם מנהלי ענן, מהנדסי מערכות או אנשי DevOps שגדלו על ניהול שרתים מרחוק…
Automatically translated with AI from the original post. Read the English original
ברוכים הבאים שוב לפודקאסט ולבלוג הנלווה! אם אתם מנהלי ענן, מהנדסי מערכות או אנשי DevOps שגדלו על ניהול שרתים דרך חיבור מרוחק ועריכה ישירה של קבצי תצורה, קחו נשימה עמוקה. צריך לדבר על מבנה התיקיות שלכם. אתם יודעים על איזו תיקייה אני מדבר. זו התיקייה שעל שולחן העבודה, או גרוע מכך, יושבת על כונן רשת משותף או על שרת קפיצה בסביבת ייצור, ומכילה תיקיות בשמות כמו production_config_final_v2_FINAL_fixed, nginx.conf.bak.old ו-main_terraform_script_DO_NOT_TOUCH_john. כולנו עברנו את זה. כולנו חיינו בעולם הכאוטי של גיבויים אד-הוק והעתקות ידניות של קבצים.
בפוסט הזה אנחנו ממשיכים את פרק הפודקאסט של היום, שבו צללנו לעומק השאלה מדוע מערכות בקרת גרסאות כמו Git כבר אינן מיועדות רק למפתחי תוכנה. אם אתם כותבים תשתית כקוד (IaC), מנהלים סביבות ענן או מאוטומטים פריסות, Git הופך לחבר הכי טוב שלכם. נפרק יחד איך עוברים from הצטברות דיגיטלית לניהול ענן מקצועי, ניתן לביקורת ושיתופי.
מדוע מנהלי ענן זקוקים לבקרת גרסאות
במשך עשורים, מפתחי תוכנה נהנו מהנוחות של Git, בעוד מנהלי IT ואנשי מערכות הסתמכו על גיבויים ידניים, סקריפטים של rsync וזיכרון בלבד כדי לעקוב אחר שינויים. אבל הנוף של המחשוב בענן השתנה מן היסוד. כיום, התשתית שלנו מוגדרת בקוד. בין אם אתם משתמשים ב-Terraform, Ansible, AWS CloudFormation, מניפסטים של Kubernetes או Pulumi, סביבת הענן שלכם היא השתקפות ישירה של קבצי טקסט.
כשהתשתית היא קוד, ניהול שלה כמו נתונים מסורתיים הוא מתכון לאסון. הנה הסיבות שמנהלי ענן זקוקים לבקרת גרסאות בדחיפות:
- מסלול הביקורת: כשמסד נתונים בסביבת ייצור נופל בשלוש לפנות בוקר, ההנהלה רוצה לדעת מה השתנה. עם Git אפשר להריץ פקודה אחת כדי לראות מי שינה כלל בקבוצת אבטחה, מתי שינה אותו ומדוע.
- רשת הביטחון: האם קרה לכם פעם לבצע שינוי תצורה באמצע הלילה שהפיל מאזן עומסים, ורק אז הבנתם ששכחתם מה היה ההגדרה המקורית? בקרת גרסאות נותנת לכם מכונת זמן מיידית לחזרה למצב יציב וידוע.
- שיתוף פעולה בלי כאוס: שני מהנדסים לא יכולים לערוך את אותו קובץ תצורה בו-זמנית בתיקייה משותפת בלי שאחד ידרוס את עבודתו של השני. Git פותר את הבעיה הזו מהיסוד, על ידי מיזוג בטוח של התרומות.
- אינטגרציה עם CI/CD: תהליכי עבודה מודרניים בענן מתבססים על צינורות אוטומציה. Git משמש כמקור האמת היחיד, שמפעיל בדיקות אוטומטיות, סריקות אבטחה וצינורות פריסה בכל פעם שמאושר שינוי.
פירוק מושגי הליבה של Git לצוותי תשתית
אם אתם חדשים ב-Git, המינוח עלול להישמע מאיים למנהלי מערכות שרגילים למערכות קבצים מסורתיות. בואו נתרגם את מושגי הליבה למונחים שמתאימים לניהול ענן.
מאגרים
חשבו על מאגר Git, או "repo", כעל תיקיית פרויקט על סטרואידים. עבור מנהל ענן, זה יכול להיות מאגר יחיד שמכיל את כל קונפיגורציות Terraform של סביבת ענן מסוימת, או מאגר מרכזי לכל מניפסטים של אשכולות Kubernetes. המאגר עוקב אחר כל קובץ ותיקייה בתוכו, ושומר היסטוריה מלאה של כל שינוי שנעשה אי פעם.
קומיטים
קומיט הוא תמונת מצב שמורה של קוד התשתית שלכם בנקודת זמן מסוימת. בניגוד לשמירה פשוטה של קובץ, קומיט דורש כוונה. אתם מכינים את השינויים שלכם, למשל עדכון כלל חומת אש והוספת דלי S3 חדש, ואז מבצעים להם קומיט עם הודעה תיאורית כמו "הוספת מדיניות CORS מחמירה לדלי S3 ציבורי." תמונת מצב זו קבועה, ניתנת להפניה, ובעלת hash ייחודי.
ענפים
הענפים (branches) הם הפתרון המושלם לבעיית שמות התיקיות מסוג _v2_FINAL. במקום לשכפל את כל מבנה התיקיות שלכם כדי לבדוק טופולוגיית רשת חדשה, יוצרים "ענף". ענף הוא סביבת עבודה מבודדת. אפשר לנסות דברים, לשבור, לבדוק תצורות חדשות ולפרוס לסביבת staging בלי לגעת בכלל בקוד היציב של הייצור שנמצא בענף הראשי.
ניהול תשתית כקוד (IaC) באמצעות commits והיסטוריה
כתיבת commits טובים היא אמנות, אבל עבור מנהלי ענן היא גם דרישת ציות. כשמנהלים משאבי ענן, היסטוריית ה-commits הופכת ליומן התפעולי שלכם. בואו נראה איך לבנות את האינטראקציה שלכם עם Git בעת ניהול IaC.
נניח שאתם מקימים רשת וירטואלית פרטית (VPC) חדשה באמצעות Terraform. כותבים את הקובץ vpc.tf, מגדירים את תתי הרשתות ואת טבלאות הניתוב. במקום להריץ terraform apply בעיניים עצומות, תהליך העבודה שלכם צריך להיראות כך:
- בצעו שינויים בקבצי תצורת התשתית.
- הריצו כלי אימות מקומיים (כמו
terraform validateאו בדיקות תחביר). - הכניסו לאזור ההמתנה (stage) את הקבצים הספציפיים שברצונכם לכלול באמצעות
git add. - צרו commit ברור באמצעות
git commit -m "Provision staging VPC and associated routing tables". - דחפו את השינויים לשרת מרוחק כמו GitHub, GitLab או Bitbucket.
כשמקפידים על תהליך העבודה הזה, היסטוריית ה-commits מספרת סיפור כרונולוגי על התפתחות התשתית שלכם. אם תתבצע ביקורת בעוד שישה חודשים, אנשי הציות יוכלו לאתר כל שינוי בתשתית עד ל-hash של commit מסוים ולמחבר שלו.
אסטרטגיות ענפים לפריסות ענן בטוחות
אחד הרגעים המפחידים ביותר בניהול ענן הוא הרצת עדכון ישירות על סביבת ייצור. תהליכי עבודה מסורתיים של מנהלי מערכות מעודדים לעיתים תכופות גישה של "להתפלל ולפרוס". אסטרטגיות ענפים ב-Git מסירות לחלוטין את הפחד הזה, בזכות בידוד מובנה.
עבור מנהלי ענן, תהליך עבודה פשוט של Git, שמכונה לעיתים GitHub Flow או מודל trunk-based development מותאם, עובד מצוין:
הענף הראשי
הענף main (או לעיתים master) מייצג את מקור האמת המוחלט לתשתית הייצור שלכם. כל קוד שנמצא בו צריך לשקף במדויק את מה שרץ כעת בסביבת הענן הייצורית. עריכות ישירות על main צריכות להיות אסורות בתכלית האיסור.
ענפי תכונות ומשימות
כשצריך לבצע שינוי, בין שמדובר בהוספת מופע מסד נתונים, שינוי תפקידי IAM או הגדלת קבוצות צמתים (node pools), יוצרים ענף ייעודי מתוך main. אפשר לתת לו שם תיאורי כמו feature/add-redis-cache או fix/iam-policy-least-privilege.
מבצעים את כל השינויים, בודקים אותם לעומק בסביבת sandbox שאינה ייצורית, ומבצעים commit של השינויים לענף הזה. מכיוון שאתם מבודדים מ-main, אפשר לנסות דברים בחופשיות בלי לסכן השבתה של הייצור.
מיזוג, Pull Requests ושיתוף פעולה בצוות
לאחר שבדקתם את שינויי התשתית בענף התכונה ואתם בטוחים שהם מוכנים לשימוש אמיתי, איך מעבירים אותם לייצור? כאן נכנסים לתמונה המיזוג (merge) ו-Pull Requests (PRs).
Pull Request (או Merge Request) הוא הצעה רשמית למזג את השינויים מענף התכונה בחזרה אל ענף הייצור main. מבחינת ממשל ובקרת איכות, זה המקום שבו נעשית כאן הקסם עבור מנהלי ענן.
בדיקת עמיתים (Peer Review)
לפני ששינוי תשתית מוחל על הייצור, עמית יכול לבדוק את ה-Pull Request שלכם. הוא יכול לעבור שורה אחר שורה על ההבדלים המדויקים בסקריפטים של Terraform או Ansible. האם השארתם בטעות כלל ingress פתוח שמאפשר תעבורה מ-0.0.0.0/0? העמית שלכם יכול לתפוס זאת לפני שזה בכלל מגיע ל-API של ספק הענן.
אימות אוטומטי באמצעות CI/CD
כשפותחים Pull Request, אפשר להגדיר את פלטפורמת האירוח של Git להפעיל אוטומטית צינורות אימות. לדוגמה, מערכת ה-CI/CD שלכם יכולה להריץ אוטומטית את terraform plan ולפרסם את הפלט ישירות כתגובה בתוך ה-Pull Request. הצוות יכול לראות בדיוק אילו משאבים ייווספו, ישונו או יימחקו לפני שאושרה ולו שורת קוד אחת.
לאחר שביקורת העמיתים תסתיים והבדיקות האוטומטיות יעברו בהצלחה, לחצו על הכפתור "Merge". השינויים שלכם ישולבו בבטחה בענף main, ויהיו מוכנים לפריסה.
שיטות עבודה מומלצות לתצורות מוכנות לייצור
המעבר ל-Git לניהול ענן דורש שינוי בדרך החשיבה. כדי להפיק את המרב ממערכת בקרת הגרסאות, כדאי לשמור על שיטות העבודה המומלצות בתעשייה הבאות:
1. לעולם אל תבצעו commit לסודות
זהו הכלל הזהב של ניהול Git. מפתחות API, סיסמאות למסדי נתונים, מפתחות SSH פרטיים ואישורי גישה לספקי ענן (כמו מפתחות הגישה הסודיים של AWS) לעולם לא צריכים להיות מוטמעים בקבצי התצורה ולהיכנס למאגר. אם תדחפו סוד למאגר ציבורי, או אפילו למאגר פנימי שנפרץ, תוקפים יכולים לאתר אותו תוך דקות.
במקום זאת, השתמשו במשתני סביבה ובשירותי ניהול סודות (כמו AWS Secrets Manager, HashiCorp Vault או Azure Key Vault), והגדירו קובץ .gitignore מדויק שמתעלם מקבצי מצב מקומיים, קובצי לוג ומטמוני אישורים.
2. כתבו הודעות commit תיאוריות
הימנעו מהודעות commit עצלניות כמו fix stuff, update או wip. כשתחפשו בהיסטוריית ה-commits חודשים מאוחר יותר כדי להבין מדוע מדיניות ה-autoscaling שונתה, הודעה כמו Adjust CPU threshold scaling policy from 80% to 75% for peak traffic handling תחסוך לכם הרבה תסכול.
3. התייחסו לתיעוד התשתית כאל קוד
המאגר שלכם לא צריך להכיל רק סקריפטים לפריסה. כללו בו קובץ README.md ברור שמסביר את הארכיטקטורה, הדרישות המקדימות, הוראות הפריסה ופרטי הקשר של הצוות האחראי על הסביבה.
4. הגנו על הענף הראשי
הגדירו כללי הגנה לענפים בפלטפורמת ה-Git שלכם. ודאו שהענף main דורש לפחות ביקורת עמיתים אחת, בדיקות אוטומטיות שעברו בהצלחה, ואין אפשרות לדחיפה בכפייה (force push). כך מונעים דריסות בשוגג ואוכפים את מדיניות הממשל באופן אוטומטי.
סיכום: שדרוג תהליך העבודה שלכם בניהול ענן
המעבר מכללי מתן שמות כאוטיים לתיקיות, מגיבוי ידני של תצורות ומפריסות "פרועות" הוא אחד הצעדים המשמעותיים ביותר שמנהל ענן יכול לעשות בקריירה שלו. באמצעות Git אתם מביאים את הקפדנות של הנדסת תוכנה מקצועית אל עולם התשתיות והתפעול.
בקרת גרסאות מעניקה לכם את היכולת לנסות דברים בבטחה, לשתף פעולה בצורה חלקה עם הצוות, לבקר שינויים בקלות ולבטל טעויות בביטחון. היא הופכת את ניהול הענן ממשימת כיבוי שריפות תגובתית ומלחיצה לדיסציפלינה הנדסית פרואקטיבית.
אם עדיין לא עשיתם זאת, צרו היום מאגר בדיקות, העבירו אליו סקריפט תצורה קטן, צרו ענף והתנסו בשקט הנפשי שמגיע עם בקרת גרסאות מקצועית. תודה שהאזנתם לפודקאסט וקראתם. הקפידו להירשם לעוד הפעלות מעמיקות על תשתיות ענן, ועד הפעם הבאה, שמרו על commits נקיים ועל pipelines ירוקים!