پیکوسیستم خدمات فنی IT
دواپس و اتوماسیون

Infrastructure as Code: خودکارسازی سرورها با Terraform و Ansible

سروری که چند سال پیش با دست تنظیم شده، معمولاً مستندی ندارد و بازسازی اش بدون Infrastructure as Code حدس و گمان است. در این روش، تنظیمات در Ansible و Terraform نوشته می شود، در گیت می ماند و هر بار همان نتیجه را می دهد. ما این کد را از روی سرورهای فعلی شما می نویسیم.

ابزارها و فناوری ها infrastructure-as-code
  • Terraform
  • Ansible
  • Packer
  • cloud-init
  • Proxmox VE
  • VMware vSphere
  • GitLab CI
  • Molecule
5بخش کار
4خروجی
4مرحله

Infrastructure as Code چیست؟

Infrastructure as Code یعنی نوشتن تنظیمات سرورها، ماشین های مجازی و رکوردهای DNS به صورت کد در ابزارهایی مثل Ansible و Terraform، تا این تنظیمات در گیت بماند و هر بار همان نتیجه را بدهد. این روش برای سازمانی لازم است که نمی داند روی سرورهایش دقیقاً چه تنظیماتی اعمال شده، راه اندازی هر سرور جدید یک روز کار دستی می برد یا مطمئن نیست بتواند سرور از دست رفته را عیناً بازسازی کند. پیکوسیستم وضعیت فعلی سرورها را ثبت می کند، برای کارهای تکراری مثل هاردنینگ اولیه، نصب Nginx و PHP و مدیریت کلیدهای SSH نقش های Ansible می نویسد، ماشین های Proxmox یا vSphere و شبکه ها را در Terraform تعریف می کند و اجرای تغییرات را به پایپ لاین CI با بازبینی پیش از اعمال می سپارد. تحویلی مخزن گیت کد، README اجرا و گزارش اختلاف تنظیمات سرورها با وضعیت مطلوب است.

چه زمانی به Infrastructure as Code نیاز دارید؟

  • نمی دانیم روی سرورها دقیقاً چه تنظیماتی اعمال شده است.
  • راه اندازی هر سرور جدید یک روز کار دستی است.
  • سرورهایی که قرار بود یکسان باشند، با هم فرق دارند.
  • اگر یک سرور از بین برود، مطمئن نیستیم بتوانیم عین آن را بسازیم.

Infrastructure as Code شامل چه کارهایی است؟

01

ثبت وضعیت فعلی

جمع آوری تنظیمات سرورها، بسته های نصب شده، کاربران، قواعد فایروال و سرویس ها به عنوان مبنای کدنویسی.

02

نقش های Ansible

نوشتن roleهای Ansible برای کارهای تکراری مثل هاردنینگ اولیه، نصب Nginx و PHP و مدیریت کاربران و کلیدهای SSH، با inventory جداگانه برای هر محیط.

03

Terraform برای منابع

تعریف ماشین های مجازی Proxmox یا vSphere، شبکه ها و رکوردهای DNS در Terraform، با state ذخیره شده در backend امن.

04

قالب ماشین مجازی

ساخت template با Packer و cloud-init تا ماشین جدید بدون نصب دستی سیستم عامل با تنظیمات پایه آماده شود.

05

اجرا از پایپ لاین

اجرای terraform plan و ansible-playbook از طریق CI با بازبینی تغییرات پیش از اعمال، تا هیچ تغییری بدون ثبت در گیت روی سرور نرود.

بعد از Infrastructure as Code چه چیزی تحویل می گیرید؟

  • مخزن گیت شامل playbookها، roleها و ماژول های Terraform
  • README برای اجرای هر playbook و افزودن سرور جدید
  • گزارش اختلاف تنظیمات سرورها با وضعیت مطلوب
  • جلسه آموزش برای تیم عملیات

راهنمای Infrastructure as Code

Terraform state را کجا نگه داریم و چرا مهم است؟

Terraform وضعیت منابعی را که ساخته در فایل terraform.tfstate نگه می دارد و این فایل رمزها و مقادیر حساس را به صورت متن ساده در خود دارد. commit کردن آن در گیت یکی از رایج ترین اشتباهات است. اگر دو نفر هم زمان terraform apply اجرا کنند و state قفل نشود، فایل خراب می شود و Terraform دیگر نمی داند چه چیزهایی را مدیریت می کند.

برای تیم های کوچک، backend مدیریت شده GitLab که قفل و نسخه بندی state را دارد، ساده ترین گزینه است. در غیر این صورت backend از نوع S3 روی MinIO داخلی با قفل فعال راه اندازی می کنیم. منابعی که پیش از این با دست ساخته شده اند با terraform import یا بلوک import وارد state می شوند و لازم نیست دوباره ساخته شوند.

Ansible AWX یا اجرای playbook از پایپ لاین GitLab؟

AWX پروژه متن باز پشت Ansible Automation Platform است. رابط وب، کنترل دسترسی برای هر تیم، زمان بندی اجرای playbookها و محل امن نگهداری credentialها را می دهد و تاریخچه هر اجرا را نگه می دارد. در عوض خودش یک سرویس است که با AWX Operator روی کوبرنتیز نصب می شود و نگهداری و به روزرسانی می خواهد.

اگر تیم شما کوچک است و تغییرات همیشه از مسیر merge request می گذرند، اجرای ansible-playbook از GitLab CI کافی است و چیز تازه ای برای نگهداری اضافه نمی کند. AWX وقتی ارزش دارد که افرادی بیرون از تیم فنی، مثل واحد پشتیبانی، باید playbookهای مشخصی را بدون دسترسی مستقیم به سرورها اجرا کنند.

اشتباهات رایج در اتوماسیون کانفیگ سرور

تکیه زیاد بر ماژول های shell و command به جای ماژول های اختصاصی Ansible، playbook را غیر idempotent می کند و اجرای دوم همان تغییر را تکرار می کند یا خطا می دهد. رمزهایی که مستقیم در group_vars نوشته شده اند باید با ansible-vault رمزنگاری شوند یا در Vault بمانند.

نسخه ها هم باید ثابت شوند: نسخه collectionها در requirements.yml و نسخه providerها در فایل .terraform.lock.hcl که باید در گیت بماند. بزرگ ترین مشکل اما انسانی است. اگر بعد از کدنویسی کسی همچنان با SSH تنظیمات را دستی تغییر دهد، کد و سرور دوباره از هم فاصله می گیرند. اجرای زمان بندی شده playbook در حالت check این اختلاف را زود نشان می دهد.

دامنه پروژه Infrastructure as Code به چه عواملی بستگی دارد؟

تعداد نقش های متفاوت سرور از تعداد سرورها مهم تر است. بیست وب سرور یکسان یک role می خواهند و پنج سرور که هر کدام کار متفاوتی می کنند پنج role. تنوع سیستم عامل ها هم اثر دارد، چون پشتیبانی هم زمان از Ubuntu، AlmaLinux و ویندوز کار بیشتری از یک توزیع واحد می برد.

عوامل دیگر در دسترس بودن API برای hypervisor یا ارائه دهنده ابری، وجود پایپ لاین CI و مخزن گیت، مقدار مستندات فعلی و وضعیت مدیریت رمزهاست.

مراحل Infrastructure as Code

  1. 01

    فهرست و اولویت

    سرورها و منابع را فهرست می کنیم و با شما تعیین می کنیم کدام بخش اول به کد تبدیل شود.

  2. 02

    کدنویسی و تست

    roleها و ماژول ها را می نویسیم و روی محیط آزمایشی با Molecule یا ماشین های موقت تست می کنیم.

  3. 03

    اعمال مرحله ای

    ابتدا روی یک سرور کم اهمیت در حالت check اجرا می کنیم، اختلاف ها را بررسی می کنیم و سپس سراغ بقیه می رویم.

  4. 04

    تحویل

    مخزن و مستندات را تحویل می دهیم و اجرای روزمره را با تیم شما تمرین می کنیم.

سؤالات متداول درباره Infrastructure as Code

Ansible بهتر است یا Terraform؟ برای زیرساخت کوچک کدام لازم است؟

این دو کار متفاوتی انجام می دهند: Terraform منابعی مثل ماشین مجازی، شبکه و DNS را می سازد و Ansible تنظیمات داخل سرور را اعمال می کند. اگر فقط یک یا دو سرور دارید، یک playbook ساده Ansible برای مستندسازی و بازسازی کافی است و کار زیادی نمی برد. Terraform و اجرا از پایپ لاین برای وقتی است که تعداد سرورها یا تغییرات زیاد است.

Terraform با Proxmox و ابرهای داخلی کار می کند؟

برای Proxmox و VMware provider فعال وجود دارد. برای برخی ابرهای داخلی provider یا API مناسب هست و در بقیه از Ansible روی API استفاده می کنیم. پیش از شروع، پشتیبانی را برای زیرساخت شما بررسی می کنیم.

اتوماسیون کانفیگ سرور روی سرورهای در حال کار خطر ندارد؟

اگر بی دقت اجرا شود، دارد. به همین دلیل playbookها را اول با --check و --diff اجرا می کنیم، تغییرات را با شما مرور می کنیم و اعمال را در زمان توافق شده انجام می دهیم.

جست وجوهای مرتبط

  • Terraform
  • Ansible
  • Infrastructure as Code Terraform
  • Infrastructure as Code Ansible
  • Ansible vs Terraform
  • Ansible AWX
  • Ansible چیست
  • Terraform چیست

استعلام

کارتان را بگویید، مسیر و هزینه را می گوییم

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

  1. 01درخواست را می خوانیم و اگر ابهامی بود تماس می گیریم.
  2. 02در صورت نیاز، بررسی اولیه ریموت یا بازدید انجام می شود.
  3. 03پیشنهاد مکتوب با دامنه کار، زمان بندی و هزینه می فرستیم.

اطلاعات شما فقط برای پاسخ به همین درخواست استفاده می شود.