مهارت مدیریت زیرساخت به‌عنوان کد چیست و چگونه یاد بگیریم؟

معرفی و تعریف

تعریفی کوتاه از مهارت مدیریت زیرساخت به‌عنوان کد

مدیریت زیرساخت به‌عنوان کد (Infrastructure as Code یا IaC) مهارت تعریف، ایجاد و تغییر منابع زیرساختی با فایل‌های نسخه‌پذیر است. این منابع می‌توانند شبکه، ماشین مجازی، سرویس ابری، پایگاه داده، تنظیمات دسترسی و محیط اجرای نرم‌افزار باشند.

نحوه استفاده از مهارت مدیریت زیرساخت به‌عنوان کد

به‌جای ساخت دستی یک محیط از طریق پنل‌ها و دستورهای پراکنده، متخصص IaC وضعیت مطلوب زیرساخت را در فایل‌ها تعریف می‌کند و با ابزارهایی مانند Terraform آن را اعمال می‌کند. ابزارهایی مانند Ansible نیز می‌توانند در مدیریت پیکربندی و خودکارسازی سرورها و سرویس‌ها در کنار ابزارهای تأمین زیرساخت به کار روند.

IaC فقط آنچه را در کد تعریف و با دسترسی‌های لازم اجرا شده است بازسازی می‌کند. این مهارت جایگزین نسخه پشتیبان داده، مدیریت اسرار، بازیابی داده‌های حالت‌دار، مهاجرت پایگاه داده یا برنامه بازیابی رخداد نیست. برای مثال، ساخت دوباره یک ماشین مجازی به معنی بازگرداندن داده پاک‌شده آن نیست.

کاربرد مهارت مدیریت زیرساخت به‌عنوان کد

این مهارت خطاهای تغییر دستی را کاهش می‌دهد، بازبینی تغییرات پیش از اجرا را ممکن می‌کند و سابقه تصمیم‌های زیرساختی را در مخزن کد نگه می‌دارد. مهندسان دواپس، مهندسان زیرساخت و تیم‌های توسعه‌ای که مسئول استقرار سرویس هستند، بیشترین استفاده را از آن دارند.

اهمیت و کاربردها

چرا این مهارت مهم است؟

اهیمیت مهارت مدیریت زیرساخت به‌عنوان کد

در تیم‌هایی که چند محیط و چند سرویس دارند، ساخت یا تغییر دستی زیرساخت به‌سختی قابل بازبینی و تکرار است. IaC تغییرات را به بخشی از فرایند توسعه تبدیل می‌کند. تغییر ابتدا در فایل‌ها ثبت می‌شود، اعضای تیم آن را بازبینی می‌کنند و سپس با فرایندی کنترل‌شده اجرا می‌شود.

شواهد عملی برای توانمندی در این مهارت

برای مهندس دواپس، این مهارت معمولاً در کنار کانتینرسازی، یکپارچه‌سازی و تحویل مستمر و پایش سامانه‌ها به کار می‌رود. اگر قصد ورود به نقش‌های دواپس یا زیرساخت را دارید، توانایی نشان‌دادن یک مخزن قابل اجرا با Git، تعریف منابع، پیکربندی سرور و مستندسازی دسترسی‌ها می‌تواند شواهد عملی مناسبی از توانمندی شما باشد.

زمان تقریبی لازم برای یادگیری مهارت

برای این مسیر یادگیری، مجموع زمان پیشنهادی آموزش، مطالعه و تمرین حدود ۱۸۰ ساعت در نظر گرفته شده است. این زمان یک برنامه پیشنهادی برای تمرین است و مدت واقعی یادگیری به پیش‌زمینه فرد، ابزارهای مورد استفاده، پیچیدگی محیط و میزان تمرین بستگی دارد.

تفاوت مهارت مدیریت زیرساخت به‌عنوان کد با مهارت‌های دیگر

IaC جای دانش شبکه، لینوکس یا امنیت را نمی‌گیرد. اگر منطق شبکه، سطح دسترسی یا وابستگی سرویس‌ها را درک نکنید، می‌توانید همان خطاها را فقط سریع‌تر و در مقیاس بزرگ‌تر تکرار کنید. همچنین کد زیرساخت به‌تنهایی برنامه بازیابی رخداد نیست بلکه باید برای داده، اسرار، مهاجرت‌های برگشت‌ناپذیر و بازگردانی سرویس، راهکارهای جداگانه طراحی و آزمون شوند.

کاربردها

  • ساخت محیط‌های توسعه، آزمایش و عملیاتی

    تعریف یک الگوی مشترک برای شبکه، سرورها و تنظیمات هر محیط تا تفاوت‌های ناخواسته میان محیط‌ها کمتر شود.

  • ایجاد منابع ابری

    ساخت و تنظیم منابعی مانند شبکه خصوصی، ماشین مجازی، فضای ذخیره‌سازی، پایگاه داده و قوانین دسترسی با ابزارهای IaC مانند Terraform یا OpenTofu.

  • پیکربندی سرورهای لینوکسی

    نصب بسته‌ها، ایجاد کاربران، تنظیم سرویس‌ها و اعمال سیاست‌های پیکربندی روی چند سرور با Playbook‌های Ansible.

  • بازبینی تغییرات زیرساختی

    ثبت فایل‌های زیرساخت در Git تا اعضای تیم بتوانند تفاوت تغییرات را پیش از اجرا بررسی و تأیید کنند.

  • بازسازی منابع تعریف‌شده پس از رخداد

    ایجاد دوباره منابع و پیکربندی‌های ثبت‌شده پس از خرابی، مهاجرت یا راه‌اندازی محیط جدید. این کار داده‌های از دست‌رفته، اسرار یا وضعیت سرویس‌های حالت‌دار را بازنمی‌گرداند و به نسخه پشتیبان و برنامه بازیابی جداگانه نیاز دارد.

  • استانداردسازی استقرار سرویس‌ها

    هماهنگ‌کردن تنظیمات زیرساخت با فرایند استقرار کانتینرها و سرویس‌ها در خط لوله تحویل مستمر.

پیش‌نیازها

شروع این مهارت با دانستن پیش‌نیازهای زیر هموارتر می‌شود.

  • توانایی کار با خط فرمان لینوکس
  • آشنایی مقدماتی با مفاهیم ماشین مجازی، شبکه خصوصی و متغیرهای محیطی
  • دسترسی به ماشین مجازی محلی، Provider محلی، محیط آزمایشی سازمانی یا حساب آزمایشی سرویس ابری
  • انتخاب محیط تمرین بر اساس دسترسی، هزینه، امکان پاک‌سازی منابع و نداشتن داده حساس

مسیر یادگیری مدیریت زیرساخت به‌عنوان کد

  1. مفاهیم زیرساخت و محیط‌های نرم‌افزاری را تشخیص دهید

    ۲۵ ساعت

    اجزای رایج یک سرویس وب را بشناسید: سرور، شبکه، DNS، پایگاه داده، فضای ذخیره‌سازی، متغیر محیطی و سطح دسترسی. تفاوت محیط‌های توسعه، آزمایش و عملیاتی را بررسی کنید و برای یک سرویس ساده، وابستگی‌های زیرساختی آن را فهرست کنید.

    برای تمرین، محیطی را انتخاب کنید که بتوانید منابع آن را بدون هزینه ناخواسته ایجاد و پاک‌سازی کنید. ماشین مجازی محلی، Provider محلی، محیط آزمایشی سازمانی یا حساب آزمایشی سرویس ابری گزینه‌های ممکن هستند. پیش از انتخاب، محدودیت دسترسی، شیوه پرداخت، سقف مصرف و امکان حذف کامل منابع را بررسی کنید.

  2. تغییرات زیرساخت را با Git مدیریت کنید

    ۲۵ ساعت

    یک مخزن برای فایل‌های زیرساخت بسازید و تغییرات را با شاخه، Commit و درخواست ادغام مدیریت کنید. یاد بگیرید چگونه تفاوت فایل‌های پیکربندی را بررسی کنید و اطلاعات محرمانه مانند رمز عبور و کلید دسترسی را وارد مخزن نکنید.

  3. ابزار مناسب تعریف منابع را انتخاب کنید

    ۳۵ ساعت

    Terraform یا OpenTofu برای تعریف منابعی مانند شبکه، ماشین مجازی، فضای ذخیره‌سازی و سرویس‌های ارائه‌دهنده ابر مناسب‌اند؛ یعنی زمانی که می‌خواهید وضعیت مطلوب منابع را اعلام کنید. ساختار Provider، Resource، Variable، Output و وضعیت ثبت‌شده (State) را یاد بگیرید.

    برای یک محیط آزمایشی، چند منبع ساده تعریف کنید و خروجی plan را بخوانید تا پیش از اعمال تغییرات تشخیص دهید چه منبعی ایجاد، تغییر یا حذف می‌شود. سپس تفاوت اجرای Terraform apply بدون فایل Plan ذخیره‌شده و اجرای آن با یک Plan ذخیره‌شده را تمرین کنید. در حالت دوم، همان Plan تأییدشده اجرا می‌شود.

  4. پیکربندی سرورها را با ابزار مناسب خودکار کنید

    ۴۰ ساعت

    Ansible برای پیکربندی سیستم‌عامل و نرم‌افزارهای روی سرورها مناسب است. Inventory، Playbook، Role، Variable و Handler را در Ansible تمرین کنید. یک Playbook بنویسید که روی یک یا چند ماشین لینوکسی کاربر بسازد، بسته نصب کند، فایل پیکربندی را قرار دهد و یک سرویس مانند Nginx را اجرا کند.

    برای راه‌اندازی اولیه یک ماشین، cloud-init می‌تواند انتخاب ساده‌تری باشد؛ به‌ویژه زمانی که فقط پیکربندی ابتدایی هنگام ایجاد ماشین لازم است. برای پیکربندی تکرارشونده چند سرور، Ansible مناسب‌تر است. Playbook باید با اجرای دوباره، تغییر ناخواسته ایجاد نکند.

  5. ماژولار، امن و قابل نگهداری طراحی کنید

    ۳۰ ساعت

    تعریف‌های تکراری را به Module یا Role تبدیل کنید و متغیرهای وابسته به هر محیط را جدا نگه دارید. مدیریت Secret، حداقل‌سازی دسترسی‌ها، نگهداری امن State، استفاده از Backend مناسب و سازوکار Locking در محیط‌های تیمی و پرهیز از حذف ناخواسته منابع را تمرین کنید.

    برای هر تغییر، پیامد حذف منبع و امکان بازگردانی آن را بررسی کنید. بازگردانی فایل‌های IaC با بازگردانی داده پایگاه داده، فایل‌های کاربران یا اسرار یکسان نیست؛ برای این موارد، نسخه پشتیبان، کنترل دسترسی و رویه بازیابی جداگانه لازم است.

  6. IaC را در فرایند تحویل تیمی به کار بگیرید

    ۲۵ ساعت

    برای فایل‌های Terraform، OpenTofu یا Ansible بررسی قالب، اعتبارسنجی و اجرای آزمایشی در GitLab CI یا ابزار مشابه تنظیم کنید. یک فرایند ساده بسازید که تغییر را پس از بازبینی بررسی کند و اجرای واقعی را فقط با تأیید مشخص انجام دهد.

    مستند کنید که State کجا نگهداری می‌شود، مسئول تأیید تغییرات حساس چه کسی است و برای خطاهای استقرار چه مسیر بازیابی جداگانه‌ای وجود دارد. پروژه تمرینی را بر اساس انتخاب ابزار شاخه‌بندی کنید: تعریف شبکه و ماشین با Terraform یا OpenTofu، پیکربندی آن‌ها با Ansible، یا راه‌اندازی اولیه با cloud-init.

زمان تقریبی یادگیری

حدود ۱۸۰ ساعت

برآورد مجموع زمان آموزش، مطالعه و تمرین تا رسیدن به سطح کاربردی؛ بسته به پیش‌زمینه شما می‌تواند کمتر یا بیشتر باشد.

پروژه‌های تمرینی

موارد زیر تصویری کلی از این بخش برای این مهارت ارائه می‌کنند.

  • ساخت محیط وب تک‌سروره با Terraform

    توضیح پروژه: برای یک سرویس وب فرضی، شبکه، یک ماشین لینوکسی و قوانین دسترسی لازم را تعریف کنید. متغیرهای محیط و خروجی‌های مهم مانند نشانی سرور را جداگانه ثبت کنید.

  • پیکربندی Nginx با Ansible

    توضیح پروژه: یک Playbook بنویسید که روی دو ماشین آزمایشی Nginx نصب کند، یک فایل تنظیمات مشترک قرار دهد و سرویس را فقط هنگام تغییر پیکربندی بازنشانی کند.

  • طراحی سه محیط با متغیرهای جدا

    توضیح پروژه: برای یک برنامه فرضی، محیط‌های توسعه، آزمایش و عملیاتی طراحی کنید. کد مشترک را ماژولار نگه دارید و فقط مقادیر وابسته به محیط را تغییر دهید.

  • بازبینی خودکار تغییرات زیرساخت

    توضیح پروژه: یک خط لوله GitLab CI بسازید که در هر درخواست ادغام، قالب و اعتبار فایل‌های Terraform را بررسی کند و خروجی plan را برای بازبینی تیم آماده کند.

  • مستندسازی بازیابی محیط

    توضیح پروژه: راهنمایی بنویسید که عضو جدید تیم با استفاده از مخزن IaC چگونه محیط آزمایشی را از ابتدا ایجاد، پیکربندی و در پایان پاک‌سازی می‌کند. در مستند مشخص کنید کدام بخش‌های محیط با IaC بازسازی می‌شوند و کدام داده‌ها یا Secretها به سازوکارهای جداگانه نیاز دارند.

پرسش‌های رایج درباره مدیریت زیرساخت به‌عنوان کد

در این بخش، به تعدادی از پرسش‌های رایج درباره این مهارت پاسخ داده شده است.

آیا Terraform و Ansible یک کار انجام می‌دهند؟

خیر، کاربرد غالب آن‌ها متفاوت است. Terraform بیشتر برای تعریف و مدیریت چرخه عمر منابع زیرساختی از طریق Providerها استفاده می‌شود، در حالی که Ansible در مدیریت پیکربندی، خودکارسازی و استقرار نرم‌افزار کاربرد گسترده‌ای دارد. در بسیاری از پروژه‌ها می‌توان این دو ابزار را مکمل یکدیگر به کار برد.

آیا برای یادگیری IaC باید برنامه‌نویس باشم؟

لزومی ندارد توسعه‌دهنده حرفه‌ای باشید، اما باید با منطق متغیرها، فایل‌های پیکربندی، خط فرمان و خواندن خطاها راحت باشید. اسکریپت‌نویسی ساده و کار با Git برای یادگیری عملی این مهارت ضروری است.

آیا IaC فقط برای زیرساخت ابری کاربرد دارد؟

خیر. می‌توان از آن برای پیکربندی سرورهای لینوکسی، ماشین‌های مجازی محلی، سرویس‌های شبکه و محیط‌های ترکیبی نیز استفاده کرد. ابزارها و Provider‌های مورد استفاده بسته به زیرساخت، دسترسی تیم و محیط تمرین شما متفاوت‌اند.

State در Terraform چیست و چرا اهمیت دارد؟

State اطلاعاتی درباره منابع تحت مدیریت Terraform نگه می‌دارد و به Terraform کمک می‌کند منابع تعریف‌شده در پیکربندی را با منابع واقعی مرتبط کند و تغییرات موردنیاز را محاسبه کند. State ممکن است شامل اطلاعات حساس باشد، بنابراین باید در محل امن و با کنترل دسترسی مناسب نگهداری شود. در محیط‌های تیمی نیز استفاده از Backend مناسب و سازوکار Locking برای جلوگیری از عملیات هم‌زمان اهمیت دارد.

چگونه نمونه‌کار IaC بسازم؟

یک مخزن عمومی با فایل‌های Terraform و Ansible بسازید، اما هیچ کلید یا اطلاعات محرمانه‌ای در آن قرار ندهید. README باید معماری، پیش‌نیازها، روش اجرای آزمایشی، متغیرها و روش پاک‌سازی منابع را توضیح دهد.

یادگیری IaC برای ورود به نقش مهندس دواپس کافی است؟

خیر. IaC یکی از مهارت‌های کلیدی مهندس دواپس است، اما معمولاً باید در کنار لینوکس، شبکه، کانتینرها، تحویل مستمر، پایش و عیب‌یابی سامانه‌ها یاد گرفته شود.

آموزش‌های مرتبط در فرادرس

منابع پیشنهادی

برچسب‌ها و کلیدواژه‌ها