comprendre les outils IaC : CloudFormation vs Terraform

AWS CloudFormation ו-Terraform — לא בטוחים מה לבחור? המאמר הזה יעזור לכם להגיע להחלטה חכמה.

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

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

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

שימוש ב-IaC עם Amazon Web Services

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

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

Terraform מול AWS CloudFormation: הבדלים

מודולריות

כאשר משתמשים ב-IaC בארגונים גדולים, מודולריות יכולה להיות גורם משמעותי בבחירת הכלי הנכון.

CloudFormation

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

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

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

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

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

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

Terraform

Terraform תומך בצורה טבעית במודולים. הוא מאפשר לך ליצור תצורות סטנדרטיות דומות ל-AWS CloudFormation ולהשתמש בהן בתצורות Terraform אחרות.

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

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

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

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

מצד שני, ל-Terraform יש שיטה מוגדרת ליצירה, תחזוקה ושיתוף של מודולים. תוכל לראות את הדרישות המדויקות של המודולים במאגר המודולים של Terraform ולהשתמש בהם בקלות בקבצי Terraform שלך.

שליטה וממשלת תשתיות

אם אתה רוצה להגביל אילו משאבים אנשים שלך יכולים ליצור בחשבונות AWS שלך, AWS CloudFormation ו-Terraform מספקים לך את האמצעים לעשות זאת.

CloudFormation

CloudFormation מספק שליטה דרך מדיניות IAM, שמאפשרת לך לנהל גישת משתמש למשאבים. אך, השליטה הזו היא ספציפית ל-AWS, שעשוי להיות אידיאלי אם התשתית שלך ממוקדת באופן מלא ב-AWS.

בדוגמת ה-S3 bucket שלנו, ייתכן שתרצה להגביל את כל ההרשאות ליצירת "S3 Create" למשתמשים ולאפשר להם ליצור סלילי S3 רק מ-AWS Service Catalog או מ-Nested Stacks.

Terraform

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

ניהול מצב

AWS CloudFormation ו-Terraform צריכים לשמור על עקבות המשאבים שהם נוהגים.

Terraform

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

CloudFormation

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

גם AWS CloudFormation וגם Terraform מאפשרים לך לבדוק אילו שינויים יבוצעו בתשתית שלך. ב-Terraform, אתה יכול להריץ את הפקודה "terraform plan" כדי לראות כיצד Terraform מתכנן להחיל את שינויים שלך. ב-CloudFormation, משתמשים יכולים לראות מידע זה דרך Change Sets.

שפה

Terraform

Terraform משתמש בשפת HashiCorp Configuration Language, HCL, שפה שנוצרה על ידי HashiCorp. היא דומה מאוד ל-JSON, עם תכונות ויכולות נוספות מובנות.

CloudFormation

תבניות CloudFormation נכתבות בפורמטים YAML או JSON.

רישום וחזרה אחורה

גם AWS CloudFormation וגם Terraform יש יכולות רישום טובות. מניסיוני, השגיאות והבעיות היו ברורות (ברוב המקרים).

CloudFormation

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

Terraform

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

תחום

Terraform

תמיכת המולטי-קלאוד של Terraform מאפשרת לך לפרוס תשתית ברחבי AWS, Azure, Google Cloud ופלטפורמות נוספות ומספקת גמישות אם אתה עובד בסביבה מולטי-קלאוד.

CloudFormation

CloudFormation משולב באופן הדוק עם AWS, מה שהופך אותו לאופציה טובה עבור תשתיות בלעדיות ל-AWS אך מוגבל עבור הגדרות רב-ענן.

תמיכת תכונות

CloudFormation

AWS CloudFormation בדרך כלל מקבל עדכונים ראשונים עבור שירותים ותכונות חדשות, בהתחשב בשילוב הקרוב שלו עם AWS.

Terraform

במקרים שבהם Terraform חסר תכונות מסוימות של AWS, ניתן לשלב ערימות CloudFormation ישירות בקוד Terraform שלך כפתרון.

תמיכה טכנית

CloudFormation

תכנית התמיכה הטכנית בתשלום של AWS כוללת גם את התמיכה עבור CloudFormation.

Terraform

HashiCorp מציעה תכניות בתשלום עבור תמיכה טכנית גם על Terraform.

סיכום

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

Source:
https://dzone.com/articles/understanding-iac-tools-cloudformation-vs-terraform