תשתית כקוד

**תשתית כקוד** (**IaC**) היא תהליך של ניהול והקצאת משאבי מרכז נתונים של מחשבים באמצעות קובצי הגדרות קריאים על ידי מכונה, ולא באמצעות תצורת חומרה פיזית או כלי תצורה אינטראקטיביים. תשתית ה-IT המנוהלת על ידי תהליך זה כוללת הן ציוד פיזי, כגון שרתי Bare Metal, והן מכונות וירטואליות, ומשאבי תצורה נלווים. ההגדרות עשויות להיות במערכת בקרת גרסאות, במקום לתחזק את הקוד באמצעות תהליכים ידניים. הקוד בקובצי ההגדרות עשוי להשתמש בסקריפטים או בהגדרות הצהרתיות, אך IaC משתמש לעיתים קרובות יותר בגישות הצהרתיות.

## סקירה כללית
תחום ה-IaC צמח כתגובה לקושי שהציבו מחשוב שירותים ומסגרות אינטרנט מהדור השני. בשנת 2006, השקת Elastic Compute Cloud של Amazon Web Services וגרסת 1.0 של Ruby on Rails חודשים ספורים קודם לכן יצרו קשיי קנה מידה נרחבים בארגון, אשר בעבר חוו רק בחברות גדולות ורב-לאומיות. עם כלים חדשים שקמים לטיפול בתחום הצומח הזה, נולד רעיון ה-IaC. המחשבה על מידול תשתיות באמצעות קוד, ולאחר מכן היכולת לתכנן, ליישם ולפרוס תשתית יישומים עם שיטות עבודה מומלצות ידועות של תוכנה, קסמה הן למפתחי תוכנה והן למנהלי תשתיות IT. היכולת להתייחס לתשתית כקוד ולהשתמש באותם כלים כמו בכל פרויקט תוכנה אחר תאפשר למפתחים לפרוס יישומים במהירות.

## יתרונות
ניתן לחלק את הערך של IaC לשלוש קטגוריות מדידות: עלות, מהירות וסיכון. &#x5B; *<span title="This claim needs references to reliable sources. (September 2019)">[https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac 17]</span>* &#x5D;

הפחתת עלויות שואפת לסייע לא רק לארגון מבחינה כלכלית, אלא גם מבחינת כוח אדם ומאמץ, כלומר על ידי הסרת הרכיב הידני, אנשים יכולים למקד מחדש את מאמציהם במשימות ארגוניות אחרות. &#x5B; ''17'' &#x5D; אוטומציה של תשתיות באמצעות קוד חוסכת זמן מאשר יצירת התשתיות בצורה ידנית. אוטומציה מסירה את הסיכון הכרוך בטעויות אנוש, כמו תצורה שגויה ידנית; הסרת הסיכון הזו יכולה להפחית את זמן ההשבתה ולהגביר את האמינות. תוצאות ותכונות אלו עוזרות לארגון להתקדם לקראת יישום תרבות של DevOps, עבודה משולבת של פיתוח ותפעול.

## סוגי גישות
ישנן בדרך כלל שתי גישות ל-IaC: הצהרתית (פונקציונלית) לעומת אימפרטיבי (פקודתי). ההבדל בין הגישה הצהרתית לגישה האימפרטיבי הוא בעיקרו של דבר **מה** לעומת **איך**. הגישה הצהרתית מתמקדת במה צריכה להיות תצורת היעד הסופית. האימפרטיבי מתמקד באופן שבו יש לשנות את התשתית כדי לעמוד בכך. הגישה הצהרתית מגדירה את המצב הרצוי והמערכת מבצעת את מה שצריך לקרות כדי להשיג את המצב הרצוי. אימפרטיבי מגדיר פקודות ספציפיות שיש לבצע בסדר המתאים כדי להגיע למסקנה הרצויה.

## שיטות
תשתית כקוד (IaC) מאפשרת לנהל שרתים ואת התצורות שלהם באמצעות קוד. ישנן שתי דרכים לשלוח תצורות אלו לשרתים: שיטות ' push ' ו-' pull '. בשיטת 'push', המערכת השולטת בתצורה שולחת הוראות ישירות לשרת. בשיטת 'pull', השרת שולף את ההוראות שלו ממערכת הבקרה.

## כלים
ישנם כלים רבים הממלאים יכולות אוטומציה של תשתיות ומשתמשים ב-IaC. באופן כללי, כל framework או כלי שמבצע שינויים או מגדיר תשתית באופן הצהרתי או אימפרטיבי על ידי גישה תכנותית יכולים להיחשב IaC. באופן מסורתי, כלי אוטומציה של שרתים וניהול תצורה שימשו להשגת IaC. כיום ארגונים משתמשים גם בכלי אוטומציה של תצורה רציפה או בכלי IaC עצמאים, כגון PowerShell DSC של מיקרוסופט או AWS CloudFormation.

#### תוכן קהילתי
תוכן קהילתי הוא גורם מפתח לאיכות כלי CCA בקוד פתוח. כפי שגרטנר מציינת, ערכם של כלי CCA "תלוי בתוכן ובתמיכה של קהילת המשתמשים, בדיוק כפי שהוא תלוי בבשלות המסחרית ובביצועים של כלי האוטומציה". ספקים מבוססים כמו Puppet ו־Chef יצרו קהילות משלהם. ל-Chef יש את Chef Community Repository ול-Puppet יש את PuppetForge. ספקים אחרים מסתמכים על קהילות אחרות וממנפים מסגרות IaC אחרות כמו PowerShell DSC. מערכות חזותיות ומונחות עצמים אלו פועלות היטב עבור מפתחים, אך הן שימושיות במיוחד עבור DevOps ותפעול מונעי ייצור שמעריכים מודלים על פני סקריפטים לתוכן. ככל שהתחום ממשיך להתפתח ולהשתנות, התוכן מבוסס הקהילה יהפוך לחשוב יותר ויותר לאופן שבו משתמשים בכלי IaC.

כלים נוספים כוללים גם: AWS CloudFormation, cdist, StackStorm, Juju ו-Step CI.

## מערכות יחסים
### קשר ל-DevOps
IaC יכול להיות מאפיין מפתח המאפשר שיטות עבודה מומלצות ב־DevOps. המפתחים נהיים מעורבים יותר בהגדרת התצורה וצוותי תפעול מעורבים מוקדם יותר בתהליך הפיתוח. כלים המשתמשים ב-IaC מביאים נראות למצב ולתצורת השרתים ובסופו של דבר מספקים את הנראות למשתמשים בתוך הארגון, במטרה לייעל את העבודה. אוטומציה באופן כללי שואפת לקחת את הבלבול וההיבט המועד לשגיאות של תהליכים ידניים ולהפוך אותם ליעילים ופרודוקטיביים יותר. זה מאפשר יצירת תוכנה ויישומים טובים יותר עם גמישות, פחות זמן השבתה וצורת עבודה יעילה כוללת עבור החברה. IaC נועד להפחית את המורכבות שהורגת את היעילות של תצורה ידנית. אוטומציה ושיתוף פעולה נחשבים לנקודות מרכזיות ב-DevOps; כלי אוטומציה של תשתיות כלולים לעיתים קרובות כרכיבים בשרשרת כלים של DevOps.

### הקשר לאבטחה
דוח איומי הענן לשנת 2020 שפורסם על ידי יחידה 42 (יחידת מודיעין האיומים של ספקית אבטחת הסייבר פאלו אלטו נטוורקס) זיהה כ-200,000 פגיעויות פוטנציאליות בתשתיות כתבניות קוד.

## ראו גם
* דוקר
* תשתית IT
* תשתית כשירות
* תִזמוּר

## הערות שוליים

קטגוריה:מחשוב ענן
קטגוריה:הנדסת מערכות