Terraform چیست؟ کاربرد، مزایا و تفاوت ترافورم با Ansible
در این مقاله میخوانید
Terraform چیست؟ پاسخ به این پرسش به ساخت زیرساختهای ابری برمیگردد. تا همین چند سال پیش، برای پیکربندی زیرساختهای ابری و توسعه یا بهروزرسانی سرویس چرخه طولانی و طاقتفرسایی طی میشد؛ بهطوریکه کانفیگ سرور فقط بهصورت دستی امکانپذیر بود. همین مسئله تیمهای توسعه و پشتیبانی را درگیر تهیه داکیومنتهای دقیق و صرف زمان بسیار میکرد.
در این اوضاعواحوال، پلتفرمهای زیرساخت بهعنوان کد یا infrastructure as code (IAC) معرفی شدند تا مشکلات مربوط به حذف کانفیگها بهصورت دستی را برطرف کنند. در بحث DevOps، ازجمله پلتفرمهای توسعه زیرساخت میتوان Terraform و Ansible را نام برد. در این مقاله از بلاگ پارس پک، قصد داریم شما را با تکنولوژی قدرتمند Terraform آشنا کنیم و بررسی کنیم ترافرم چیست. پس تا پایان با ما همراه باشید.
Terraform چیست؟
ترافورم Terraform یک زیرساخت و ابزاری برای کدنویسی است که این امکان را برایتان ایجاد خواهد کرد تا از طریق منابع ابری و on-prem فایلهای پیکربندی قابل خواندن تعریف کرده و به اشتراک بگذارید. به بیانی دیگر، راهکاری ساده و کاربردی برای استقرار محصول در فضای ابری بهوجود میآورد.
ویژگیهای Terraform چیست؟
Terraform یکی از پلتفرمهای توسعه زیرساخت منبعباز بهصورت کد است. اگر بخواهیم بررسی کنیم که نقش ترافرم چیست، میتوان گفت زیرساخت ترافورم به برنامهنویسان DevOps کمک کرد تا منابع فیزیکی موردنیاز برای اجرای برنامه را بهصورت کد دریافت کنند. این پلتفرم در نصب نرمافزار یا برنامه دخالتی نمیکند؛ بلکه معمولاً در ساخت ماشین مجازی براساس نیاز کاربر استفاده میشود. اجازه دهید این موضوع را با ذکر مثالی ساده بهتر توضیح دهیم.
فرض کنید چند سرور با منابع مختلف دارید. برای ساخت ماشین یا زیرساخت مجازی روی این سرورها ترافورم بهکمکتان میآید. این زیرساخت منبعباز قبل از ایجاد هر نوع تغییر، شرایط سرور را بررسی میکند. سپس، براساس آن دستورالعملهایی را بهصورت کدنویسیشده روی سرور اجرا میکند. بعد از مدتی، اگر متوجه شدید که به چند سرور نیاز ندارید، مجدداً میتوانید سرورها را تغییر دهید یا حذف کنید.
کاربران ترافورم پیکربندی زیرساختهای مجازی را با زبانی شبیه به JSON انجام میدهد. درواقع، زبان استفادهشده در این پلتفرم HCL است. Terraform دو جزء اصلی به نام «هسته» و «پلاگین» دارد. قسمت هسته ترافورم بر اجرای برنامه، نمودارها، ویژگیهای مدیریت و فایلهای پیکربندیشده نظارت میکند. هسته و پلاگین با زبان برنامهنویسی GO نوشته شدهاند. قسمت پلاگین وظیفه تعریف منابع برای سرویسهای خاص را برعهده دارد؛ مثلاً بهمنظور احراز هویت و مقداردهی اولیه کتابخانههایی بهکار میرود که برای API استفاده میشود.
شیوه کار Terraform چیست؟
پلتفرم Terraform با استفاده از اسکریپت و فایلهای کنترل نسخه یا Version Control زیرساخت را مدیریت میکند. در آموزش Terraform، وقتی دستوری برای اجرا یا پیکربندی سرور یا دیتابیس یا لودبالانسر داده میشود، ترافورم آن را بهصورت API مدیریت میکند و دراختیار کاربر قرار میدهد. بدینترتیب، در مواقع لازم کاربر میتواند از آن استفاده کند. ازآنجاکه ترافورم پلتفرمی منبعباز بهشمار میرود، توسعهدهندگان این ابزار را با افزونههای جدید و کامپایلشده میتوانند ارتقا دهند.
برای دانستن این نکته که شیوه کار ترافرم چیست باید سه مرحله را بررسی کرد:
مرحله اول: نوشتار
در این مرحله، بهعنوان کاربر ترافورم منابعی را برای پیکربندی برنامه یا شبکه تعریف میکنید.
مرحله دوم: برنامهریزی
در بررسی آموزش ترافورم پس از تعریف منابع، ترافورم براساس زیرساخت فعلی شبکه و تنظیماتی که تعریف کردهاید، طرحی اجرایی تحویلتان میدهد. برای مثال، اگر قصد داشته باشید سرور را ایجاد یا بهروزرسانی یا حذف کنید، ترافورم برنامهریزی این دستور را انجام میدهد.
مرحله سوم: اجرا
پس از اینکه برنامه ارائهشده را تأیید کردید، ترافورم عملیات را بهطورصحیح انجام میدهد. برای مثال، طبق نیاز شما سروری که قصد دارید آن را حذف کنید، حذف خواهد کرد.
برای آشنایی کامل با چرخه عملکرد دواپس و انواع، مزایا و ابزارها در آن مقاله زیر را بخوانید.
مزایا و معایب Terraform چیست؟
درادامه مقاله «Terraform چیست» قصد داریم مزایا و معایب این راهکار کاربردی را بررسی کنیم. در پاسخ به این سوال که مزایای ترافورم چیست باید گفت ازجمله مزایای Terraform ترجمه زبان برنامهنویسی HCL به JSON است. علاوهبراین، ترافورم میتواند چندین پلتفرم ابری را همزمان پشتیبانی کند. نکته مهم دیگر اینکه با ترافورم امکان تغییر تدریجی منابع زیرساخت وجود دارد. برای مثال، پس از راهاندازی سرورها اگر سروری اضافه بود، آن را بهکمک Terraform میتوانید غیرفعال و حذف کنید.
درکنار مزایای Terraform، نمیتوان معایب آن را نادیده گرفت. نسخههای جدید ترافورم ممکن است خطاهایی بههمراه داشته باشند. علاوهبراین، اگر کاربران قصد نداشته باشند از زبان JSON استفاده کنند، در آموزش Terraform نیاز است زبان جدید HCL را یاد بگیرند. همچنین، تغییر نام منابع و انتقال آنها به ماژول ممکن است با مشکلاتی همراه باشد.
ترافورم از شبکههای نرمافزاری پشتیبانی میکند. در اِعمال تغییرات با ترافورم، حتماً این نکته را در نظر بگیرید که ماژولها را قفل کنید. این کار صرفاً برای اطمینان از این قضیه است که فقط یک نفر در آن زمان قصد دارد تغییرات را اِعمال کند.
کاربرد Terraform
در ادامه بررسی با Terraform میتوانید گردش کار ثابت و بدون دخالت انسان را برای پیکربندی منابع زیرساخت تجربه کنید. علاوهبراین، ترافورم از چند لایه محافظتی برای امنیت و نظارت بر زیرساخت استفاده میکند. این پلتفرم برای درخواستهای تکراری زیرساخت در سازمانهای بزرگ با مدل سلف سرویس خود نیز راهکاری کاربردی به تیمهای محصول ارائه کرده است.
برای درک بهتر این سوال که کاربرد Terraform چیست، باید بگوییم به کمک ترافورم با فراهمکردن زیرساخت ابری بدون دخالت انسان، احتمال خطا کمتر میشود؛ بههمیندلیل، بهترین گزینه برای استقرار چند پلتفرم ابری بهشمار میرود. هر ارائهدهنده ترافورم API خاص خود را دارد که ارتباط و مدیریت زیرساخت را راحتتر میکند. همچنین، ازطریق ترافورم میتوانید برنامههای کاربردی وب ایجاد و رمزگذاری و پیکربندی شبکه را با کمک آن مدیریت کنید.
Ansible چیست و چگونه کار میکند؟ نحوه نصب و پیکربندی Ansible چطور است؟ در مقاله زیر بخوانید.
تفاوت Terraform با Ansible
درادامه، به دو ابزار محبوب DevOps نگاهی میاندازیم. میان ابزارهای کاربردی IOC، ترافورم را بهعنوان پلتفرمی منبعباز برای زیرساخت براساس کد میشناسیم؛ اما وقتی از Ansible سخن بهمیان میآید، منظورمان ابزار مدیریت پیکربندی زیرساخت است. در پاسخ به پرسش «Ansible چیست؟»، میتوان گفت ابزاری برای پیکربندی زیرساخت است که مانند Terraform وظایف پیکربندی خود را ازطریق SSH انجام میدهد. حال سؤال این است که «برای مدیریت زیرساخت کدامیک را میتوان استفاده کرد؟» اجازه دهید به این سؤال با بررسی تفاوتهای هر دو ابزار جواب دهیم.
۱. تأمین زیرساخت درمقابل مدیریت تنظیمات
منظور از ارکستراسیون (Orchestration) یا تأمین فرایندی است که در آن زیرساخت ایجاد میکنیم؛ مانند ایجاد ماشینهای مجازی و اجزای شبکه و ساخت پایگاه داده. این در حالی است که مدیریت تنظیمات یا پیکربندی زیرساخت، از نصب خودکار نرمافزار، تنظیمات سیستمعامل، کانفیگ شبکه، فایروال و… حکایت میکند.
هر دو ابزار Terraform و Ansible میتوانند زیرساخت ایجاد و آن را مدیریت کنند؛ این سوال پیش میآید که نقش Terraform چیست؟ باید گفت Terraform راهکار جامعتری برای مدیریت زیرساخت ارائه میدهد. در آموزش ترافورم خواهید دید این ابزار از APIهای ارائهدهنده خدمات ابری برای ایجاد یا حذف زیرساخت استفاده میکند. درمقابل، اگرچه Ansible میتواند زیرساخت ابری ایجاد کند، عملکردش طوری است که درمقایسهبا Terraform در مدیریت پیکربندی و زیرساخت میدرخشد، نه تأمین زیرساخت.
نتیجه: اگرچه هر دو ابزار برای ایجاد و مدیریت زیرساخت بهکار میروند، در مدیریت و کانفیگ زیرساخت با Terraform محدودیتهایی وجود دارد و عملکرد آن مانند Ansible انعطافپذیر نیست؛ بنابراین، در ارکستراسیون یا تأمین زیرساخت Terraform بهکارتان میآید و در مدیریت و کانفیگ زیرساخت Ansible حرف اول را میزند.
۲. تفاوت Terraform و Ansible در برنامهنویسی
Terraform برای نوشتن زیرساخت بهعنوان کد (IaC) از زبان برنامهنویسی HCL استفاده میکند که ماهیت اعلامی دارد. این قضیه یعنی با یادگیری Terraform برای کدنویسی به دنبالکردن مسیر خاصی نیازی ندارید؛ زیرا درنهایت Terraform زیرساخت مدنظرتان را شناسایی میکند؛ بههمیندلیل، نوشتن IaC در Terraform راحتتر است.
درمقابل، برنامهنویسی در Ansible نوع رویهای دارد. Ansible از سینتکس YAML برای اجرای دستورالعمل استفاده میکند؛ درنتیجه، اجرای اسکریپت را بهصورت منظم و همانطورکه نوشته شده است، از بالا به پایین انجام میدهد. فرض کنید فهرستی از کارهای روزانه خود را باید بهترتیب ساعت و در زمانبندی مشخص انجام دهید. این نوع برنامهریزی مانند پارادایم برنامهنویسی بهشیوه رویهای است که کارها را بهترتیب فهرست از بالا به پایین و در زمان مشخصی انجام خواهید داد.
نتیجه: زبان برنامهنویسی Ansible از زبان محبوب پایتون پیروی میکند؛ اما از نوع پارادایم برنامهنویسی رویهای است. افزونبراین، با اینکه آموزش Terraform نیازمند یادگیری زبان HCL است، رویکردی اعلامی دارد که برنامهنویسی را راحتتر میکند.
۳. تفاوت Terraform و Ansible در پایداری برنامه
برنامه پایدار شامل ایجاد زیرساخت و نصب نسخه مناسب سورس کد است. ویژگی تغییرپذیری زیرساخت امکان قراردادن نسخههای جدید برنامه و سرویس را فراهم میکند. اگر زیرساخت تغییرپذیر باشد، اصطلاحاً به آن Mutable گفته میشود. در این صورت، نسخههای جدید یا بهروزرسانی برنامهها را بهراحتی میتوانید روی زیرساخت فعلی انجام دهید. اگر زیرساخت تغییرناپذیر باشد، به آن Immutable میگویند. ایجاد زیرساخت تغییرناپذیر بدینمعناست که برای تغییر نسخه یا برنامهای از آن باید زیرساخت فعلی را حذف و زیرساخت کاملاً جدیدی ایجاد کنید.
اگرچه ویژگی تغییرپذیری گزینه بهتری بهنظر میرسد، امکان بروز خطا در آن بیشتر است. وقتی تنظیمات جدید روی زیرساخت قبلی اِعمال میشود، ممکن است مشکلاتی در پیکربندی نسخه جدید بهوجود آید؛ بنابراین، زیرساخت تغییرناپذیر کنترل بیشتری روی ایجاد تغییرات دارد.
نتیجه: ازآنجاکه طراحی زیرساخت اغلب با هدف استفاده طولانیمدت انجام میشود، Terraform با قابلیت تغییرناپذیری خود پشتیبانی قدرتمندی برای ایجاد زیرساخت فراهم میکند. درضمن، ایجاد زیرساختی کاملاً جدید و حذف زیرساخت قدیمیتر در Terraform راحتتر است. فراموش نکنید که اگر قصد دارید تغییرات جزئی و مهم در زیرساخت مدنظرتان اِعمال کنید، به جای یادگیری Terraform، زیرساخت Ansible برنده خواهد بود؛ زیرا وظیفهاش مدیریت و کنترل پیکربندی و کانفیگ است. استفاده از هر دو ابزار استراتژی مناسبی است که احتمال خطای کانفیگ را کمتر میکند.
جدول مقایسه Terraform و Ansible
جدول زیر درک دقیقی از تفاوت بین Ansible و Terraform به شما میدهد:
ویژگی | Terraform | Ansible |
وظیفه | تأمین و ایجاد زیرساخت | پیکربندی و اضافهکردن نرمافزار به زیرساخت |
رویکرد برنامهنویسی | برنامهنویسی اعلامی | برنامهنویسی رویهای |
فعالیت در شبکه | بهترین گزینه برای پایهسازی شبکه | بهترین گزینه برای انجام اقدامات روی شبکه موجود |
قابلیت تغییرپذیری | تغییرناپذیر | تغییرپذیر |
Terraform یا Ansible؛ کدام ابزار بهتر است؟
انتخاب بین یادگیری Terraform یا Ansible به نیاز و هدف کسبوکارتان برای تهیه زیرساخت بستگی دارد. ترافورم رویکردی اعلامی دارد؛ درنتیجه، برای حفظ وضعیت ثابت در زیرساخت گزینه مناسبی خواهد بود. این یعنی بهترین گزینه برای زمانی خواهد بود که از ابتدا قصد دارید زیرساخت بسازید و به وضعیتی ثابت برسید؛ درحالیکه Ansible بهترین گزینه برای کسبوکارهایی خواهد بود که قصد دارند در طول زمان زیرساخت را مدیریت و پیکربندی کنند. برای مثال، در آینده میخواهند نرمافزار را در زیرساخت خود نصب یا بهروزرسانی کنند.
ازنظر سادگی کاربری، Ansible و Terraform تقریباً رقابتی یکسان دارند. با اینکه هر دو از API استفاده میکنند، ابزار کاملی از خط فرمان دراختیار ندارند. باوجوداین، هر دو ابزار از امنیت کامل برخوردار است و استفاده از آن به نیاز زیرساختی شما بستگی دارد.
برای آشنایی با آموزش استفاده از Ansible برای نصب و راهاندازی داکر در اوبونتو مقاله زیر را بخوانید.
جمعبندی
Terraform چیست؟ بهطور کلی میتوان گفت Terraform و Ansible هر دو ابزار مدیریت پیشرفته و متنباز هستند؛ یعنی برای ذخیره وضعیت زیرساخت به سرور مرکزی نیازی ندارند و هر دو بدون نیاز به سیستمعامل کار میکنند. علاوهبراین، در ترافورم از زبان پیکربندی HCL استفاده میشود؛ درحالیکه در Ansible زبان محبوب پایتون بهکار میرود.
با کمک ترافورم ابتدا دستورهایی به سرویسهای ابری ارسال میشود. سپس، ترافورم تنظیمات خود را برای انجام عملیات استفاده میکند؛ ولی در Ansible نیاز است SSH daemon را بهکار بگیرید. درضمن، ماژول پایتون نصبشده هنگام انجام عملیات، پس از اجرا حذف میشود.
ترافورم Terraform ابزاری برای توسعه زیرساخت ابری بهصورت سورس کد و منبعباز است. این مطلب به شما خواهد گفت Terraform چیست و شما را با نحوه عملکرد این ابزار قدرتمند کاملاً آشنا خواهد کرد.
سؤالات متداول
۱. Terraform چیست؟
Terraform ابزار زیرساخت بهعنوان کد یا IaC است که تیمهای DevOps از آن برای خودکارسازی وظایف مختلف زیرساخت استفاده میکنند.
۲. کاربرد Terraform چیست؟
این ابزار برای ایجاد زیرساخت بهعنوان کد بهکار گرفته میشود و به شما امکان میدهد تا منابع اولیه ابری را بهراحتی ایجاد کنید یا تغییر دهید.
۳. زبان برنامهنویسی Terraform چیست؟
این تکنولوژی به زبان کاربردی و تغییرناپذیر HCL نوشته شده است.