Terraform و Ansible هر دو ابزار محبوب DevOps هستند. این مقایسه ویژگی Terraform و Ansible را بخوانید.
هر دو Terraform و Ansible ابزارهای DevOps هستند، اما این ابزار DevOps چگونه متفاوت است؟ به طور خلاصه، Terraform یک پلت فرم متن باز، زیرساخت به عنوان کد است، در حالی که Ansible یک ابزار مدیریت پیکربندی منبع باز است که بر پیکربندی آن زیرساخت متمرکز شده است. اغلب موضوع بحث در مورد اینکه آیا باید از Terraform یا Ansible برای مدیریت زیرساخت استفاده کرد. خوشبختانه، پاسخی وجود دارد که در ناحیه گری نهفته است. این پاسخ زمانی که از افرادی که تجربه کار در هر دو ابزار را دارند پرسیده می شود یکسان به نظر می رسد. این پست شباهتهای بین Terraform و Ansible را برجسته میکند، تفاوتها را بررسی میکند و با بهترین راه برای مدیریت زیرساخت نتیجهگیری میکند.
در سطح بسیار بالایی، با توجه به قابلیت های هر دو محصول، Terraform و Ansible به عنوان ابزارهای مشابه در نظر گرفته می شوند. هر دوی آنها میتوانند زیرساخت ابری جدید را فراهم کنند و همان را با اجزای برنامه مورد نیاز پیکربندی کنند. هر دو Terraform و Ansible قادر به اجرای دستورات از راه دور بر روی ماشین مجازی هستند که به تازگی ایجاد شده است. این بدان معناست که هر دو ابزار بدون عامل هستند. برای اهداف عملیاتی نیازی به استقرار عوامل روی ماشین ها نیست. Terraform از API های ارائه دهنده ابر برای ایجاد زیرساخت استفاده می کند و وظایف پیکربندی اولیه با استفاده از SSH انجام می شود. در مورد Ansible هم همینطور است – از SSH برای انجام تمام وظایف پیکربندی مورد نیاز استفاده می کند. اطلاعات “وضعیت” برای هر دو نیازی به یک مجموعه زیرساخت جداگانه برای مدیریت ندارد، بنابراین هر دو ابزار بدون استاد هستند.
بخش قبل یک نمای کلی از این دو ابزار در گسترده ترین شباهت هایشان ارائه می دهد. در سطح بالا، به نظر می رسد که هر دو Terraform و Ansible قادر به تهیه و مدیریت پیکربندی هستند. با این حال، فرورفتن عمیقتر در آنها باعث میشود به مزایای یکی نسبت به دیگری در زمینههای خاص پی ببریم. به طور کلی، هر دو ابزار به روش های خاص خود عالی هستند. وقتی صحبت از مدیریت زیرساخت به میان می آید، عملکردها همپوشانی دارند. مدیریت زیرساخت به طور گسترده شامل 2 جنبه – ارکستراسیون و مدیریت پیکربندی است. Terraform و Ansible روشهای خاص خود را برای مدیریت هر دو دارند – با نقاط قوت و ضعف در مورد همپوشانیها. بنابراین، بررسی جزئیات هر دو ابزار برای انتخاب “عالی” یا ترکیبی با مرزها مهم است.
HashiCorp Terraform یک زیرساخت منبع باز به عنوان ابزار مدیریت کد است که عمدتاً برای هماهنگی و ارائه در محیط های مرکز داده تخصصی است. Terraform مستقیماً برنامه ها یا نرم افزارها را پیکربندی یا نصب نمی کند. در عوض، سرورها را ایجاد، تغییر یا از بین میبرد تا به وضعیت نهایی برسد. Terraform از یک رویکرد اعلامی برای مقابله با مدیریت شبکه استفاده می کند، به این معنی که کاربر یک حالت پایانی را تنظیم می کند که باید حفظ شود، و Terraform اقدامات لازم برای حفظ آن حالت را انجام می دهد.
Red Hat Ansible همچنین یک ابزار مدیریت IaC است، اما از یک رویکرد رویه ای استفاده می کند، که تفاوت اصلی آن را از Terraform متمایز می کند. از طریق رویکرد رویه ای Ansible، مراحل تعریف شده توسط کاربر در یک پیکربندی برای دستیابی به وضعیت یا تغییر مورد نظر استفاده می شود. این بدان معنی است که برای افزودن نصب یا نرم افزار در بالای شبکه های موجود مناسب است. Ansible یک سیستم بدون عامل است و از SSH یا سایر روش های احراز هویت برای برقراری ارتباط استفاده می کند. این باعث می شود سبک و کارآمد باشد. Ansible نیاز به نصب پایتون روی اهداف دارد، زیرا ماژول های کوچک را با استفاده از JSON نصب می کند، اما این ماژول ها پس از اجرا توسط Ansible به طور خودکار حذف می شوند.
هر دو Terraform و Ansible ابزارهای مدیریتی Masterless هستند. آنها به سرور مرکزی برای ذخیره وضعیت زیرساخت شما نیاز ندارند.
هر دو از یک سیستم Agentless استفاده می کنند. با Terraform، دستورات به سرویسهای ابری ارسال میشوند که سپس از عوامل خود برای انجام عملکردها استفاده میکنند. Ansible از شما می خواهد که SSH Daemon را اجرا کنید و همچنین یک ماژول کوچک پایتون را هنگام اجرای اکشن ها نصب می کند، اما این ماژول های ساده پس از اجرا حذف می شوند.
هر دوی این ابزارها متن باز هستند. آنها همچنین دارای جوامع بزرگی از کاربران هستند که بهروزرسانیها را به اشتراک میگذارند و به ساختن بهروزرسانیها کمک میکنند، و همچنین پشتیبانی ارائه میدهند و به سرعت مشکلات امنیتی را پیدا میکنند. Ansible به زبان محبوب پایتون نوشته شده است، در حالی که Terraform از زبان پیکربندی HashiCorp یا HCL استفاده می کند.
?
ارکستراسیون/تامین فرآیندی است که در آن ما زیرساخت ایجاد می کنیم – ماشین های مجازی، اجزای شبکه، پایگاه های داده و غیره. در حالی که، از سوی دیگر، مدیریت پیکربندی فرآیندی است برای خودکارسازی نصب اجزای نرم افزار نسخه شده، وظایف پیکربندی سیستم عامل، پیکربندی شبکه و فایروال، و غیره.
هر دو Terraform و Ansible قادر به انجام هر دو کار هستند. با این حال، Terraform یک راه حل جامع برای مدیریت زیرساخت ارائه می دهد. Terraform از APIهای ارائهدهنده ابری برای تهیه و حذف زیرساخت بر اساس منابع اعلام شده استفاده میکند.
از سوی دیگر، Ansible همچنین قادر به ارائه زیرساخت ابری است اما به اندازه کافی جامع نیست. عمدتاً به سمت مدیریت پیکربندی طراحی شده است. مدیریت پیکربندی فرآیندی برای به روز نگه داشتن برنامه ها و وابستگی ها است. اینجاست که Ansible در مقایسه با Terraform واقعا می درخشد. هر دو ابزار می توانند هر دو نوع فعالیت را انجام دهند. با این حال، هنگام اجرای مدیریت پیکربندی با استفاده از Terraform و اتوماسیون زیرساخت با استفاده از Ansible محدودیتهایی وجود دارد. آنها در مورد مدیریت زیرساخت پیچیده به اندازه کافی انعطاف پذیر نیستند. به طور منطقی، میتوانیم ارکستراسیون را به عنوان فعالیت روز 0 و مدیریت پیکربندی را به عنوان فعالیت روز اول شناسایی کنیم. Terraform برای فعالیت های روز 0 و Ansible برای فعالیت های روز 1 و به بعد بهترین کار را دارد.
Terraform برای نوشتن زیرساخت به عنوان کد (IaC) استفاده می شود. از HCL (زبان پیکربندی Hashicorp) استفاده میکند که ماهیت اعلامی دارد. فرقی نمی کند کد در کدام دنباله نوشته شود. کد همچنین می تواند در چندین فایل پراکنده شود. مهم نیست که چگونه کد را می نویسید، Terraform وابستگی ها و زیرساخت ها را شناسایی می کند. نوشتن یا ترجمه زیرساخت های موجود به کد در Terraform آسان است. Ansible از سینتکس YAML برای تعریف رویه برای انجام در زیرساخت هدف استفاده می کند. اسکریپت های Ansible YAML ماهیت رویه ای دارند – به این معنی که وقتی اسکریپت را می نویسید، از بالا به پایین اجرا می شود. به اسکریپتهای Ansible «ansible playbooks» میگویند. هنگامی که شما باید یک سری از وظایف را انجام دهید، همان را در کتاب بازی تعریف می کنید. وظایف به ترتیبی که نوشته شده اند انجام خواهند شد. به عنوان مثال، برای نصب یک سرور آپاچی بر روی ماشین مجازی داده شده به عنوان یک کاربر root ، باید مرحله ایجاد کاربر را قبل از تعریف وظیفه نصب بنویسید.
گردش کار استقرار برنامه شامل تهیه زیرساخت و نصب نسخه مناسب کد منبع و وابستگی ها به زیرساخت ارائه شده است. تغییرپذیری یک ویژگی مرتبط با زیرساخت اساسی است که نحوه استقرار نسخههای جدیدتر برنامهها و سرویسها را مشخص میکند. استقرار یا بر روی زیرساخت های موجود انجام می شود، یا می توانیم مجموعه ای کاملاً جدید از زیرساخت ها را برای آن فراهم کنیم. شیوههای استقرار معمولاً تعیین میکنند که آیا زیرساخت قابل تغییر است یا تغییرناپذیر. هنگامی که نسخه های جدیدتر برنامه ها بر روی یک زیرساخت منتشر می شوند، به آن mutable می گویند. با این حال، اگر استقرار در زیرساخت های کاملاً جدید در طول انتشار اتفاق بیفتد، گفته می شود که تغییر ناپذیر است.
تغییرپذیری راحت به نظر می رسد، اما خطر شکست مرتبط با آن بیشتر است. هنگامی که تنظیمات برنامه مجدداً روی همان زیرساخت اعمال می شود، مراحل اضافی حذف نصب نسخه قبلی و سپس نصب نسخه مورد نظر وجود دارد. مراحل بیشتر همچنین احتمال شکست بیشتری را معرفی می کند. انجام این کار برای ناوگانی از سرورها می تواند منجر به پیکربندی های ناهموار و رفتار غیرقابل پیش بینی شود. در عوض، اگر با نادیده گرفتن روش حذف نصب و اجرای نصب بر روی منابع زیرساخت جدید، بر کاهش این تعداد مراحل تمرکز کنیم – این فرصت را خواهیم داشت که در صورت شکست، استقرار جدید را آزمایش کرده و برگردانیم. در نظر گرفتن زیرساخت به عنوان تغییرناپذیر از این طریق کنترل بیشتری بر ایجاد تغییرات فراهم می کند.
با این حال، هیچ قانون طلایی تعریف نشده است که از یک رویکرد بر دیگری حمایت کند. از آنجایی که قدرت Terraform در مدیریت چرخه عمر زیرساخت نهفته است، تغییر ناپذیری زیرساخت را بهتر پشتیبانی می کند. فراهم کردن یک مجموعه کاملاً جدید از زیرساخت ها و حذف مجموعه قدیمی تر با استفاده از Terraform آسان تر است. با این حال، مدیریت تغییرات پیکربندی چیزی نیست که بتوان به کارآمدترین روش انجام داد. تا آنجا که به تغییرات پیکربندی مربوط می شود، Ansible برنده مسابقه است زیرا در درجه اول یک ابزار مدیریت پیکربندی است. Ansible با ارائه ایجاد تصویر VM از تغییر ناپذیری زیرساخت پشتیبانی می کند. با این حال، حفظ این تصاویر اضافی نیاز به تلاش بیشتری دارد. توصیه می شود از رویکرد زیرساخت تغییرناپذیر پیروی کنید، جایی که Terraform از مدیریت زیرساخت مراقبت می کند و Ansible به اعمال پیکربندی تغییر یافته کمک می کند. این همچنین به عنوان استراتژی استقرار آبی/سبز شناخته می شود که در آن خطر شکست پیکربندی کاهش می یابد.
Terraform کل چرخه حیات منابع تحت مدیریت خود را مدیریت می کند. نگاشت منابع زیرساخت را با پیکربندی فعلی در فایل های حالت حفظ می کند.State Management نقش بسیار مهمی در Terraform ایفا می کند. حالت ها برای ردیابی تغییرات در پیکربندی و ارائه همان استفاده می شوند. همچنین میتوان منابع موجود را تحت مدیریت Terraform با وارد کردن زیرساختهای دنیای واقعی در فایلهای حالت وارد کرد. در هر زمان، امکان پرس و جو از فایل های حالت Terraform برای درک مؤلفه زیرساخت و ویژگی های آنها در حال حاضر وجود دارد. برخلاف این، Ansible هیچ گونه مدیریت چرخه حیات را پشتیبانی نمی کند. از آنجایی که Ansible عمدتاً با مدیریت پیکربندی سر و کار دارد و با در نظر گرفتن پیشفرض زیرساخت غیرقابل تغییر، هر تغییری که در پیکربندی ایجاد میشود به طور خودکار بر روی منبع هدف اجرا میشود.
یک کسب و کار باید بر اساس نیازهای دقیق خود و زیرساخت های موجود، بین Terraform یا Ansible یکی را انتخاب کند. با توجه به اینکه Terraform بر اساس یک رویکرد اعلامی ساخته شده است، بهترین عملکرد را برای حفظ یک وضعیت ثابت در زیرساخت شما بدون دخالت زیاد دارد. این همچنین برای ساختن یک زیرساخت از ابتدا و رسیدن به یک وضعیت خاص صادق است. رویکرد رویهای Ansible برای کسانی است که نیاز دارند زیرساختهای خود را به گونهای مدیریت و پیکربندی کنند که آن را در طول زمان در حال تکامل و تغییر ببینند. مواردی مانند افزودن نرم افزار یا به روز رسانی در یک محیط از قبل پیکربندی شده جایی است که Ansible نسبت به Terraform برتری دارد.
هنگامی که صحبت از سادگی به میان می آید، Ansible به طور گسترده ای به عنوان ساده تر از این دو در نظر گرفته می شود. اگرچه بر اساس یک رابط خط فرمان، یک رابط کاربری جدید مبتنی بر وب وجود دارد، اما ویژگی های کامل ابزار خط فرمان را ندارد. با این حال، Terraform نیز بسیار ساده و شهودی است. بنابراین Ansible در اینجا فقط یک مزیت جزئی پیدا می کند. همانطور که گفته شد، این دو ابزار هر کدام برای کارهای مختلف مناسب هستند. هر دو کاملاً برجسته و ایمن هستند، بنابراین واقعاً به این بستگی دارد که آیا به ابزاری نیاز دارید که بر تأمین و هماهنگی متمرکز باشد یا مدیریت پیکربندی خاص.
همانطور که تاکنون می دانیم، Terraform با ارکستراسیون بهترین عملکرد را دارد و Ansible در مدیریت پیکربندی عالی است. البته آنها توانایی انجام وظایف یکدیگر را دارند، هرچند به صورت محدود. در چنین شرایطی، به جای انتخاب قاطع، بهتر است از هر دو ابزار برای مدیریت زیرساخت، بر اساس نقاط قوت آنها استفاده شود. پاسخ به سوال “از کدام ابزار استفاده کنیم؟” است – بستگی دارد. این بستگی به نحوه شکل گیری فرآیند مدیریت زیرساخت در حال حاضر دارد. یافتن توازن مناسب بین ارکستراسیون و مدیریت پیکربندی برای تعیین مسئولیت های روشن به ابزارهای مربوطه بسیار مهم است.