سادهسازی ساخت ایمیج با EC2 Image Builder و CDK
خلاصهٔ کاملتر
تو یه پست مهمان تو وبلاگ AWS، تیم فناوریهای نو شرکت Company 3 تعریف کرده که چطور ایمیجهای ماشین (AMI) و ایمیجهای کانتینری محیط کار هنرمندهای جلوههای ویژه و تصحیح رنگ رو با EC2 Image Builder میسازه و با AWS CDK ساختشون رو تکرارپذیر میکنه. به گفتهٔ نویسندهها، دردسر اصلی از جایی شروع میشه که مفهوم نسخه تو Image Builder با مفهوم نسخه تو کد زیرساخت جور درنمیاد.
کامپوننتها و رسیپیهای Image Builder تغییرناپذیرن، یعنی هر تغییر یه نسخهٔ جدید میسازه، و شمارهٔ نسخه هم بخشی از ARN منبعه. پس یه ویرایش ساده تو یه کامپوننت یه زنجیرهٔ پنجمرحلهای راه مینداخت: آپدیت کامپوننت، بالا بردن نسخهش، آپدیت ARN توی رسیپی، بالا بردن نسخهٔ رسیپی، و آخرش آپدیت ARN رسیپی توی پایپلاین. رو دهها کامپوننت، این کار دستی خطاخیز و غیرمقیاسپذیر بود.
راهحل موقتی تیم این بود که هش MD5 محتوا رو به اسم کامپوننت بچسبونن تا CDK فقط وقتی محتوا عوض شده آپدیت بزنه. جواب میداد ولی اسمها غیرقابلنگهداری میشدن و با semantic versioning بقیهٔ زیرساخت همخوانی نداشت. قدم بعدی استفاده از Custom Resourceهای CDK بود که انتشار نسخه رو خودکار کرد، ولی خودش بدهی فنی آورد: نگهداشتنش دانش تخصصی میخواست و آنبوردینگ آدم جدید رو سخت میکرد.
نقطهٔ عطف نوامبر ۲۰۲۵ بود که Image Builder قابلیت auto-versioning رو بهصورت نیتیو اضافه کرد. کامپوننتهایی که اسم و نسخهٔ سمانتیک یکسان دارن، اگه توسعهدهنده از x بهعنوان وایلدکارد استفاده کنه (مثل 1.2.x)، خودشون build version رو بالا میبرن. پایپلاینها هم میتونن به بالاترین نسخهٔ موجود کامپوننت و رسیپی resolve بشن، پس کل اون زنجیرهٔ انتشار نسخه از بین میره.
تغییر دوم اومدن کانستراکتهای L2 برای EC2 Image Builder بود (فعلاً تو فاز alpha stabilization). قبلش راهاندازی یه پایپلاین بیش از ۵۰ خط کد و ساخت دستی رول IAM با کمترین دسترسی و اینستنسپروفایل میخواست؛ حالا با پیشفرضهای امن سرویس، کمتر از ۱۰ خط کافیه:
const l2ImagePipeline = new imagebuilder.ImagePipeline(stack, 'L2ImagePipeline', {
recipe: new imagebuilder.ImageRecipe(stack, 'L2ImageRecipe', {
baseImage: imagebuilder.AwsManagedImage.amazonLinux2023(stack, 'AL2023'),
components: [
{ component: imagebuilder.AwsManagedComponent.updateOS(stack, 'UpdateOS', {
platform: imagebuilder.Platform.Linux }) },
],
}),
});نویسندهها میگن با این دو تا تغییر تونستن کانستراکتهای سفارشیشون رو کامل بازنشسته کنن و در عوض پیشفرضهای امن مثل الزام IMDSv2 و رولهای IAM با حداقل دسترسی رو مجانی بگیرن. به گفتهٔ اونها مهمترین دستاورد اینه که آدم جدید تو تیم بهجای چند ساعت، تو چند دقیقه کد زیرساخت رو میفهمه.
نکات کلیدی:
- کامپوننت و رسیپی تو Image Builder تغییرناپذیرن و نسخه بخشی از ARNشونه، برای همین آپدیت دستی زنجیرهای میشه
- راهحل قدیمی تیم (هش MD5 روی اسم کامپوننت) کار میکرد ولی با semantic versioning جور نبود
- auto-versioning از نوامبر ۲۰۲۵ با وایلدکارد x نسخهها رو خودکار بالا میبره
- پایپلاین میتونه به بالاترین نسخهٔ موجود کامپوننت و رسیپی resolve بشه
- کانستراکتهای L2 پایپلاین رو از ۵۰+ خط به کمتر از ۱۰ خط میرسونن و IAM با حداقل دسترسی رو خودکار میسازن




