فهم أدوات IaC: Cloudformation vs Terraform

نشرت: 2022-03-10

AWS CloudFormation و Terraform - لست متأكدًا من اختيارك؟ ستساعدك هذه المقالة في الوصول إلى قرار ذكي.

أحدثت الحوسبة السحابية ثورة في عالم DevOps. لم تعد مجرد كلمة طنانة. إنه هنا وهو هنا لتغيير طريقة تطوير تطبيقاتنا وصيانتها. في حين أن هناك عددًا لا يحصى من الأسباب التي تجعلك تستخدم الحوسبة السحابية لجميع نطاقات الأعمال ، إلا أن هناك قيودًا طفيفة ، يجب عليك توفير البنية التحتية يدويًا.

عليك أن تذهب إلى وحدات التحكم الخاصة بموفري الخدمات السحابية وتخبرهم بما تريده بالضبط. يعمل هذا بشكل جيد مع حالات الاستخدام الصغيرة ، ولكن ماذا لو كان لديك أشخاص مختلفون يقومون بإجراء تغييرات على التكوين في وحدة التحكم. قد ينتهي بك الأمر ببنية تحتية معقدة للغاية ستصبح أكثر صعوبة وصعوبة في صيانتها. لا توجد طريقة فعالة للتعاون أو تتبع التغييرات على البنية التحتية في السحابة. حسنًا ، في الواقع هناك. البنية التحتية كقانون.

البنية التحتية كرمز مصطلح شائع جدًا في الحوسبة السحابية. إنها عملية إدارة البنية التحتية لتكنولوجيا المعلومات الخاصة بك باستخدام التعليمات البرمجية. نعم هذا صحيح. بدلاً من الذهاب إلى وحدة التحكم والقيام بكل شيء يدويًا ؛ تسمح لك البنية التحتية كرمز ، المعروف أيضًا باسم IAAC أو IAC ، بكتابة ملفات التكوين ، والتي توفر بعد ذلك البنية التحتية السحابية الخاصة بك. تمنحنا IAC مزايا مثل الاتساق ، والصيانة السهلة والسريعة ، وعدم وجود مجال للأخطاء البشرية.

استخدام IAC مع Amazon Web Services

AWS هي خدمة الحوسبة السحابية الرائدة في العالم ، حيث تمتلك ضعف حصتها في السوق مقارنة بمزود السحابة التالي بعده. هناك أكثر من 200 خدمة على AWS يمكنها تلبية مئات وآلاف حالات الاستخدام.

عند البدء في استخدام IAC مع AWS ، ستقوم غالبًا بتضييق نطاق اختياراتك إلى AWS CloudFormation والأداة مفتوحة المصدر Terraform. عند محاولة الاختيار بين الاثنين ، قد يكون فهم الميزات المتعددة التي توفرها كلتا الأداتين أمرًا مربكًا للغاية. في هذه المقالة ، سنلقي نظرة على الاختلافات بين AWS CloudFormation و Terraform لمساعدتك على تحديد الأداة الأنسب لاحتياجاتك.

Terraform مقابل AWS CloudFormation: الاختلافات

نمطية

عند استخدام IAC في المؤسسات الكبيرة ، يمكن أن تكون الوحدات النمطية عاملاً كبيرًا لاختيار الأداة المناسبة.

تشكيل السحابة

لا يحتوي CloudFormation على دعم أصلي للوحدات النمطية. يسمح لك باستخدام شيء يسمى المداخن المتداخلة كوحدات نمطية.

على سبيل المثال ، يمكن أن يكون لديك تكوين قياسي للطريقة التي تريد بها توفير حاوية S3 في مؤسستك. لذلك ، تقوم بإنشاء قالب CloudFormation قياسي يقوم بإنشاء مستودعات S3. الآن عندما يريد المستخدم النهائي إنشاء حاوية S3 ، يمكنه استخدام قالب CloudFormation هذا كمكدس متداخل وإنشاء حاوية S3 قياسية.

هناك أيضًا خدمة أقل شهرة من AWS ، كتالوج خدمة AWS الذي يمكن أن يساعدك في نمطية AWS CloudFormation الخاص بك. Service Catalog هي خدمة AWS مصممة خصيصًا للمؤسسات التي ترغب في تقييد نطاق خدمات AWS لتلبية متطلبات الامتثال أو الأمان أو التكلفة أو الأداء. وتخيل ماذا؟ يستخدم AWS Service Catalog قوالب CloudFormation في الخلفية.

دعونا نفهم هذا بسرعة بمثال. يمكن أن تكون حاويات S3 ، إذا لم يتم استخدامها بشكل صحيح ، كارثية لبياناتك السرية قريبًا. دعنا نأخذ نفس المثال ، فأنت تريد أن يكون لديك طريقة قياسية لكيفية استخدام S3 في مؤسستك. الخيار الأول هو إنشاء قالب مكدس متداخل ، والذي يمكن استخدامه ضمن حزم CloudFormation الأخرى وهو جيد بنفس القدر.

إذا كنت لا تريد أن يضطر المستخدمون إلى استخدام هذا القالب القياسي كمكدس متداخل ، فيمكنك استخدام AWS Service Catalog. سيسمح كتالوج الخدمة للمستخدمين باستخدام هذا القالب القياسي من واجهة المستخدم لوحدة التحكم وتحديد بعض المعلمات ، لإجراء تخصيصات طفيفة. سيسمح لك ذلك بالتحكم في كيفية توفير البنية التحتية في حسابات AWS الخاصة بك ومنع أي سيناريوهات غير مرغوب فيها.

Terraform

Terraform لديه دعم أصلي للوحدات النمطية. يتيح لك إنشاء تكوينات قياسية تشبه إلى حد كبير AWS CloudFormation واستخدامها في تكوينات التضاريس الأخرى.

نظرًا لأن Terraform أداة مفتوحة المصدر ، يمكنك أيضًا العثور على بعض الوحدات النمطية مفتوحة المصدر المعدة مسبقًا واستخدامها في سجل Terraform. يمكنك أيضًا إنشاء الوحدات النمطية الخاصة بك مع التكوينات الخاصة بك واستضافتها في سجل وحدة خاصة.

أنا شخصياً أفضل استخدام Terraform على CloudFormation إذا كانت النمطية مطلبًا كبيرًا.

إن استخدام مكدس متداخل في CloudFormation ليس سهلاً مثل استخدام الوحدات النمطية في Terraform. يتمثل العامل الرئيسي في أن تمرير البيانات من قالب CFN إلى المكدس المتداخل يمكن أن يكون معقدًا إلى حد ما.

لا يوجد مكان قياسي حيث يمكن مشاركة قوالب CloudFormation. لديك كتالوج خدمة AWS ولكن هذه مجرد طريقة لك لفرض بعض القواعد لإنشاء البنية التحتية عبر وحدة التحكم. نحن كل شيء عن الكود. عند استخدام كتالوج الخدمة ، على الرغم من أن بعض المهام المعقدة يتم تغليفها بواسطة ملفات CloudFormation ، فلا يزال يتعين عليك متابعة المهمة اليدوية المتمثلة في الانتقال إلى وحدة التحكم وتحديد المعلمات لإنشاء البنية الأساسية الخاصة بك.

من ناحية أخرى ، تمتلك Terraform طريقة محددة لإنشاء الوحدات وصيانتها ومشاركتها. يمكنك رؤية المتطلبات الدقيقة للوحدات النمطية في Terraform Module Registry واستخدامها في ملفات terraform بسهولة بالغة.

السيطرة والحوكمة على البنية التحتية

إذا كنت ترغب في تحديد الموارد التي يمكن للأشخاص إنشاؤها في حسابات AWS الخاصة بك: يوفر لك كل من AWS CloudFormation و Terraform الوسائل للقيام بذلك.

دعونا نتحدث عن CloudFormation أولاً. لا تقدم CloudFormation في حد ذاتها أي تحكم في كيفية استخدام القوالب ولكن يمكنك استخدام سياسات AWS IAM للسماح فقط للمستخدمين في حساب AWS الخاص بك باستخدام قوالب CloudFormation القياسية لإنشاء الموارد. في مثال حاوية S3 ، قد ترغب في تقييد جميع أذونات "S3 Create" للمستخدمين والسماح لهم فقط بإنشاء حاويات S3 من AWS Service Catalog أو Nested Stacks.

يسمح لك Terraform بالتحكم في الموارد التي يمكن للمستخدمين إنشاؤها باستخدام سياسة كأداة رمز Sentinel. يسمح لك Sentinel بفرض سياسات دقيقة تستند إلى المنطق للسماح بإجراءات المستخدم أو رفضها عبر Terraform. على سبيل المثال ، يمكنك رفض جميع الموارد التي تنشئ حاويات S3 والسماح للمستخدمين فقط بإنشاء حاويات S3 من وحدة قياسية.

إدارة الدولة

يحتاج كل من AWS CloudFormation و Terraform إلى تتبع الموارد التي تحتفظ بها.

يخزن Terraform حالة البنية التحتية الخاصة بك في ملف الحالة. يتم تخزين هذا الملف محليًا بشكل افتراضي ، ولكن يمكنك تخزينه على الخلفيات البعيدة مثل S3 وجعل العديد من المستخدمين يقومون بإجراء تغييرات على نفس مجموعة البنية التحتية.

لا يحتفظ CloudFormation بملف حالة ، على الأقل ليس ملفًا يمكننا رؤيته. CloudFormation هي خدمة مُدارة ، لذا فهي تقوم بجميع أعمال الصيانة والتحقق في الخلفية.

يمتلك كل من AWS CloudFormation و Terraform وسيلة للتحقق من التغييرات التي سيتم إجراؤها على بنيتك الأساسية. في Terraform ، يمكنك تشغيل أمر - "خطة terraform" وكيف يخطط Terraform لتطبيق تغييرات التكوين الخاصة بك. في CloudFormation يمكن للمستخدمين رؤية هذه المعلومات عبر مجموعات التغيير.

لغة

يستخدم Terraform لغة تكوين HashiCorp ، HCL ، وهي لغة أنشأتها HashiCorp. إنه مشابه جدًا لـ JSON مع ميزات وإمكانيات مدمجة إضافية.

تتم كتابة قوالب CloudFormation بتنسيقات YAML أو JSON

التسجيل والتراجع

يتمتع كل من AWS CloudFormation و Terraform بإمكانيات تسجيل جيدة. من واقع خبرتي ، كانت الأخطاء والقضايا واضحة (في الغالب).

CloudFormation: بشكل افتراضي ، يتراجع CloudFormation عن جميع تغييراتك في حالة فشل تغيير المكدس. هذه ميزة جيدة ويمكن تعطيلها لأي أغراض تصحيح الأخطاء.

Terraform: لن يتراجع Terraform تلقائيًا عن تغييراتك في حالة فشلها. هذه ليست مشكلة حيث يمكنك دائمًا تشغيل أمر terraform إتلاف لحذف التكوين نصف المزود وإعادة تشغيل تشغيل Terraform مرة أخرى.

نِطَاق

لا يقتصر Terraform على سحابة AWS. العامل الأكثر أهمية عند الاختيار بين Terraform و CloudFormation هو أن Terraform يدعم مقدمي الخدمات السحابية الآخرين.

لذلك إذا كنت تخطط لاستخدام IAC لمنصات سحابية متعددة ، فإن Terraform هو خيارك الأفضل. على الرغم من أن CloudFormation أداة قوية ، إلا أنها تقتصر فقط على AWS. باستخدام Terraform ، يمكنك إعداد البنية التحتية ونشر تطبيقك في منصات سحابية متعددة ، مما يجعل تطبيقك أكثر توفرًا وقوة.

دعم الميزات

عادةً ، مع طرح AWS لخدمات وميزات جديدة ، سيتم تحديث CloudFormation قبل Terraform ، نظرًا لأنها خدمة AWS. اعتبارًا من الآن ، تغطي كلتا الأداتين معظم خدمات وميزات هذه الخدمات. قد يكون هذا عيبًا بسيطًا في استخدام Terraform ومع ذلك ، لدينا حل.

هناك أيضًا إمكانية لإنشاء مكدس CloudFormation داخل كود Terraform الخاص بك. لذلك ، إذا كنت تستخدم Terraform ولا تحتوي على ميزة ، يمكنك إعداد حزمة CloudFormation مؤقتًا داخل كود Terraform الخاص بك.

دعم فني

تغطي خطة الدعم الفني لـ AWS المدفوعة أيضًا دعم CloudFormation.

دفعت HashiCorp خططًا للحصول على الدعم الفني على Terraform أيضًا.

استنتاج

يعد كل من AWS CloudFormation و Terraform أدوات قوية ومطورة بالكامل. ستساعدك الاختلافات المذكورة أعلاه على اتخاذ قرار مستنير لاختيار الأداة بناءً على متطلباتك. كاقتراح شخصي ، إذا كنت تخطط لاستخدام منصات سحابية متعددة في المستقبل أو تستخدم حاليًا عدة سحاب ، فيجب عليك استخدام Terraform كمتجر شامل لجميع احتياجاتك. إذا كنت تبحث عن أداة IAC لـ AWS فقط ، فإن كلا من AWS CloudFormation و Terraform يعتبران لعبة عادلة.

إذا كنت مهتمًا بتعلم Terraform ، فاطلع على هذه الدورات التدريبية عبر الإنترنت.