DevOps و امنیت پیشرفته

Infrastructure as Code (IaC) با Terraform و Ansible

Infrastructure as Code یعنی سرورها، ماشین‌های مجازی، شبکه و تنظیمات آن‌ها در فایل‌های کد تعریف شوند و مثل کد نرم‌افزار در Git نسخه‌بندی و بازبینی شوند. کانفیگ سرور زیرساخت شما را با Terraform یا OpenTofu و Ansible به کد تبدیل می‌کند تا هر محیط را بشود تکرارپذیر، مستند و با امکان بازگشت دوباره ساخت.

Terraform و OpenTofu Ansible Git و GitOps
چه زمانی به این خدمت نیاز دارید؟

نشانه‌هایی که مدیریت دستی زیرساخت به سقف رسیده است

هیچ‌کس دقیقاً نمی‌داند روی سرورها چه تغییری داده شده

تغییرات دستی کم‌کم سرورهای مشابه را متفاوت می‌کند (Configuration Drift) و خطاها فقط در production دیده می‌شوند. وقتی تنظیمات کد باشد، هر تغییر در Git ثبت و بازبینی می‌شود.

ساخت یک محیط تست یا سرور جدید روزها طول می‌کشد

دنبال کردن چک‌لیست دستی کند و خطاپذیر است. با ماژول Terraform و Playbook آماده، محیط جدید با یک دستور و هر بار یکسان ساخته می‌شود.

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

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

IaC در عمل

خدمات Infrastructure as Code با Terraform و Ansible

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

Terraform و OpenTofu برای ساخت زیرساخت

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

  • ساخت ماشین مجازی و شبکه روی Proxmox و VMware vSphere
  • ماژول‌های قابل استفاده دوباره برای dev، stage و production
  • اجرای plan و بازبینی پیش از apply

Ansible برای پیکربندی سرورها

Ansible بسته‌ها، کاربران، سرویس‌ها و سخت‌سازی سرورهای لینوکس را بدون نصب Agent و از طریق SSH پیکربندی می‌کند و چک‌لیست آن با امن‌سازی سرور هماهنگ است.

  • Playbook و Role برای سرویس‌های تکراری
  • Inventory گروه‌بندی‌شده برای هر محیط
  • نگهداری رمزها در Ansible Vault

مدیریت امن State

فایل State نقشه زیرساخت واقعی است. اگر گم شود یا هم‌زمان ویرایش شود، Terraform تصمیم اشتباه می‌گیرد.

  • Remote Backend روی MinIO سازگار با S3 یا GitLab
  • قفل هم‌زمانی برای جلوگیری از اجرای موازی
  • State جدا برای هر محیط و بکاپ منظم

Mirror برای Providerها و مخازن

دسترسی از ایران به بخشی از سرویس‌های HashiCorp ممکن است محدود یا ناپایدار باشد، چون HashiCorp طبق قوانین کنترل صادرات آمریکا دسترسی کشورهای تحریم‌شده را محدود می‌کند.

  • OpenTofu متن‌باز به‌عنوان مسیر پیشنهادی پروژه‌های جدید
  • Mirror داخلی Providerها و قفل نسخه‌ها با .terraform.lock.hcl
  • نگهداری داخلی Collectionهای Ansible و بسته‌ها

GitOps و بازبینی تغییرات

هیچ تغییری مستقیم روی سرور اعمال نمی‌شود و مسیر همیشه از Merge Request می‌گذرد. اجرای خودکار آن در پیاده‌سازی CI/CD انجام می‌شود.

  • اجرای plan در Pipeline و apply پس از تأیید
  • GitOps با Argo CD یا Flux برای Kubernetes
  • تاریخچه کامل تغییرات و امکان بازگشت

تبدیل زیرساخت موجود به کد

لازم نیست همه‌چیز از صفر ساخته شود و منابع فعلی را مرحله‌ای زیر مدیریت کد می‌آوریم.

  • Import منابع موجود به Terraform
  • تشخیص Drift به‌صورت زمان‌بندی‌شده
  • مستندات و تحویل مخزن کد به تیم
راهنمای کامل

راهنمای Infrastructure as Code با Terraform، OpenTofu و Ansible

Infrastructure as Code یعنی وضعیت زیرساخت، از ماشین مجازی و شبکه تا کاربران و سرویس‌های داخل سرور، در فایل‌های متنی نوشته شود و هر تغییر از مسیر Git، بازبینی و اجرای خودکار بگذرد. Terraform و OpenTofu اعلانی کار می‌کنند: وضعیت نهایی را توصیف می‌کنید و ابزار تفاوت آن با وضعیت فعلی را اعمال می‌کند. Ansible Taskها را به ترتیب و با ماژول‌های Idempotent اجرا می‌کند، پس اجرای دوباره Playbook روی سروری که درست تنظیم شده تغییری ایجاد نمی‌کند. نتیجه، محیط‌های یکسان، تاریخچه قابل ردیابی تغییرات و بازسازی سریع پس از خرابی است.

از کجا شروع کنیم؟

لازم نیست کل زیرساخت یک‌جا به کد تبدیل شود. کارهایی را انتخاب کنید که بیشترین تکرار یا خطا را دارند، مثل ساخت ماشین مجازی جدید، تنظیمات پایه و سخت‌سازی سرورهای لینوکس یا تعریف کاربران و کلیدهای SSH. منابعی را که از قبل وجود دارند با Import به State اضافه کنید و کد را تا جایی با وضعیت فعلی تطبیق دهید که plan هیچ تغییری نشان ندهد. از آن به بعد تغییرات فقط از مسیر کد انجام می‌شود و تشخیص Drift زمان‌بندی‌شده، تغییری را که کسی مستقیم روی سرور داده نشان می‌دهد.

Terraform یا OpenTofu کنار Ansible

در بیشتر پروژه‌ها Terraform یا OpenTofu ماشین‌ها، شبکه و DNS را از طریق API بستر، مثل Proxmox یا VMware vSphere، می‌سازد و Ansible داخل همان ماشین‌ها را از طریق SSH پیکربندی می‌کند. آدرس ماشین‌هایی که Terraform ساخته می‌تواند Inventory Ansible را بسازد تا فهرست سرورها دو جا نگهداری نشود. ماژول‌ها را برای dev، stage و production یکسان بنویسید و فقط متغیرها را تغییر دهید. Roleهای Ansible را برای سرویس‌های تکراری بسازید و رمزها را در Ansible Vault نگه دارید. سخت‌سازی سرورها در Roleها بر اساس چک‌لیست امن‌سازی سرور نوشته می‌شود و طراحی خود بستر مجازی در خدمات مجازی‌سازی سرور انجام می‌شود.

OpenTofu انشعاب متن‌باز Terraform است که پس از تغییر لایسنس Terraform به BSL زیر نظر بنیاد لینوکس ساخته شد. بیشتر کدهای Terraform بدون تغییر یا با تغییر کم روی آن اجرا می‌شوند. برای پروژه‌های جدید OpenTofu را پیشنهاد می‌کنیم و در پروژه‌هایی که Terraform دارند، مهاجرت را بر اساس Providerهای مورد استفاده بررسی می‌کنیم.

State، رمزها و ساختار مخزن

فایل State نقشه زیرساخت واقعی است. اگر گم شود، Terraform منابع موجود را نمی‌شناسد و اگر دو نفر هم‌زمان apply کنند، State خراب می‌شود. State را روی Remote Backend، مثل MinIO سازگار با S3 یا GitLab، با قفل هم‌زمانی نگه دارید، برای هر محیط State جدا بسازید و از آن بکاپ منظم بگیرید. ساختاری که معمولاً برای مخزن پیشنهاد می‌کنیم این است:

  • ماژول‌های مشترک برای ماشین، شبکه و DNS
  • پوشه جدا برای هر محیط با متغیرها و State خودش
  • Roleهای Ansible برای هر سرویس و Inventory هر محیط
  • فایل .terraform.lock.hcl داخل Git و فایل State بیرون از Git
  • README با روش اجرای plan، apply و Playbookها

بازبینی تغییرات، GitOps و شرایط ایران

در جریان GitOps هیچ تغییری مستقیم روی سرور اعمال نمی‌شود. تغییر در Merge Request پیشنهاد می‌شود، Pipeline دستور plan را اجرا می‌کند تا بازبین ببیند چه چیزی ساخته، تغییر یا حذف می‌شود و apply فقط پس از تأیید انجام می‌شود؛ ساخت این Pipeline در پیاده‌سازی CI/CD انجام می‌شود. برای Kubernetes همین جریان با Argo CD یا Flux اجرا می‌شود و وضعیت کلاستر با مخزن هماهنگ می‌ماند.

دسترسی از ایران به بخشی از سرویس‌های HashiCorp ممکن است محدود یا ناپایدار باشد، چون HashiCorp طبق قوانین کنترل صادرات آمریکا دسترسی کشورهای تحریم‌شده را محدود می‌کند. به همین دلیل OpenTofu مسیر پیشنهادی ما برای پروژه‌های جدید است. نسخه Providerها را با .terraform.lock.hcl قفل می‌کنیم و Providerهای متن‌باز و Collectionهای Ansible مورد نیاز را در Mirror داخلی نگه می‌داریم تا اجرای کد به دریافت لحظه‌ای از رجیستری خارجی وابسته نباشد.

زمان و هزینه پیاده‌سازی Infrastructure as Code به چه بستگی دارد؟

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

فایل State ممکن است رمزها و مقادیر حساس را به‌صورت متن ساده نگه دارد. آن را داخل Git قرار ندهید و دسترسی به Remote Backend را فقط به Pipeline و افراد مسئول بدهید.

مقایسه ابزارها

Terraform یا Ansible؟ تفاوت در عمل

در بیشتر پروژه‌ها Terraform و Ansible کنار هم به کار می‌روند: Terraform زیرساخت را می‌سازد و Ansible داخل آن را پیکربندی می‌کند.

مقایسه Terraform و Ansible در مدیریت زیرساخت
معیارTerraform / OpenTofuAnsible
کاربرد اصلیساخت و تغییر منابع مثل ماشین، شبکه و DNSپیکربندی سیستم‌عامل و نصب نرم‌افزار
روش کاراعلانی؛ وضعیت نهایی را توصیف می‌کنیداجرای Taskها به ترتیب با ماژول‌های Idempotent
نگهداری وضعیتفایل State داردState ندارد و هر بار وضعیت را بررسی می‌کند
اتصالاز طریق API مجازی‌ساز یا ارائه‌دهندهSSH برای لینوکس و WinRM برای ویندوز، بدون Agent
مثالساخت ده ماشین روی Proxmox با یک ماژولنصب و سخت‌سازی Nginx روی همان ماشین‌ها
فرآیند اجرای کار

مراحل پیاده‌سازی Infrastructure as Code، از فهرست‌برداری تا تحویل مخزن کد

۱. فهرست‌برداری و اولویت‌بندی

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

۲. طراحی ساختار کد

ساختار مخزن، ماژول‌ها و Roleها، محل State، مدیریت رمزها و روش بازبینی تغییرات را تعیین می‌کنیم.

۳. کدنویسی و تست

کد را اول روی محیط تست اجرا می‌کنیم، نتیجه را با وضعیت فعلی مقایسه می‌کنیم و بعد منابع production را مرحله‌ای زیر مدیریت کد می‌آوریم.

۴. تحویل و آموزش

مخزن کد، مستندات و Pipeline را تحویل می‌دهیم و روش اعمال تغییر جدید را با تیم شما مرور می‌کنیم.

محدوده خدمت Infrastructure as Code

شامل این خدمت

  • ماژول‌های Terraform یا OpenTofu برای Proxmox، VMware و بسترهای دارای Provider
  • Playbook و Roleهای Ansible برای سرورهای لینوکس
  • Remote State با قفل هم‌زمانی و Mirror برای Providerها
  • اتصال به Pipeline و جریان بازبینی GitOps
  • Import زیرساخت موجود و مستندسازی

خارج از این خدمت

چرا کانفیگ سرور؟

کدی که بعد از تحویل هم قابل نگهداری است

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

01

شناخت زیرساخت کنار ابزار

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

02

طراحی متناسب با شرایط ایران

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

03

بخشی از زنجیره DevOps

IaC کنار Docker، Kubernetes و CI/CD در خدمات DevOps و امنیت طراحی می‌شود.

سوالات متداول

پرسش‌های رایج درباره Infrastructure as Code

Infrastructure as Code (IaC) چیست؟

Infrastructure as Code یا زیرساخت به‌عنوان کد، یعنی تعریف سرورها، شبکه و تنظیمات در فایل‌های متنی که مثل کد نرم‌افزار در Git نسخه‌بندی، بازبینی و اجرا می‌شوند. نتیجه، محیط‌های یکسان، تغییرات قابل ردیابی و بازسازی سریع پس از خرابی است.

ترافورم چیست و چه کاری انجام می‌دهد؟

Terraform ابزاری برای ساخت و مدیریت زیرساخت با زبان HCL است. وضعیت مطلوب را توصیف می‌کنید و Terraform با مقایسه آن با State فعلی، منابع لازم را از طریق Provider هر بستر، مثل Proxmox یا vSphere، می‌سازد، تغییر می‌دهد یا حذف می‌کند.

Ansible چیست و چه تفاوتی با Terraform دارد؟

Ansible ابزار متن‌باز خودکارسازی پیکربندی است که بدون Agent و از طریق SSH روی سرورها Task اجرا می‌کند. Terraform بیشتر برای ساخت منابع و Ansible برای پیکربندی داخل آن‌ها به کار می‌رود و معمولاً هر دو کنار هم استفاده می‌شوند.

استفاده از Terraform در ایران با وجود تحریم ممکن است؟

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

OpenTofu چیست و جایگزین Terraform می‌شود؟

OpenTofu انشعاب متن‌باز Terraform است که پس از تغییر لایسنس Terraform به BSL در سال ۲۰۲۳ زیر نظر بنیاد لینوکس ایجاد شد. بیشتر کدهای Terraform بدون تغییر یا با تغییر کم روی آن اجرا می‌شوند. برای پروژه‌های جدید OpenTofu را پیشنهاد می‌کنیم و در پروژه‌های موجود، مهاجرت را بر اساس Providerهای مورد استفاده بررسی می‌کنیم.

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

بله. منابع موجود با قابلیت Import به State اضافه می‌شوند و کد مطابق وضعیت فعلی نوشته می‌شود تا plan هیچ تغییری نشان ندهد. از آن به بعد، تغییرات فقط از مسیر کد انجام می‌شود.

هزینه پیاده‌سازی Infrastructure as Code چطور برآورد می‌شود؟

هزینه بر اساس تعداد و تنوع منابع، بسترهای درگیر، نیاز به Import زیرساخت موجود و اتصال به Pipeline برآورد می‌شود. پس از بررسی رایگان اولیه، قیمت به‌صورت استعلامی اعلام می‌شود.

می‌خواهید زیرساخت‌تان تکرارپذیر و قابل ردیابی باشد؟

بسترها، تعداد سرورها و کارهای دستی تکراری تیم خود را در تلگرام بنویسید تا کارشناس ما نقطه شروع مناسب IaC را پیشنهاد دهد.