מה זה Infrastructure as Code וכיצד זה יכול להקל על החיים שלכם?

בעידן הענן כולם רוצים לקחת חלק ב-DevOps Movement, ואחת ממילות הבאזז כיום היא תשתית כקוד. מה המונח הזה אומר ומה הוא כולל בתוכו? עשינו לכם סדר בכל מה שצריך לדעת

 Hero Images/ Getty Images Israel

צלם/תמונה: Hero Images/ Getty Images Israel

מאת ליאור קמרט, ארכיטקט ענן בחברת מיקרוסופט

בעבר הרחוק ארגוני IT וצוותי System היו כבולים לחומרה פיזית, והפצה של מערכות הפעלה, מכונות וירטואליות ותוכנה דרשה הרבה עבודה סיזיפית; בעידן הישן, הצוותים היו נדרשים לבזבז זמן יקר רק כדי שגלגלי ה-IT של הארגון ימשיכו לעבוד ועל מנת שהאור יישאר דלוק. מאחר ששינויים דרשו כל כך הרבה עבודה, תהליכי Change Management כפו על הצוותים תכנון מראש ומחזורים רבים של Design & Review, ומשום שהמחזורים הללו היו כל כך ארוכים, כל טעות עלתה בנזק תקציבי משמעותי.

אך היום אנחנו בעידן החדש, עידן ה-Cloud, וכולם רוצים לקחת חלק ב-DevOps Movement, ויש גם מי שכבר המשיכו הלאה מעולם ה-Script לעולם הקוד. אחת ממילות הבאזז של העידן הנוכחי היא “Infrastructure as Code”. מה המונח הזה אומר ומה הוא כולל בתוכו? עשינו לכם סדר, כדי שגם אתם תוכלו לקחת חלק בעידן החדש.

מה זה Infrastructure as Code?

המונח Infrastructure as Code, או תשתית כקוד, מייצג גישה לאוטומציה של פריסת תשתית אשר משלבת מתודות ומאפיינים מעולם פיתוח התוכנה. הגישה שמה דגש מהותי על Consistency ומחזוריות של הפצה ושינוי תשתית, מרמת החומרה עד לרמת התוכנה, עבור משתמש הקצה. כל שינוי בתהליך נעשה באמצעות Definitions ומשם ממשיך כחלק מה-pipe בצורה אוטומטית (unattended processes) ולאחר ולידציה.

הכלים בעולם ה-IaC מתחלקים ל-4 קטגוריות:

1. Ad Hoc Scripts

Scripts הם אבן הפינה של עולם האוטומציה, והם נמצאים איתנו מאז ומתמיד (בערך). העיקרון שלהם הוא מאוד פשוט וכולל את ה-Flow הבסיסי הבא:
הדבר הטוב ב-Scripts הוא שהם פופולריים ושהשפות שבהן נשתמש מתאימות לתכנות “כללי” (general-purpose programming languages). כלומר, אפשר לכתוב Script איך שאתם רוצים.

הדבר הרע ב-Scripts הוא שהם פופולריים ושהשפות שבהן נשתמש מתאימות לתכנות “כללי” (general-purpose programming languages). כלומר, אפשר לכתוב Script איך שאתם רוצים.

2. Configuration Management Tools

כלים כמו Chef, Puppet, Ansible & SaltStack נופלים תחת הקטגוריה של כלי ניהול והפצת קונפיגורציה (Configuration Management). ייעודם הוא עבודה מול תשתית ושרתים קיימים שכבר נפרסו (אך לא בלבד) והם מאופיינים בשלוש תכונות עיקריות:

– קונבנציה של קוד (Coding Convention) – הקוד בו נשתמש בכלים אלו יכלול מאפיינים כמו מבנה קונסיסטנטי וידוע מראש, מבנה קבצים אחיד, פרמטרים ברורים, ניהול סודות ומפתחות (Secrets Management) ועוד.

– הפצה רחבה (Distribution) – בניגוד לסקריפטים, כלי Configuration Management מתוכננים לעבוד מול מספר רב של שרתים מרוחקים.

– Idempotent Code – זהו קוד אשר יעבוד בצורה תקינה ויפיק את אותן התוצאות ללא קשר למספר הפעמים אשר נריץ אותו. בנוסף, הקוד אמור להביא בחשבון את המצב הרצוי (Desired State), ולא לבצע פעולות אשר לא ישנו דבר. לדוגמה, כפי שניתן לראות באיור, Puppet לא יפיץ את הקובץ אם הוא כבר קיים על השרת המיועד, אלא רק אם הקובץ לא קיים.

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

3. Server Templating Tools

כלים אלו מטרתם היא יצירת Image של שרת או קונטיינר על ידי לכידת המצב הקיים (Snapshot) של מערכת ההפעלה, התוכנות והקבצים של אותו המשאב. דוגמאות לכלים בעלי היכולות הללו הם Packer Vagrant ו-Docker (בעזרת פקודת docker build).

לאחר שה-Image נלקח כחלק מתהליך ה-Build, ובכלליות כחלק מתהליך ה-Continues Integration, אפשר להמשיך לשלב ההפצה של אותו ה-Image (לדוגמה בעזרת Terraform שעליו נרחיב בהמשך) כחלק מתהליך ה-Continues Delivery.

בדוגמה שלפנינו נעשה שימוש בקוד JSON על ידי Packer על מנת לייצר Image ולפרוס ממנו מספר שרתים. אם היינו מעוניינים לבצע את אותו הפעולה על קונטיינר, התהליך היה זהה, אך היתרון ב-IaC הוא שאין צורך לשנות את מתודולוגית הלכידה אל מול סוגים שונים של Images.

4. Provisioning Tools

כלים אלו נועדו ליצירת ופריסת שרתים ומשאבים (Resources), ותפקידם הוא להיות מסוגלים לתאר כל אספקט של התשתית, כולל המעטפת של השרתים כמו אחסון, תקשורת load-balancers, databases, אבטחת מידע ועוד.

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

הטמעה וארכיטקטורה

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

1. Pull / Master / Agent

צורת היישום של ארכיטקטורה זאת היא בתצורה של Masters & Agents. השרת המרכזי (ה-Master) מחזיק את ה-Repository של הקונפיגורציה, ה-Metadata והקבצים, ושרתי המטרה (Nodes) הם אלה שימשכו (Pull) את אותן קונפיגורציות וקבצים בעזרת סוכנים (Agents) שיותקנו עליהם.

היתרונות בצורת היישום הזו הם:
– מקום אחד שבו ניתן לנהל את כל מנגנון הפריסה והתשתית
– לחלק מהכלים יש ממשק ווב גרפי (Web GUI Interface)
– Scalability

החסרונות הם:
– נדרשת תשתית ייעודית על מנת להקים את ה-Master ועבור ניהול ה-Agents
– יש צורך בתחזוקה ובחינה של אבטחת מידע בהיבט התקשורת של ה-Agents אל מול השרת המרכזי, וכמו כן במיקום השרת המרכזי ביחס לתקשורת הארגונית
– תצורה זאת קשה יותר לניהול: יש יותר “Moving Parts” וצורך בזמינות גבוהה (HA)

2. Push / Masterless / Agentless

צורת יישום זאת נחשבת לפשוטה יותר להטמעה ומסתמכת על עבודה של Client מול API’s, שזמינים עבורו ללא צורך בשרת מרכזי (Masterless) וללא התקנת Agents. כאשר ישנם שינויים, פריסות חדשות של שרתים או Resources אחרים שצריכים להתבצע, הקוד של ה-Client מדבר ישירות (Push) מול ה-API של פלטפורמה המטרה.

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

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

והחסרונות הם:
– אין ממשק ניהול מרכזי (אך ניתן לספק אחד בעזרת כלי צד שלישי)

להתמקד ולהשקיע בצרכים האמיתיים

מעבר לעבודה בתצורה של Infrastructure as Code מאפשר לצוותי IT, DevOps ופיתוח את היכולת להתמקד ולהשקיע בצרכים העסקיים האמיתיים של הארגונים. המתודולוגיות והכלים הם רבים ויש צורך לבדוק כל מקרה לגופו, אך ברגע שהחלטה מתקבלת ניתן לשלב אותם כחלק מתהליכי ה-CI/CD בצורה כזאת שתהפוך את כל ה-Pipeline למהיר ויעיל יותר.

הכתבה בחסות Microsoft

נושאים כמו Infrastructure as Code יעלו ב-Azure Red Shirt Dev Tour שתקיים מיקרוסופט העולמית בתל אביב בשבוע הבא. סקוט גאת'רי Executive Vice President, Microsoft Cloud and Enterprise Group שמוביל את כל פעילות הענן בחברה, יקיים מרתון Coding עבור מפתחים במסגרת ה-Microsoft Tech Summit. גאת’רי, יקודד על הבמה במשך 5 שעות, ידגים טכנולוגיות חדשות בענן כמו בניית אפליקציות מבוססות קונטיינרים, שימוש ב-Machine Learning ו-NoSQL ועוד מגוון פתרונות טכנולוגיים שימחישו למשתתפים כיצד להשתמש בענן כדי לבנות פתרונות יוצאי דופן. להרשמה לאירוע עם מס' 2 במיקרוסופט לחצו כאן.

כתב אורח

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

הגב

9 Comments on "מה זה Infrastructure as Code וכיצד זה יכול להקל על החיים שלכם?"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 
Sort by:   newest | oldest | most voted
Danor
Guest

כזה 2012.
Immutable servers FTW.

Eran
Guest

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

Yaron
Guest

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

sharon
Guest

כתבה מעולה

Matanel
Guest

כתבה גרועה וירודה

ערן
Guest

בלתי קריא

דור
Guest

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

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

Yaron
Guest

אמאזון מובילה כי יש לה פור של כמה שנים טובות, הגדילה השנתית של Azure באיזור ה 90% בעוד אמאזון באיזור ה 40%.

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

DevOps
Guest

הדוגמא שהוא נתן ל Idempotent code שגויה, זוהי דוגמה ל convergence

wpDiscuz

תגיות לכתבה: