Terraform چیست؟
Terraform یک ابزار محبوب زیرساخت به عنوان کد (infrastructure-as-code) است که امکان میدهد تهیه و مدیریت منابع زیرساخت را خودکار کنید. از فایلهای پیکربندی نوشته شده در زبان پیکربندی HashiCorp (HCL) برای تعریف وضعیت مطلوب زیرساخت و از دستورات مختلفی برای اعمال این تنظیمات و مدیریت منابع آن استفاده میکند.
Terraform چگونه کار میکند؟
با ترافرم، کاربران میتوانند منابع زیرساخت را با استفاده از یک زبان پیکربندی ساده و اعلانی تعریف کنند. این منابع میتواند شامل ماشینهای مجازی، اجزای شبکه، منابع ذخیره سازی و غیره باشد. هنگامی که پیکربندی تعریف شد، Terraform میتواند برای ایجاد، ویرایش و حذف کردن این منابع به روشی قابل تکرار و قابل پیش بینی استفاده شود.
یکی از مزایای کلیدی Terraform توانایی آن در پشتیبانی از چندین ارائه دهنده ابر و همچنین ابزارهای داخلی و متنباز است. بدان معنی است که کاربران میتوانند منابع زیرساخت را با استفاده از یک پیکربندی واحد تعریف نموده و از Terraform برای مدیریت منابع در محیطهای مختلف استفاده کنند.
به طور کلی، Terraform ابزاری قدرتمند و انعطافپذیر است که کاربران را قادر میسازد تا منابع زیرساختی را به روشی قابل استفاده مجدد و خودکار تعریف و مدیریت کنند. به طور گسترده در صنایع و سناریوهای مختلف از جمله زیرساخت ابری، مراکز داده و محیط های ترکیبی (هیبرید) استفاده میشود.
کامپوننتهای معماری Terraform
فایلهای پیکربندی Terraform
این فایلها حاوی تعریف منابع زیرساختی است که Terraform مدیریت خواهد کرد و همچنین هر متغیر و ماژول ورودی و خروجی. فایلهای پیکربندی به زبان پیکربندی HashiCorp (HCL) نوشته شدهاند، که یک زبان domain-specific است و به طور خاص برای Terraform طراحی شده است.
فایل State در ترافرم
این فایل وضعیت فعلی منابع زیرساخت مدیریت شده توسط Terraform را ذخیره میکند. فایل state برای ردیابی منابعی که ایجاد، ویرایش یا حذف شدهاند استفاده میشود و برای اطمینان از مطابقت منابع زیرساخت با وضعیت مطلوب تعریف شده در فایلهای پیکربندی استفاده میشود.
زیرساخت به عنوان کد
Terraform اجازه میدهد تا از کد برای تعریف و مدیریت زیرساخت خود استفاده کنید، نه اینکه منابع را به صورت دستی از طریق رابط کاربری پیکربندی نمائید. این کار نسخه(version)، بررسی(review) و همکاری در تغییرات زیرساخت را آسانتر میکند.
Cloud API یا سایر ارائه دهندگان زیرساخت
APIها یا سایر رابطهایی هستند که Terraform برای ایجاد، ویرایش یا حذف منابع زیرساخت استفاده میکند. Terraform از چندین ارائه دهنده ابر و همچنین ابزارهای داخلی و متنباز پشتیبانی میکند.
ارائه دهندگان
Terraform با طیف گستردهای از ارائه دهندگان ابر و زیرساخت، از جمله AWS، Azure، GCP و غیره ادغام میشود. این ارائه دهندگان به Terraform اجازه میدهند تا منابع را روی آن پلتفرمها ایجاد و مدیریت کند.
به طور کلی، معماری یک استقرار Terraform شامل فایلهای پیکربندی، یک فایل وضعیت (state) و یک CLI است که با APIهای ابری یا سایر ارائهدهندگان زیرساخت برای ایجاد، ویرایش یا حذف منابع تعامل دارد. این معماری، کاربران را قادر میسازد تا منابع زیرساختی را به روشی اعلامی و قابل استفاده مجدد تعریف و مدیریت کنند.
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
ماژولهای Terraform
در Terraform، یک ماژول کانتینری (container) برای مجموعهای از منابع مرتبط است که با هم برای انجام یک کار خاص استفاده میشوند. ماژولها به کاربران امکان سازماندهی و استفاده مجدد از کد زیرساخت خود را میدهند و مدیریت استقرار زیرساختهای پیچیده را آسانتر میکنند.
ماژولها با استفاده از بلوک module در پیکربندی Terraform تعریف میشوند. یک بلوک ماژول آرگومانهای زیر را میگیرد:
- Source: لوکیشن سورس ماژول که میتواند یک مسیر local یا یک URL باشد.
- name: نام ماژول که برای ارجاع به ماژول در سایر قسمتهای پیکربندی استفاده میشود.
- Version: نسخه ماژول مورد استفاده که اختیاری است و میتوان از آن برای تعیین نسخه خاصی از ماژول استفاده کرد.
در داخل یک بلوک ماژول، کاربران میتوانند منابعی را که ماژول را تشکیل میدهند، و همچنین هر متغیر ورودی و خروجی که ماژول در معرض نمایش قرار میدهد، تعریف کنند. متغیرهای ورودی به کاربران این امکان را میدهند که هنگام فراخوانی، مقادیر را به ماژول ارسال کنند و متغیرهای خروجی به ماژول اجازه میدهند تا مقادیر را به پیکربندی فراخوانی بازگرداند. ماژولها میتوانند تودرتو باشند و به کاربران اجازه میدهند معماریهای زیرساختی پیچیده را با استفاده از یک ساختار سلسله مراتبی ایجاد کنند. ماژولها همچنین میتوانند در Terraform Registry منتشر و به اشتراک گذاشته شوند و کاربران را قادر میسازد تا از کد زیرساخت دیگران استفاده مجدد کرده و آن را گسترش دهند.
Terraform Core چیست؟
باینری متنباز برای Terraform Core برای دانلود و استفاده در خط فرمان در دسترس است. فایلهای پیکربندی که ارائه میکنید (وضعیت دلخواه شما) و وضعیت فعلی (فایل stateای که فقط توسط Terraform تولید و مدیریت میشود) دو منبع ورودی هستند که توسط Terraform’s Core استفاده میشوند. سپس Core طرحی را برای اینکه چه منابعی باید با استفاده از این دانش اضافه، ویرایش یا حذف شوند، ایجاد میکند.
چرا Terraform ؟
Terraform مزایای بسیاری دارد و ابزاری پرکاربرد در سازمانهای کنونی برای مدیریت زیرساختهایشان است.
- پشتیبانی چند ابری (Multi-Cloud) و چند ارائه دهنده (Multi-Provider)
Terraform میتواند چندین ابر را در یک زمان مانند خدمات وب آمازون (AWS)، Azure، و Google Cloud Platform (GCP) مدیریت کند، همچنین میتوانید زیرساختهای داخلی خود را مدیریت کنید. زبان مورد استفاده در ترافرم، Hashi Crop Language (HCL) است.
- Terraform ابزار مدیریت اعلانی (Declerative) است
ترافرم نیازی به گفتن مرحله به مرحله (step-by-step) ندارد، فقط میتوانید وضعیت مطلوبی را که میخواهید ذکر کنید Terraform به طور خودکار به آن خواهد رسید. به طوری که terraform را یک ابزار مدیریت اعلانی مینامند.
- زیرساخت های تغییرپذیر و تغییرناپذیر
زیرساخت قابل تغییر به ارتقای نرم افزار با ویرایش نرم افزار موجود اشاره دارد. زیرساخت تغییرناپذیر به زیرساختی اطلاق میشود که پس از ایجاد آن هرگز ویرایش نمیشود اینکه که کدام باشد به ما بستگی دارد.
- مدیریت وضعیت (State)
Terraform اطلاعات مربوط به منابعی که ایجاد کرده است را در یک فایل حالت (terraform. tfstate) ثبت میکند. این به Terraform امکان میدهد بداند کدام منابع تحت کنترل آن هستند و چه زمانی آنها را بهروزرسانی و حذف کند.
رجیستری ماژول خصوصی (Private Module Registry)
رجیستری ماژول خصوصی، مخزنی برای ماژولهای Terraform است که به جای اینکه در دسترس عموم قرار گیرد، فقط برای گروه خاصی از کاربران قابل دسترسی است. ثبت ماژولهای خصوصی برای سازمانهایی مفید هستند که میخواهند کد زیرساخت خود را بهجای استفاده از ماژولهای در دسترس عموم از Terraform Registry مدیریت و توزیع کنند.
برای استفاده از رجیستری ماژول خصوصی، کاربران باید Terraform CLI خود را برای احراز هویت با رجیستری و دسترسی به ماژولها پیکربندی کنند که معمولا شامل تنظیم یک نشانه دسترسی (token) یا سایر روشهای احراز هویت و تعیین URL رجیستری در پیکربندی Terraform است.
پس از پیکربندی، کاربران میتوانند از بلوک module در پیکربندی Terraform خود برای ارجاع به ماژولها در رجیستری خصوصی استفاده کنند، درست مانند ماژولهای در دسترس عموم (پابلیک). رجیستریهای ماژول خصوصی را میتوان بر روی پلتفرمهای مختلفی میزبانی کرد، از جمله ارائه دهندگان ابر، سرورهای داخلی و ابزارهای متنباز.
به طور کلی، رجیستری ماژولهای خصوصی ابزار مفیدی برای سازمانهایی است که میخواهند ماژولهای Terraform خود را به صورت داخلی مدیریت و توزیع کنند و آنها را قادر میسازد کد زیرساخت خود را بهتر کنترل و استفاده مجدد کنند.
دستورات Terraform
Terraform init
دستور Terraform init یک دایرکتوری کاری Terraform را با دانلود و نصب هر افزونه و وابستگی مورد نیاز مقداردهی اولیه میکند. باید قبل از هر دستور دیگر Terraform اجرا شود.
$ terraform init
Terraform Validate
دستور اعتبارسنجی دقیقا همان چیزی را که از نامش پیداست را انجام داده و تضمین میکند که کد از لحاظ داخلی منسجم باشد و آن را برای اشتباهات سینتکس بررسی میکند. فقط فایلهای پیکربندی (*.tf) در دایرکتوری فعال مورد بررسی قرار میگیرند. اگر میخواهید فایلهای داخل پوشهها را تایید کنید (مثلا اگر یک ماژول/دایرکتوری دارید) باید فلگ بازگشتی a- را استفاده نمائید.
$ terraform validate
Terraform Apply
دستور apply Terraform اعمال تغییرات تعریف شده در پیکربندی را در زیرساخت شما اعمال میکند. مطابق با پیکربندی، منابع را ایجاد یا آپدیت میکند، و همچنین از شما میخواهد که قبل از اعمال تغییرات، آنها را تایید کنید.
$ terraform apply
Terraform Destroy
دستور Terraform destroy تمام منابع ایجاد شده توسط Terraform در دایرکتوری کاری فعلی را از بین میبرد. این یک دستور مفید برای از بین بردن زیرساخت شما در زمانی که دیگر به آن نیاز ندارید است.
$ terraform destroy
Terraform Import
یک منبع موجود را به حالت Terraform ایمپورت کرده و اجازه میدهد تا توسط Terraform مدیریت شود.
$ terraform import
Terraform Console
یک کنسول تعاملی برای ارزیابی عبارات در پیکربندی Terraform باز میکند.
$ terraform console
Terraform Refresh
این دستور وضعیت زیرساخت را به روز میکند تا وضعیت واقعی منابع را منعکس نماید. زمانی مفید است که میخواهید اطمینان حاصل کنید که حالت Terraform شما با وضعیت واقعی زیرساخت هماهنگ است.
$ terraform refresh
مزایای Terraform
- پیکربندی اعلانی: Terraform از یک زبان پیکربندی اعلانی استفاده میکند، به این معنی که کاربران وضعیت مطلوب منابع زیرساخت خود را تعریف میکنند، نه مراحل خاص مورد نیاز برای رسیدن به آن حالت. این امر درک و مدیریت استقرار زیرساختهای پیچیده را آسانتر میکند.
- پشتیبانی از چندین ارائهدهنده ابری: Terraform از چندین ارائهدهنده ابر، و همچنین ابزارهای داخلی و متنباز پشتیبانی میکند، به این معنی که کاربران میتوانند منابع زیرساخت خود را با استفاده از یک پیکربندی واحد تعریف و مدیریت کنند.
- کد زیرساخت قابل استفاده مجدد: Terraform به کاربران اجازه میدهد تا با استفاده از ویژگیهایی مانند ماژولها و متغیرها، منابع زیرساخت خود را به روشی قابل استفاده مجدد و ماژولار تعریف کنند. این امر مدیریت و نگهداری استقرار زیرساختهای پیچیده را آسانتر میکند.
- همکاری و کنترل نسخه: فایلهای پیکربندی Terraform را میتوان در سیستمهای کنترل نسخه مانند Git ذخیره کرد، که همکاری و ردیابی تغییرات زیرساختها را برای تیمها آسانتر میکند.
- مدیریت کارآمد منابع: Terraform دارای ویژگیهایی مانند وابستگی به منابع و تامین کنندگان است که کاربران را قادر میسازد منابع زیرساختی خود را به طور کارآمد مدیریت کنند، duplication را به حداقل میرساند و اطمینان حاصل میکند که منابع به ترتیب درست ایجاد و حذف شوند.
معایب Terraform
- پیچیدگی: یادگیری و استفاده از Terraform میتواند پیچیده باشد، به خصوص برای کاربرانی که تازه وارد اتوماسیون زیرساخت شدهاند. دارای تعداد زیادی ویژگی است و درک کامل دامنه قابلیتهای آن دشوار است.
- مدیریت حالت: Terraform از یک فایل حالت برای ردیابی منابعی که مدیریت میکند استفاده مینماید، که در صورت عدم هماهنگی فایل state با زیرساخت واقعی، میتواند مشکلاتی را ایجاد کند. اگر زیرساخت خارج از Terraform تغییر کند یا فایل حالت از بین رفته یا خراب شود، ممکن است این اتفاق بیفتد.
- عملکرد: Terraform میتواند کندتر از سایر ابزارهای IaC باشد، به خصوص در هنگام مدیریت استقرار زیرساخت های بزرگ که میتواند به دلیل نیاز به برقراری ارتباط با چندین API و سربار مدیریت فایل state باشد.
- مدیریت خطای محدود: Terraform مدیریت خطای قوی ندارد و تشخیص و رفع مشکلات در صورت بروز میتواند سخت باشد، که عیب یابی مشکلات مربوط به استقرار زیرساختها را دشوار میکند.
- قابلیتهای بازگشت محدود(Limited Rollback): Terraform ویژگی بازگشتی داخلی ندارد، بنابراین اگر مشکلی پیش بیاید، بازگرداندن تغییرات در زیرساخت دشوار است. کاربران میتوانند از دستور terraform destroy برای از بین بردن تمام منابع تعریف شده در پیکربندی استفاده کنند، اما این امر میتواند زمانبر باشد و ممکن است در همه شرایط امکان پذیر نباشد.