آیا Terraform زیرساخت شما را انقلابی میکند؟
Terraform دستیار شما برای مدیریت زیرساخت در Cloud وبلاگ تخصصی آلیاسیس
هر ارائهدهنده میتواند رابط با یک API خاص، ارائهدهندگان SaaS و ارائهدهندگان ابر را فعال کند و منابع تعریفشده را در معرض دید قرار دهد. صرفنظر از اینکه کدام ارائهدهنده که استفاده میشود، منابع با زبان پیکربندی HCL تعریف میشوند. پس از تأیید، مرحلهی 3 که اعمال است شروع شده و ترافورم تمام عملیات پیشنهادی را به ترتیبی که داده شدهاست، انجام میدهد. البته، Terraform همیشه قبل از ایجاد تغییرات، وابستگیهای منابع را بررسی میکند. به عنوان مثال، در صورتی که کاربر تعداد ماشینهای مجازی را در ابر خصوصی مجازی (VPC) تغییر دهد، Terraform ابتدا VPC را دوباره ایجاد کرده و سپس ماشینهای مجازی را افزایش میدهد. همانطور که در بالا ذکر شد، Terraform یک ابزار قدرتمند و انعطافپذیر است و در مقایسه با ابزارهای Cloud-Native IaC به خوبی با چندین سرویس ابری کار میکند.
بعد از قبول کردن این تغییرات، زیرساخت شما برای راهاندازی کامل با Terraform آماده میشود. در حالی که ترافورم میتواند زیرساخت را از پایه راهاندازی و مدیریت کند. در نهایت، Terraform امکان مدیریت کل چرخه عمر زیرساخت را فراهم میکند؛ اما Ansible این قابلیت را ندارد. Ansible یک ابزار دیگر در IaC است که برای خودکار کردن پیکربندی و مدیریت سیستمها طراحی شده است. تفاوت اصلی این است که Ansible ابزاری برای راهاندازی زیرساخت نیست و از یک روش مرحلهای پیروی میکند. درست است که ترافورم و کوبرنتیز هر دو ابزار قدرتمندی در دنیای رایانش ابری هستند، اما باید بدانید که این دو در سطوح مختلفی کار میکنند و نمیتوانند جایگزین یکدیگر باشند اما میتوانند در کنار هم به خوبی کار کنند.
زیرساخت تغییرناپذیر به زیرساختی اطلاق میشود که پس از ایجاد آن هرگز ویرایش نمیشود اینکه که کدام باشد به ما بستگی دارد. با اینکه هر دو از API استفاده میکنند، ابزار کاملی از خط فرمان دراختیار ندارند. باوجوداین، هر دو ابزار از امنیت کامل برخوردار است و استفاده از آن به نیاز زیرساختی شما بستگی دارد. در مقابل، میتوانیم از ترافورم برای راهاندازی و هماهنگی زیرساختها استفاده کنیم. همچنین، مدیریت کامل چرخهی حیات یک نرمافزار با استفاده از Terraform امکانپذیر است؛ در حالی که در Ansible همچین قابلیتی وجود ندارد.
تصویر زیر نشان میدهد که چگونه OPA با دادههای JSON برای تأیید خطمشیهای تجاری کار میکند. به عنوان مثال، به جای ماهها انتظار، اکنون میتوان در چند روز یک سرور تهیه کرد و کد تولید را مستقر کرد. این امر نه تنها شرکتها را از پرداخت هزینههای هنگفت اولیه نجات میدهد، بلکه مقداری از انعطافپذیری را فراهم میکند که قبلا در مورد مقیاسبندی زیرساختهای فناوری اطلاعات بر اساس تقاضا دیده نشده بود. با مدیریت زیرساختها با استفاده از کد، نسخهبرداری و پیگیری تغییرات بسیار آسان خواهد شد. باتوجهبه اینکه ارائه منابع ابری بهصورت منطقی انجام میشود، از آن برای ایجاد مجموعهای باثبات و با زیرساختهای دارای مقیاس میتوان استفاده کرد. Terraform برای مدیریت منابع خود از یک فایل به نام State استفاده میکند که تمام وضعیت منابع را ذخیره میکند.
IaC به مجموعهای از عملیات گفته میشود که در آن زیرساخت که میتواند شامل شبکه و تنظیمات مربوط به آن، سرورها، ماشینهای مجازی و… باشد، بهواسطه زبان برنامهنویسی مدیریت میشود. ترافورم هم ازجمله ابزارهای ضروری برای مدیریت زیرساخت در فضای ابری است که از IaC برای این منظور استفاده میکند. باتوجهبه اهمیت این موضوع در بحث DevOps و زیرساختهای ابری، در این مطلب از بلاگ آکادمی ابرها، درباره Terraform صحبت و به نکات مهم مرتبط با IaC اشاره کردیم. کاربران ترافورم پیکربندی زیرساختها را با استفاده از زبان پیکربندیای شبیه به JSON با نام HCL (زبان پیکربندی HashiCorp) تعریف و اجرا میکنند. سینتکس ساده HCL باعث میشود تا تیمهای DevOps بتوانند زیرساختها را در چندین پایگاه داده ابری و داخلی فراهم و مجدداً ارائه کنند.
Terraform با فراهم کردن امکاناتی مانند Multi-Cloud Management (مدیریت چندین فضای ابری) و State Management (مدیریت وضعیت زیرساخت)، یکی از انعطافپذیرترین ابزارها برای مدیریت زیرساختها به شمار میرود. از آنجا که Terraform به صورت Declarative (اعلامی) کار میکند، تنها کافی است زیرساخت مورد نظر خود را تعریف کنید و سپس Terraform بهصورت خودکار تمامی مراحل ایجاد، تغییر یا حذف آن منابع را انجام میدهد. Pulumi یک ابزار منبع-باز IaC است که توسط کاربران زیادی در سراسر جهان استفاده میشود. این ابزار برای طراحی، استقرار و مدیریت منابع زیرساختهای ابری استفاده میشود. Pulumi برخلاف Terraform از زبان نرمافزاری مخصوص دامنه استفاده نمیکند و به کاربران اجازه میدهد که در محیطهای برنامهنویسی مختلفی مانند JavaScript، GO و.NET و غیره مستقر شوند. یکی از مزایای اصلی Terraform این است که cloud-agnostic است، به این معنی که تقریبا با تمام ارائه دهندگان خدمات ابری از جمله AWS، Azure، GCP، Alibaba و غیره کار میکند.
معماری برنامه N-tier به شما امکان می دهد اجزای برنامه را به طور مستقل مقیاس بندی نمایید. یک برنامه کاربردی میتواند شامل مجموعهای از وب سرورها باشد که از یک ردیف پایگاه داده استفاده میکنند. Terraform به شما امکان می دهد منابع هر لایه را با هم مدیریت کنید و به طور خودکار وابستگی های بین لایه ها را مدیریت نمایید. به عنوان مثال، Terraform یک ردیف پایگاه داده را قبل از تهیه وب سرورهای وابسته به آن مستقر می کند. باینری متنباز برای Terraform Core برای دانلود و استفاده در خط فرمان در دسترس است. فایلهای پیکربندی که ارائه میکنید (وضعیت دلخواه شما) و وضعیت فعلی (فایل stateای که فقط توسط Terraform تولید و مدیریت میشود) دو منبع ورودی هستند که توسط Terraform’s Core استفاده میشوند.
این روش به کاربرهای DevOps کنترل بیشتری میدهد؛ اما نیاز به کار بیشتری هم دارد. Ansible برای راهاندازی سرورهایی که نرمافزار و بهروزرسانیهای لازم از قبل روی آنها تنظیم شده، مناسبتر است. با پارامترسازی نام سطل، نسخهسازی و خطمشی، این ماژول S3 میتواند برای اهداف و محیطهای متعدد مورد استفاده مجدد قرار گیرد. Ansible برای مدیریت کانفیگها استفاده میشه، ولی Terraform مخصوص ایجاد و مدیریت زیرساختهاست. Terraform initدستور Terraform init یک دایرکتوری کاری Terraform را با دانلود و نصب هر افزونه و وابستگی مورد نیاز مقداردهی اولیه میکند. زیرساخت قابل تغییر به ارتقای نرم افزار با ویرایش نرم افزار موجود اشاره دارد.
استفاده از فایلهای tfvars در ترکیب با فضاهای کاری بهترین راه برای مدیریت پویا زیرساخت بر اساس سناریوهای مختلف است. پس از پیکربندی، کاربران میتوانند از بلوک module در پیکربندی Terraform خود برای ارجاع به ماژولها در رجیستری خصوصی استفاده کنند، درست مانند ماژولهای در دسترس عموم (پابلیک). رجیستریهای ماژول خصوصی را میتوان بر روی پلتفرمهای مختلفی میزبانی کرد، از جمله ارائه دهندگان ابر، سرورهای داخلی و ابزارهای متنباز. در Terraform، یک ماژول کانتینری (container) برای مجموعهای از منابع مرتبط است که با هم برای انجام یک کار خاص استفاده میشوند. ماژولها به کاربران امکان سازماندهی و استفاده مجدد از کد زیرساخت خود را میدهند و مدیریت استقرار زیرساختهای پیچیده را آسانتر میکنند. این فایلها حاوی تعریف منابع زیرساختی است که Terraform مدیریت خواهد کرد و همچنین هر متغیر و ماژول ورودی و خروجی.
همانطور که محیط های ابری به طور فزاینده پیچیده می شوند، مدیریت کارآمد زیرساخت در چندین ارائه دهنده می تواند یک کار دلهره آور باشد. Enter Terraform، یک ابزار منبع باز قدرتمند توسط HashiCorp، طراحی شده برای کمک به شما در تعریف و ارائه زیرساخت ابری با استفاده از یک گردش کاری ثابت و قابل تکرار. در این راهنما، ما Terraform را معرفی میکنیم، قابلیتهای آن را بررسی میکنیم و نمونههای عملی را برای کمک به شما برای شروع مدیریت زیرساختهای ابری مرور میکنیم. از آنجایی که پیکربندی شما در یک فایل نوشته شده است، میتوانید آن را به یک سیستم کنترل نسخه یا VCS متعهد کنید و از Terraform Cloud برای مدیریت کارآمد گردشهای کاری Terraform در بین تیمها استفاده کنید. هر ارائهدهنده ترافورم API خاص خود را دارد که ارتباط و مدیریت زیرساخت را راحتتر میکند. همچنین، ازطریق ترافورم میتوانید برنامههای کاربردی وب ایجاد و رمزگذاری و پیکربندی شبکه را با کمک آن مدیریت کنید.
این وضعیت توسط Terraform برای map کردن منابع دنیای واقعی به پیکربندی و پیگیری metadata منابع استفاده میشود تا Terraform بتواند هرگونه تغییر در منابع در یک مقطع زمانی معین را شناسایی کند. OPA یک موتور خط مشی منبع باز است که به کاربر اجازه میدهد تا خط مشی را به عنوان کد با استفاده از یک زبان برنامه نویسی اعلانی (Rego) تنظیم و آن را در کل پشته اعمال کند. این خطمشیها را میتوان در pipelineهای CI/CD در برابر فایلهای JSON که طرح terraform ایجاد میکند، تنفیذ کرد. اکثر ارائه دهندگان خدمات ابری مجموعهای از ابزارها و خدمات خود را برای IaC دارند. در این بازار شلوغ، یک رویکرد مشترک مورد نیاز بود که بتوان از آن در همه جا استفاده کرد. ابزاری که اولین بار در سال ۲۰۱۴ توسط شرکتی به نام HashiCorp در دسترس قرار گرفت.
یعنی با هر تغییر در محیط، پیکربندی فعلی با یک پیکربندی جدید که تغییرات را در نظر گرفته، جایگزین و زیرساخت دوباره راهاندازی میشود. حتی، پیکربندیهای قبلی به عنوان نسخههای مختلف نگه داشته میشوند تا در صورت نیاز، امکان بازگشت به نسخههای قدیمی وجود داشته باشد. ترافورم یک ابزار «زیرساخت مبتنی بر کد» (IaC) است که تیمهای DevOps از آن برای خودکار کردن کارهای مختلف مرتبط با زیرساخت استفاده میکنند. این ابزار متن باز، به هیچ سرویس ابری خاصی وابسته نیست و با زبان برنامهنویسی Go نوشته شده و توسط شرکت HashiCorp ساخته شده است. ابزار Terraform دارای ویژگیهای زیادی است، از جمله استفاده آسان از بلوکها، نظرات، آرگومانها و توابع داخلی. استفاده از متغیرها، محلیها و منابع داده، انعطاف پذیری را برای نوشتن کدهای تمیز، کوچک و قابل استفاده مجدد فراهم میکند.
HashiCorp نسخهای تجاری از Terraform را با نام Terraform Enterprise ارائه کرده است. نسخه یادشده شامل ویژگیهای سازمانی برای استفاده از این ابزار و فریمورکی با نام Sentinel است که میتواند خطمشیها را بهعنوان کد پیادهسازی کند. قبل از آنکه بهسراغ ابزار Terraform برویم، باید اطلاعات بیشتری از IaC بهدست آوریم. زیرساخت بهعنوان کد (IaC) روشی مبتنیبر IT است که زیرساخت فناوری اطلاعات زیربنایی برنامه را ازطریق برنامهنویسی مدیریت میکند. این رویکرد برای تخصیص منابع به توسعهدهندگان امکان میدهد تا علاوهبر مدیریت منطقی منابع، بر روند آن نیز نظارت کنند. با استفاده از این تکنیک، دیگر نیازی نیست تا تیم عملیاتی بهصورت دستی هر منبع موردنیاز را پیکربندی کند.
همچنین، Terraform قوانین کدگذاری سختگیرانهای دارد؛ در حالی که Pulumi اینطور نیست و همین باعث میشود تا در بعضی مواقع انعطافپذیرتر باشد. با اینکه Pulumi انعطافپذیری بیشتری دارد، اما Terraform به طور کلی برای پروژههای بزرگ و گستردهتر، مناسبتر است. پس از تایید، Terraform نمونه EC2 را تهیه می کند، وب سرور آپاچی را نصب و راه اندازی می کند و آدرس IP عمومی نمونه را خروجی می دهد. برای مشاهده پیام “Hello, World” می توانید از این IP در مرورگر خود بازدید کنید. برای اجرای این پیکربندی، مراحل مشابه قبلی را طی کنید (terraform init, terraform plan, terraform apply). وقتی HashiCorp برای آموزش به بزرگترین مشتریان خود نیاز دارد، به برایان و گیب مراجعه میکند.
با ایجاد یک ماژول Terraform برای یک سطل S3، منابع منطقی مرتبط را گروه بندی کردید، و سپس می توانید بسته به نیاز، با برخی از تنظیمات یا منابع جدید S3 مجدداً از آن استفاده کرده و آن را به روز کنید. چرا اینقدر مهمه؟ چون دیگه نیاز نیست واسه هر تغییر کوچیکی کلی زمان بزاری یا بخوای دستی همه چی رو تنظیم کنی. Terraform یه جورایی مثل جعبه ابزار جادوییه که زیرساختاتو به سادهترین و منظمترین شکل ممکن میسازه و مدیریت میکنه. این کار برای بررسی اینکه آیا کد در همه سناریوها همانطور که انتظار میرود کار میکند یا خیر انجام میگیرد. این به ویژه در مورد زیرساختها صادق است، جایی که یک خطای کوچک میتواند کل محیط را در عرض چند ثانیه از بین ببرد.
جایگزینهای مختلفی برای Terraform در بازار IaC وجود دارد که هر کدام دارای مزایاومعایب و موارد استفاده خاص خودشان هستند. در اینجا، به بررسی تعدادی از ابزارهای اصلی IaC موجود در بازار میپردازیم. به طور کلی، کاربردهای Terraform در کمک به مدیریت کل اکوسیستم فناوری اطلاعات از طریق IaC خلاصه میشود. آکادمی ابرها، یک بنگاه آموزشی است که تلاش میکند به افراد متخصص یا مستعد در کسب تخصص کسبوکارهای آنلاین کمک کند تا چالشهای کمتر و کسبوکاری حرفهایتر و روبهرشد داشته باشند. تا اینجای مقاله، اطلاعات جامعی درباره ترافورم و کاربرد و مزیتهای آن بهدست آوردیم؛ اما حالا باید ببینیم که چطور میتوان این ابزار را نصب کرد. به عبارت دیگر، ترافورم مثل یک معمار عمل میکند که کل زیرساخت را طراحی و مدیریت میکند.
Pulumi یک ابزار متنباز محبوب در حوزه IaC هست که برای طراحی، راهاندازی و مدیریت منابع زیرساخت ابری به کار میرود. برعکس ترافورم، Pulumi از یک زبان برنامهنویسی خاص برای زیرساخت استفاده نمیکند و به کاربر اجازه میدهد تا با زبانهای گو، دات نت، جاوا اسکریپت و … زیرساخت را مدیریت کند. یکی از مهمترین کاربردهای ترافورم، تأمین زیرساخت ابری عمومی برای ارائهدهندگان سرویس ابری است. ارائه زیرساخت مبتنی بر کد (IaC) برای این سرویسها، همواره یکی از اهداف اصلی Terraform بوده و همچنان بر همین رویه تمرکز دارد. این ابزار از طریق ارائهدهندهها به ابرهای مختلف متصل میشود و APIهای موجود و زبانهایی مانند Azure Bicep (مرتبط با مایکروسافت آژور) را به نحوی ترجمه میکند که با سینتکس ترافورم سازگار شوند. Terraform به کاربران اجازه می دهد تا با استفاده از فایل های پیکربندی و کنترل نسخه ، کل زیرساخت خود را تعریف کنند.
علاوه بر این، سازگاری را با اعمال پیکربندی دقیقاً یکسان در بین محیطها برای اطمینان از استانداردسازی بهبود میبخشد. ماژول ها بیشتر برای کاهش پیچیدگی و تکرار استفاده می شوند.ماژول Terraform برای سازماندهی کد از نظر شکستن زیرساخت های پیچیده به قطعات کوچکتر که معنی دارند می درخشد. برای مدیریت کارآمدتر زیرساخت، رویکرد ذخیرهسازی حالت Terraform از راه دور ارجح است. به طوری که چندین تیم میتوانند بدون ایجاد اختلال در محیط با هم کار کنند، زیرا همه به یک پرونده وضعیت ارجاع داده میشوند. هر ابزار IaC باید وضعیت زیرساخت و پیکربندی مدیریت شده را ذخیره کند تا منابع ایجاد شده توسط پیکربندی را ردیابی کند و آنها را به منابع دنیای واقعی map کند. به طور پیش فرض Terraform اطلاعات مربوط به وضعیت زیرساخت را در یک فایل محلی به نام terraform.tfstate ذخیره میکند.
این سیستم به توسعهدهندهها اجازه میدهد تا استقرار (deployment) برنامهها را روی گرههای (node) یک خوشه محاسباتی (compute cluster) زمانبندی کنند. Kubernetes همچنین به طور فعال روی کارهای کانتینری نظارت میکند تا مطمئن شود که وضعیت آنها با خواستههای کاربر مطابقت دارد. به عبارت دیگر، Kubernetes به شما کمک میکند تا چندین کانتینر را با هم به عنوان یک واحد مدیریت کنید و از اجرای درست و همیشگی آنها اطمینان حاصل کنید. ماژول ها و فضاهای کاری Terraform ویژگی های قدرتمندی برای مدیریت زیرساخت های مقیاس پذیر هستند. با ایجاد ماژول های قابل استفاده مجدد و پارامتری شده، مدیریت وابستگی بین آنها و استفاده از فضاهای کاری، می توانید زیرساخت های پیچیده خود را ساده کنید.
برای استفاده از Terraform، باید از زبان برنامهنویسی HCL استفاده کنید. HCL مخفف HashiCorp Configuration Language است و سینتکسهای تقریباً سادهای دارد. پروتکل چیست؛ در دنیای شبکهها و ارتباطات دیجیتال، پروتکلها نقش کلیدی در تبادل اطلاعات و هماهنگی میان دستگاهها ایفا میکنند. در این مقاله، ابتدا بررسی میکنیم پروتکل شبکه چیست و چرا نقش آن در دنیای فناوری امروز حیاتی است. به جای ارائههای طولانی و خستهکننده، ما سطح کار را بالا بردهایم و Terraform را با یک رویکرد 100٪ عملی و مبتنی بر آزمایشگاهها به شما آموزش میدهیم. Terraform Cloud اکنون این شاخه را برای تغییرات نظارت میکند و بر این اساس اجرای آن را آغاز میکند.
هنگامی که فرمان استقرار و اجرای سرور ، پایگاه داده یا متعادل کننده بار داده می شود ، Terraform کد را تجزیه می کند و آن را به یک رابط برنامه نویسی برنامه (API) به ارائه دهنده منبع ترجمه می کند. این مطلب مزایایی را که ابزارهایی مانند Terraform بر ابزارهای مدیریت زیرساخت بومی ابری به ارمغان میآورد بررسی میکند. Terraform میتواند به شما در اجرای سیاستها در مورد انواع منابعی که تیمها میتوانند تهیه و استفاده کنند، کمک کند. فرآیندهای بررسی مبتنی بر بلیط یک گلوگاه است که می تواند توسعه را کند نماید. در عوض، میتوانید از Sentinel، یک چارچوب سیاست بهعنوان کد، برای اجرای خودکار سیاستهای انطباق و حاکمیت قبل از اینکه Terraform تغییرات زیرساختی را انجام دهد، استفاده نمایید.
در یک سازمان بزرگ، تیم عملیات متمرکز شما ممکن است درخواستهای زیرساختی تکراری زیادی دریافت کند. شما میتوانید از Terraform برای ساخت یک مدل زیرساختی «self-serve» استفاده کنید که به تیمهای محصول اجازه میدهد زیرساختهای خود را به طور مستقل مدیریت نمایند. Terraform Cloud همچنین میتواند با سیستمهای فروش بلیط مانند ServiceNow ادغام شود تا بهطور خودکار درخواستهای زیرساخت جدید ایجاد کند. هر دو ابزار Terraform و Ansible میتوانند زیرساخت ایجاد و آن را مدیریت کنند؛ این سوال پیش میآید که نقش Terraform چیست؟ باید گفت Terraform راهکار جامعتری برای مدیریت زیرساخت ارائه میدهد. در آموزش ترافورم خواهید دید این ابزار از APIهای ارائهدهنده خدمات ابری برای ایجاد یا حذف زیرساخت استفاده میکند. درمقابل، اگرچه Ansible میتواند زیرساخت ابری ایجاد کند، عملکردش طوری است که درمقایسهبا Terraform در مدیریت پیکربندی و زیرساخت میدرخشد، نه تأمین زیرساخت.
برنامه نویسی سی پلاس پلاس