معرفی
پولومی (Pulumi) پلتفرمی برای مدیریت زیرساخت بهعنوان کد (Infrastructure as Code یا IaC) است. با آن میتوانید منابعی مانند ماشین مجازی، شبکه، پایگاه داده، کلاستر Kubernetes و سرویسهای ابری را در قالب برنامه تعریف، ایجاد و بهروزرسانی کنید.
زبانهای برنامهنویسی و نحوه تعریف زیرساخت
برنامههای پولومی را میتوان با زبانهای برنامهنویسی پشتیبانیشده، از جمله TypeScript، Python، Go، C# و Java نوشت. Pulumi YAML نیز برای تعریف زیرساخت در دسترس است، اما YAML قالب پیکربندی است و زبان برنامهنویسی عمومی محسوب نمیشود. استفاده از زبانهای برنامهنویسی به شما اجازه میدهد از تابع، شرط، حلقه، ماژول، تست و کتابخانههای همان زبان استفاده کنید.
مدیریت وضعیت (State) و ملاحظات امنیتی
پولومی وضعیت منابع مدیریتشده را در یک backend نگه میدارد تا تغییر میان تعریف برنامه و زیرساخت ثبتشده را تشخیص دهد. Pulumi Cloud backend پیشفرض است، اما backendهای خودمدیریتشده در فضای ذخیرهسازی سازگار نیز قابل استفادهاند. برای تیمهای ایرانی، انتخاب Provider و محل نگهداری state باید بر پایه دسترسی واقعی سازمان به سرویس ابری، هزینه و امکان پرداخت، محل دادهها و سیاست امنیتی انجام شود.
کد ابزارهای اصلی و SDKهای پولومی متنباز هستند، اما Pulumi Cloud یک سرویس تجاری با شرایط استفاده و طرحهای قیمتگذاری جداگانه است. بنابراین هنگام انتخاب، هزینه و سیاست نگهداری state در Pulumi Cloud را با backend خودمدیریتشده مقایسه کنید.
کاربردها و نقش در تیمهای فنی
مهندسان دواپس، توسعهدهندگان بکاند و تیمهای پلتفرم معمولا از پولومی برای خودکارسازی محیطهای توسعه، آزمایشی و عملیاتی استفاده میکنند. برنامههای IaC را میتوان با Git نسخهبندی و بازبینی کرد و در گردشکار CI اجرا کرد. در این حالت، Docker میتواند فقط محیط اجرای یکسان برای CLI پولومی در jobهای CI فراهم کند، نه جایگزین پولومی در مدیریت زیرساخت.
ویژگیهای کلیدی
در ادامه، مهمترین موارد این بخش به تفکیک معرفی شدهاند.
-
تعریف زیرساخت با زبانهای عمومی
میتوانید زیرساخت را با TypeScript، Python، Go، C# یا Java تعریف کنید و از تابع، شرط و حلقه بهره ببرید. Pulumi YAML نیز گزینهای جداگانه برای پیکربندی است.
-
پشتیبانی از چند ارائهدهنده
Providerهای پولومی اتصال به سرویسها و پلتفرمهای گوناگون را فراهم میکنند. پیش از شروع، Provider و نسخه موردنیاز را در Pulumi Registry بررسی کنید.
-
پیشنمایش تغییرات پیش از اعمال
دستور pulumi preview تغییرات مورد انتظار را پیش از ساخت، حذف یا ویرایش منابع نشان میدهد تا تیم بتواند اثر تغییر را بازبینی کند.
-
مدیریت وضعیت زیرساخت
پولومی state را در backend انتخابشده نگه میدارد تا منابع ثبتشده و تغییرات لازم برای همگامسازی برنامه با زیرساخت را پیگیری کند.
-
مدیریت دادههای حساس
مقادیر Secret در state با سازوکار رمزگذاری Provider انتخابی نگهداری میشوند و CLI معمولاً آنها را پنهان میکند. با این حال، افشای راز در کد، لاگ برنامه، backend با پیکربندی نادرست یا دسترسی نامناسب همچنان ممکن است.
-
اجزای قابل استفاده مجدد
با Component Resource و پکیجها میتوانید الگوهای تکراری، مانند شبکه استاندارد یا سرویس Kubernetes، را به اجزای قابل استفاده مجدد تبدیل کنید.
کاربردها
برای آشنایی بهتر با این ابزار، توجه به موارد زیر میتواند مفید باشد.
-
ساخت محیطهای توسعه و آزمایش
تیم میتواند برای هر شاخه، پروژه یا محیط آزمایشی، منابع ابری مشابهی مانند پایگاه داده، شبکه و سرویس اجرا ایجاد و پس از پایان کار حذف کند.
-
استقرار زیرساخت Kubernetes
میتوان کلاستر، Namespace، تنظیمات دسترسی و منابع وابسته به برنامه را در یک پروژه زیرساختی تعریف و نسخهبندی کرد.
-
استانداردسازی منابع ابری
تیم پلتفرم میتواند الگوهای مشترک برای شبکه، ثبت رخداد، برچسبگذاری منابع و دسترسیها بسازد تا پروژهها با قواعد یکسان شروع شوند.
-
خودکارسازی زیرساخت در خط تحویل
در فرایند CI/CD، تغییرات زیرساخت پس از بازبینی کد پیشنمایش داده میشوند و با تأیید تیم در محیط هدف اعمال میشوند.
-
مدیریت زیرساخت همراه با کد محصول
برای سرویسهایی که منابع ابری آنها با منطق برنامه ارتباط نزدیک دارد، توسعهدهندگان میتوانند کد زیرساخت و برنامه را در یک فرایند توسعه هماهنگ نگه دارند.
-
تمرین یک گردشکار IaC کمهزینه
یک Provider و backend مجاز سازمان را انتخاب کنید، stack آزمایشی بسازید و یک منبع کمهزینه تعریف کنید. سپس pulumi preview و pulumi up را اجرا، state را بررسی و در پایان با pulumi destroy منابع را پاکسازی کنید. خروجی قابل ارزیابی، حذف کامل منبع و نبود هزینه ناخواسته است.
ابزارهای جایگزین
اگر این ابزار پاسخگوی نیاز شما نبود، گزینههای زیر را بررسی کنید.
پرسشهای رایج درباره پولومی
اگر درباره این ابزار پرسشی دارید، ممکن است پاسخ آن را در میان موارد زیر پیدا کنید.
آیا برای استفاده از پولومی باید برنامهنویس باشم؟
برای استفاده مؤثر از پولومی، آشنایی عملی با دستکم یک زبان پشتیبانیشده مانند Python یا TypeScript بسیار مفید است. Pulumi YAML نیز وجود دارد، اما مزیت اصلی پولومی در استفاده از قابلیتهای زبانهای برنامهنویسی است.
تفاوت پولومی، Terraform، OpenTofu و Ansible چیست؟
پولومی زیرساخت را با زبانهای برنامهنویسی عمومی و state مدیریت میکند. Terraform و OpenTofu نیز ابزارهای IaC مبتنی بر state هستند، اما معمولاً پیکربندی آنها با HCL نوشته میشود و اکوسیستم Provider جداگانه دارند. Ansible عمدتاً برای اتوماسیون و پیکربندی سامانهها پس از ایجاد منابع مناسب است؛ در برخی سناریوهای provisioning جایگزین نسبی است، اما هممدل مستقیم پولومی نیست.
آیا پولومی فقط برای سرویسهای ابری کاربرد دارد؟
کاربرد اصلی پولومی مدیریت منابع ابری است، اما Providerهای آن برای Kubernetes و سرویسهای دیگر نیز وجود دارند. پیش از انتخاب، وجود، پایداری و قابلیتهای Provider موردنیاز را در Pulumi Registry بررسی کنید.
وضعیت زیرساخت در پولومی کجا ذخیره میشود؟
state میتواند در Pulumi Cloud یا backendهای خودمدیریتشده پشتیبانیشده نگهداری شود. برای انتخاب محل ذخیرهسازی، سطح دسترسی اعضای تیم، سیاست امنیتی، محل دادهها، هزینه و امکان استفاده سازمان از سرویس موردنظر را بررسی کنید.
آیا Secretها در پولومی کاملاً امن هستند؟
Pulumi مقادیر Secret را با Provider رمزگذاری انتخابشده در state نگه میدارد و معمولاً در خروجی CLI پنهان میکند. این قابلیت جایگزین مدیریت درست دسترسی نیست؛ راز ممکن است از طریق کد، لاگ، خروجی برنامه یا backend با دسترسی نادرست افشا شود.
چگونه اولین پروژه پولومی را بدون ریسک هزینه آزمایش کنم؟
Provider و backend مناسب را انتخاب کنید، یک stack آزمایشی بسازید و فقط یک منبع کمهزینه یا رایگان تعریف کنید. ابتدا pulumi preview و سپس pulumi up را اجرا کنید، state را بررسی کنید و پس از آزمایش حتماً pulumi destroy را اجرا کنید.
آیا پولومی برای تیمهای کوچک هم مناسب است؟
بله، بهویژه وقتی تیم از قبل با Python، TypeScript یا زبانهای پشتیبانیشده کار میکند. برای زیرساخت ساده، هزینه یادگیری و نگهداری کد IaC را با مقدار خودکارسازی موردنیاز و هزینه backend مقایسه کنید.