Infrastructure as Code یا زیرساخت مبتنی بر کُد، به پروسه مدیریت زیرساختهای IT گفته میشود که بجای انجام امور به صورت دستی، از اسکریپتها (در جهت خودکارسازی کارها) استفاده میشود. یکی از المانهای اصلی رویکرد DevOps نیز خودکارسازی فرایندهای مختلف است. به همین دلیل IaC میتواند در ساخت و توسعه رویکرد دوآپس نقش مستقیم و بسزایی را ایفا کند.
برای درک بهتر قضیه لازم است که منظورمان از زیرساخت یا Infrastructure را بیان کنیم. به طور کلی زیرساخت به هر دستگاه یا کامپوننتی گفته میشود که در پروسه Operation میتواند به ما کمک کند. منابع سختافزاری مانند سرورها، دیتاسنترها، کامپیوترهای رومیزی و منابع نرمافزاری مانند سیستم عاملها، وبسرورها، ماشینهای مجازی و… همگی بخشی از زیرساخت به حساب میآیند.
قبل از اینکه چنین فرایندها و تکنولوژیهایی ظهور پیدا کنند، سازمانها تمام نیازمندیهایشان را روی زیرساختهای فیزیکی در محل یا On-Premises نصب و مدیریت میکردند. اما امروزه با ظهور تکنولوژیهای مبتنی بر پردازش ابری این موضوع تا حد زیادی حل شده و تمام فرایندها با سهولت بیشتری قابل اجراست.
پردازش ابری به ما امکان استفاده از منابع سختافزاری خارج از محل را میدهد. برای انجام چنین کاری تکنیکهای مختلفی نیز وجود دارد. برای مثال مجازیسازی. با استفاده از مجازیسازی شما میتوانید چندین سرور فیزیکی در چندین نقطه جغرافیایی را بههمدیگر متصل کرده و اپلیکیشنتان را براساس نیازمندیها روی آن اجرا کنید.
IaC چگونه کار میکند؟
بدون استفاده از IaC، تیمهای عملیات و توسعه، زیرساختهای مورد نیاز (سرور، دیتابیس، لود بالانسر، کانتینر و…) برای دیپلویمنتهایشان را به صورت جداگانه پیکربندی میکنند. بعد از چندی این اتفاق باعث میشود تا یک محیط توسعه ناسازگار و غیرقابل مدیریت ایجاد شود. حالتی که به آن snowflakes گفته میشود. تمام این اتفاقات در نهایت باعث میشود تا فرایند پیکربندی دیپلویمنتهای آینده سختتر شده و ایجاد هرگونه تغییر در محیط عملیات پیچیدهتر شود.
IaC برای حل این مشکل از نرمافزارهایی استفاده میکند که میتواند وظایف مدیران سیستم را خودکارسازی کند. برای انجام این کار شما میتوانید هر آنچه که به آن نیاز دارید را به صورت کُد توضیح دهید.
پیادهسازی این حالت به صورت زیر اتفاق میافتد:
- یک تیم یا توسعهدهنده، پیکربندیهای لازم برای مدیریت زیرساخت را براساس یک زبان برنامه نویسی مینویسد.
- فایل کدهای نوشته شده به مخزن اصلی منتقل میشود.
- نرمافزاری IaC کد را اجرا کرده و کارهای ضروری را انجام میدهد.
مزایای Infrastructure as Code
۱. افزایش سرعت و کارایی
IaC امکان مدیریت سریعتر و کارآمدتر زیرساختها را فراهم میآورد. با استفاده از کدنویسی و خودکارسازی کارها، تیمها میتوانند زمان راهاندازی و تحویل پروژهها را به شکل قابل ملاحظهای کاهش دهند.
۲. قابلیت تکرار و استانداردسازی
IaC اجازه میدهد تا پیکربندیهای زیرساخت به راحتی تکرار شوند، این امر به استانداردسازی محیطهای توسعه، آزمایش و تولید کمک کرده و اطمینان از یکپارچگی کد را فراهم آورد.
۳. کاهش خطای انسانی
با کاهش دخالت دستی، IaC به کاهش خطاهای ناشی از پیکربندیهای دستی کمک میکند، این امر به افزایش ثبات و امنیت زیرساخت کمک قابل توجهی مینماید.
۴. بهبود مستندسازی
انجام پیکربندیها با استفاده از کد نه تنها به اتوماسیون کمک میکند بلکه به عنوان مستندسازی زنده عمل میکند که وضعیت مورد نظر زیرساخت را توصیف میکند.
معایب Infrastructure as Code
۱. فرایند یادگیری
برای تیمهایی که به تازگی با IaC آشنا میشوند، فرایند یادگیری میتواند چالشبرانگیز باشد. برای استفاده کامل از قدرت IaC نیاز به درک ابزارها، زبانهای اسکریپتنویسی و استانداردهای کلی وجود دارد.
۲. پیچیدگی مدیریت کد
همانند هر کد دیگری، کدهای IaC نیز نیاز به مدیریت، نسخهبندی و تست دارند. این امر میتواند پیچیدگیهای خود را به همراه داشته باشد، به ویژه در محیطهای بزرگ و پیچیده.
۳. وابستگی به ابزارها
استفاده از IaC اغلب نیازمند ابزارهای خاصی است که ممکن است به مرور زمان تغییر کنند یا دیگر پشتیبانی نشوند. این وابستگی میتواند به یک چالش در طولانی مدت تبدیل شود.
فاکتورهای مختلف برای دستهبندی ابزارهای IaC
انتخاب ابزار برای پیادهسازی IaC نیاز به بررسی نیازمندیها و فاکتورهای متفاوت دارد. با درک نیازمندیهای خود و آشنایی با فاکتورهای مختلف برای دستهبندی ابزارها، میتوانید ابزار مناسبی را برای IaC پیدا کنید. در ادامه قصد داریم به صورت کامل با این فاکتورها و رویکردهای متفاوت آشنا شویم.
رویکردهای Declarative و Imperative
برای خودکارسازی فرایند IaC دو روش وجود دارد: Declarative و Imperative
در روش Declarative شما باید وضعیت مطلوب یا Desired State نهایی را برای وضعیت زیرساختتان تعیین کنید. انجام چنین کاری بدون نیاز به درگیر شدن با جزئیات مختلف صورت میگیرد. از آنجایی که این روش نسبتا رویکرد سادهای است بیشتر استفاده میشود. برای پیادهسازی این حالت از زبانهایی مانند SQL ،YAML و JSON استفاده میشود.
در روش Imperative شما باید تمام جزئیات مربوط به پیکربندی مورد نظر را پیادهسازی کنید. در این روش شما میتوانید پیکربندیهای پیچیدهای را پیادهسازی کنید و سطح جزئیات بیشتری را در اختیار داشته باشید. برای انجام چنین کاری نیاز است که در سطحی حرفهای با حداقل یکی از زبانهای جاوا، روبی، پایتون و… آشنایی داشته باشید. از آنجایی که این روش نسبتا پیچیده و فرایند پیادهسازی پردردسری دارد، کمتر استفاده میشود.
مدیریت پیکربندیها یا تهیه زیرساختها؟
ابزارهای IaC به صورت کلی به دو دسته تقسیم میشوند. ابزارهایی که مدیریت پیکربندی (Configuration management) را انجام میدهند و ابزارهایی که در تهیه و پیادهسازی زیرساخت (Provisioning) به ما کمک میکنند. هر دو این موارد در فرایند دیپلویمنت استفاده میشوند، اما تفاوتشان چیست؟
پیادهسازی زیرساخت یا Provisioning به پروسه پیادهسازی زیرساختهای IT گفته میشود. منابعی مانند ماشینهای مجازی، دیتابیسها و… از جمله مواردی هستند که در این پروسه پیادهسازی میشوند.
مدیریت پیکربندی یا Configuration management مرحله بعد از Provisioning است. در این مرحله نرمافزارهای مورد نیاز نصب شده و همچنین پیکربندیهای ضروری روی سرورها اعمال میشود. نگهداری و بهروزرسانی سرورها نیز بخش دیگری از کارهای این مرحله است.
بیشتر ابزارهای IaC برای هر دو حالت ایجاد شدهاند اما هرکدام معمولا تنها در یکی از این موارد به خوبی عمل میکند.
زیرساخت تغییرپذیر و تغییرناپذیر
Mutable و Immutable بودن زیرساختها، یکی دیگر از فاکتورها برای دستهبندی ابزارهای IaC به حساب میآید.
زیرساخت Mutable یا تغییرپذیر به زیرساختی گفته میشود که براساس نیازهای کسبوکار میتواند تغییر کند. برای مثال شما در چنین زیرساختی به راحتی میتوانید پچها را آپدیت کنید، منابع جدید را تخصیص دهید و… .
زیرساخت Immutable یا تغییرناپذیر بعد از دیپلوی شدن قابل تغییر نیست. اگر هم قصد تغییر چیزی را داشته باشید باید آن را با یک نسخه جدید جایگزین کنید. این نوع زیرساخت به نسبت حالت قبل از یکپارچگی و امنیت بیشتری برخوردار است.
انتخاب ابزار IaC
همانطور که گفته شد بعد از آشنایی با فاکتورهای بالا، میتوانیم براساس آنها سراغ ابزارهای مختلف رفته و بهترین ابزار IaC را برای کسبوکار خودمان انتخاب کنیم. در جدول زیر ما لیستی از این ابزارها را همراه با جزئیات مورد نیاز ارائه کردهایم.
نام | زبانها | نوع عملکرد | رویکرد | نوع زیرساخت |
---|---|---|---|---|
Terraform | HCL + Typescript, Python, Java, C#, Go | Provisioning | Declarative | Immutable |
AWS CloudFormation | JSON, YAML + Typescript, Python, Java, C#, Go | Provisioning | Declarative | هر دو |
Ansible | Python, Ruby, YAML | Configuration management | Imperative | Mutable |
Puppet | PuppetDSL, YAML | Configuration management | Declarative | Mutable |
CHEF | Ruby | Configuration management | Declarative | Mutable |
چالشهای Infrastructure as Code
اگر به تازگی در حال اجرای IaC هستید ممکن است با برخی چالشها روبرو شوید. همچنین آگاهی پیدا کردن از این چالشها قبل از وقوع هرگونه مشکلی میتواند به شما دید بازتری برای حل آنها بدهد.
بهروزرسانیهای امنیتی
هرچقدر هم IaC در پیادهسازی فرایندها به صورت خودکار به شما کمک کند اما همواره چالشهای امنیتی در حل مسائل وجود دارد. نیاز است که IaC به لحاظ امنیتی در بازههای زمانی مختلف بررسی و کنترل شود. این کار به کاهش مشکلات امنیتی کمک خواهد کرد.
آپدیتهای مشکل دار
هر آپدیتی که روی یک ابزار اعمال میشود ممکن است به خوبی نسخه پیش از خود کار نکند. از آنجایی که IaC برای اعمال سریع این آپدیتها تنظیم شده، گاهی اوقات ممکن است مشکلات نسخه جدید، دامنگیر اپلیکیشن شما نیز شود.
جمعبندی
زیرساخت به عنوان کد یا Infrastructure as Code یکی از جدیدترین روشهای مدیریت زیرساخت است که مطمئنا استفاده از آن با در نظر گرفتن مزایا آن و البته نیازمندیهای کسبوکار خودتان میتواند بسیار مفید و پرسود باشد.
در این مطلب سعی کردیم تا شما را با IaC آشنا کنیم و همچنین فاکتورهای مختلف آن برای انتخاب ابزار درست را بررسی کنیم.