راهنمای کامل اجرای Docker Container در AWS Lambda (به زبان ساده)

ایجاد شده توسط Admin در مقالات 25 دسامبر 2025
اشتراک گذاری

مقدمه و مزایای داکر و Lambda



در دنیای امروز توسعه نرم‌افزار، کانتینرها به دلیل سبکی، قابلیت حمل و سازگاری بالا، به یک فناوری محبوب تبدیل شده‌اند. با این حال، انتخاب بهترین روش برای استقرار (Deploy) آن‌ها، به ویژه برای موارد ساده‌ای که تنها نیاز به اجرای یک کانتینر دارند، می‌تواند چالش‌برانگیز باشد. بسیاری از راه‌حل‌های موجود بر روی اورکستراسیون و مدیریت کانتینرهای متعدد متمرکز شده‌اند. در این مقاله، ما به سراغ یک راه‌حل ساده و قدرتمند می‌رویم: استقرار یک کانتینر داکر با استفاده از سرویس سرورلس Lambda در سکوی ابری Amazon Web Services (AWS). این ترکیب به شما امکان می‌دهد تا بدون دغدغه مدیریت زیرساخت، بر روی منطق کسب‌وکار و بهبود عملکرد برنامه خود تمرکز کنید.



کانتینرهای داکر: بسته‌بندی یکپارچه برای برنامه‌ها



داکر (Docker) ابزاری است که به شما کمک می‌کند برنامه‌ها یا نرم‌افزارها را در واحدهای قابل حمل، استاندارد و قابل اشتراک‌گذاری بسته‌بندی کنید. این واحدها که کانتینر نامیده می‌شوند، شامل تمامی ملزومات اجرای برنامه مانند کتابخانه‌ها، محیط اجرا (Runtime)، ابزارهای سیستمی و کد برنامه هستند. این ویژگی‌ها مزایای کلیدی زیر را به همراه دارند:



  • سبکی و بهینه‌سازی منابع: در مقایسه با ماشین‌های مجازی سنتی (VM)، کانتینرها بسیار سبک‌تر هستند و منابع سیستم عامل میزبان را به اشتراک می‌گذارند که منجر به مصرف کارآمدتر حافظه و پردازنده می‌شود.

  • ثبات و قابلیت اطمینان: یک کانتینر تضمین می‌کند که نرم‌افزار شما در هر محیطی، از ماشین توسعه‌دهنده گرفته تا سرور تولید، به یک شکل و بدون وابستگی‌های ناسازگار اجرا می‌شود.

  • قابلیت حمل: شما می‌توانید یک کانتینر را به راحتی بین سیستم‌های مختلف جابه‌جا کرده و اجرا کنید.



محاسبات سرورلس با AWS Lambda: حذف مدیریت زیرساخت



محاسبات سرورلس (Serverless) یک مدل اجرایی است که بار سنگین مدیریت سرورها، سیستم‌عامل و دیگر زیرساخت‌های پایه را از دوش توسعه‌دهندگان برمی‌دارد. در این مدل، شما فقط کد خود را نوشته و آن را اجرا می‌کنید، در حالی که ارائه‌دهنده سرویس ابری مانند AWS، به طور خودکار تمامی مسائل مربوط به مقیاس‌پذیری، در دسترس بودن و نگهداری سرور را مدیریت می‌کند. AWS Lambda یکی از ابزارهای پیشرو در این حوزه است. مزایای اصلی استفاده از Lambda عبارتند از:



  • مدل قیمت‌گذاری پرداخت به ازای استفاده (Pay-per-Use): شما تنها بر اساس تعداد دفعات اجرای کد، میزان حافظه‌ای که برای سرویس اختصاص داده‌اید و مدت زمان هر فراخوانی تابع، صورتحساب دریافت می‌کنید. این مدل هزینه‌ها را به شدت کاهش می‌دهد چرا که شما برای منابع بیکار پول پرداخت نمی‌کنید.

  • مقیاس‌پذیری خودکار: Lambda به طور خودکار و بدون نیاز به پیکربندی دستی، از یک درخواست در روز تا هزاران درخواست در ثانیه را مقیاس می‌دهد.

  • کارایی عملیاتی: تابع Lambda تنها در پاسخ به رویدادهای محرک (مانند یک درخواست HTTP) "زنده" می‌شود و پس از اتمام کار، منابع آزاد می‌شوند. این امر به شما امکان می‌دهد تا به جای مدیریت زیرساخت، بر توسعه ویژگی‌های جدید تمرکز کنید.



ترکیب داکر و Lambda: بهترین هر دو دنیا



حال، با ترکیب قدرت داکر و AWS Lambda، می‌توانیم به یک راه‌حل بهینه دست یابیم. پشتیبانی Lambda از کانتینرها این امکان را فراهم می‌سازد که شما برنامه خود را با تمام وابستگی‌هایش درون یک تصویر داکر بسته‌بندی کنید و سپس آن را به عنوان یک تابع سرورلس در Lambda اجرا نمایید. این ترکیب مزایای زیر را ارائه می‌دهد:



  • تمرکز بر مزیت رقابتی: این روش استقرار، شما را از دردسرهای مدیریت پلتفرم و سرور رها کرده و اجازه می‌دهد تمام انرژی خود را بر روی منطق کسب‌وکار، بهبود عملکرد و ایجاد ارزش برای محصول خود متمرکز کنید.

  • انعطاف‌پذیری بیشتر در وابستگی‌ها: از آنجایی که همه چیز درون کانتینر بسته‌بندی شده است، می‌توانید از کتابخانه‌ها و ابزارهای خاصی استفاده کنید که ممکن است به طور پیش‌فرض در محیط Lambda در دسترس نباشند.

  • یکنواختی در چرخه توسعه: شما می‌توانید کانتینر را به طور یکسان در محیط توسعه، آزمایش و تولید اجرا کنید که همکاری بین تیم‌ها را ساده‌تر و خطاها را کاهش می‌دهد.


در ادامه این مسیر، پس از ساختن و تست تصویر داکر به صورت محلی، آن را در رجیستری کانتینر Amazon ECR آپلود کرده و در نهایت به عنوان یک تابع Lambda مستقر خواهیم کرد تا قدرتمندی این ترکیب را در عمل مشاهده کنیم.



الزامات و پیش‌نیازهای فنی



دانش و ابزارهای پایه


برای دنبال کردن این آموزش، نیاز به درک مفاهیم اولیه و نصب چند ابزار ضروری دارید. دانش اولیه در مورد داکر و نحوه عملکرد آن از ملزومات اصلی است. علاوه بر این، باید داکر را به صورت محلی روی سیستم خود نصب کرده باشید. همچنین، برای تعامل با سرویس‌های ابری آمازون، لازم است AWS CLI (رابط خط فرمان AWS) نیز روی کامپیوتر شخصی شما نصب شده باشد. این ابزار امکان اجرای دستورات لازم برای ایجاد و مدیریت منابع در حساب AWS شما را فراهم می‌کند.



پیکربندی حساب AWS


یک حساب کاربری AWS با مجوزهای لازم، رکن اصلی این فرآیند است. شما به یک حساب AWS نیاز دارید که دارای اعتبار (کلیدهای دسترسی) با امتیازات مدیریتی برای انجام فراخوانی‌های API از طریق CLI باشد. بهترین روش این است که این مجوزها دقیقاً به مواردی محدود شود که برای انجام کار لازم است. این رویکرد اصل کمترین امتیاز را رعایت کرده و امنیت حساب شما را افزایش می‌دهد. پس از ایجاد این اعتبار‌ها، باید با اجرای دستور aws configure و ارائه اطلاعات مورد نیاز، CLI را به صورت محلی پیکربندی کنید.



مدیریت محیط پایتون (اختیاری اما توصیه‌شده)


اگرچه برای هسته اصلی استقرار داکر در لامبدا ضروری نیست، اما بخشی از فرآیند شامل تست برنامه به صورت محلی است. برای این منظور، برنامه نمونه از یک فایل پایتون استفاده می‌کند. استفاده از مدیران محیط مجازی پایتون مانند uv (که در متن به عنوان گزینه‌ای اختیاری ذکر شده) یا ابزارهای مشابه مانند venv بسیار توصیه می‌شود. این محیط‌های مجازی با ایزوله کردن کتابخانه‌ها و وابستگی‌های پروژه از سیستم کلی، از بروز مشکلات ناشی از تضاد نسخه‌های مختلف کتابخانه‌ها جلوگیری می‌کنند و تضمین می‌کنند که برنامه شما در یک محیط پایدار و قابل تکرار اجرا می‌شود.



خلاصه الزامات فنی


به طور خلاصه، برای آغاز این مسیر باید موارد زیر را آماده کنید:



  • دانش پایه در مورد داکر و نصب آن روی سیستم محلی.

  • یک حساب AWS با اعتبارهای امنیتی دارای مجوزهای مناسب.

  • نصب و پیکربندی AWS CLI روی کامپیوتر شخصی.

  • یک مدیر محیط مجازی پایتون مانند uv (اختیاری اما بسیار مفید).


با فراهم آوری این پیش‌نیازها، پایه محکمی برای طی کردن مراحل بعدی، از ساخت تصویر داکر تا استقرار نهایی آن روی سرویس لامبدای AWS، خواهید داشت.



ساخت و تست کانتینر به صورت محلی



مقدمه‌ای بر فرآیند ساخت و اجرای محلی


قبل از استقرار هر کانتینری در محیط ابری، مرحله‌ای حیاتی و ضروری وجود دارد: ساخت و تست محلی. این مرحله به شما اطمینان می‌دهد که تصویر داکر شما به درستی ساخته شده و برنامه درون کانتینر به شکلی که انتظار دارید عمل می‌کند. داکر با بسته‌بندی برنامه شما به همراه تمام وابستگی‌هایش در واحدهای قابل حمل به نام کانتینر، یک محیط یکسان و قابل اطمینان از مرحله توسعه تا استقرار فراهم می‌کند. تمرکز این بخش بر روی همین فرآیند ساخت تصویر، ایجاد کانتینر از روی آن و در نهایت آزمایش عملکرد برنامه قبل از ارسال به رجیستری کانتینر است.



آماده‌سازی پروژه و ساخت تصویر داکر


اولین قدم برای اجرای یک کانتینر داکر، ساخت یک تصویر است. تصویر داکر به عنوان یک الگو یا قالب عمل می‌کند که شما از آن نمونه‌های کانتینر را ایجاد می‌کنید. برای این کار به یک فایل با نام `Dockerfile` نیاز دارید که نقشه راه ساخت تصویر را مشخص می‌کند. هر خط در این فایل یک "دستور" (Directive) نامیده می‌شود و دستورالعمل‌های خاصی را به موتور داکر ارائه می‌دهد. یک `Dockerfile` معمولاً با انتخاب یک تصویر پایه شروع می‌شود. برای مثال، اگر برنامه شما مبتنی بر پایتون است، تصویر پایه می‌تواند چیزی شبیه به `public.ecr.aws/lambda/python:3.12` باشد. دستور بعدی معمولاً کپی کردن فایل‌های کد برنامه شما (مانند `lambda_function.py`) به یک مسیر مشخص درون تصویر پایه است. در نهایت، یک دستور برای راه‌اندازی برنامه هنگام اجرای کانتینر اضافه می‌شود. پس از آماده‌سازی `Dockerfile`، می‌توانید با اجرای دستور `docker build` از دایرکتوری ریشه پروژه، تصویر نهایی را بسازید.



اجرای کانتینر و آزمایش عملکرد برنامه


پس از ساخت موفقیت‌آمیز تصویر، نوبت به ایجاد یک کانتینر در حال اجرا از روی آن می‌رسد. با استفاده از دستوری مانند `docker run` می‌توانید کانتینر را به صورت تعاملی اجرا کنید تا لاگ‌های تولید شده توسط برنامه را به صورت زنده مشاهده کنید. در این دستور، اغلب یک پورت از میزبان (مانند پورت 8080) به پورت داخل کانتینر نگاشت می‌شود تا امکان ارتباط با برنامه فراهم شود. اکنون باید تأیید کنید که برنامه درون کانتینر می‌تواند درخواست‌ها را دریافت و پردازش کند. برای این آزمایش، می‌توانید از یک اسکریپت پایتون ساده با استفاده از کتابخانه `requests` استفاده کنید. بهتر است این آزمایش را درون یک محیط مجازی (Virtual Environment) مانند `uv` انجام دهید تا از بروز конфlicts نسخه‌های کتابخانه‌ها جلوگیری شود. با ارسال یک درخواست POST حاوی یک payload ساده JSON به آدرس `localhost` و پورت مشخص شده، باید پاسخ مورد انتظار از برنامه را دریافت کنید. این پاسخ نشان می‌دهد که کانتینر به درستی ساخته شده و عملکرد برنامه محلی تأیید شده است.



جمع‌بندی و گام بعدی


در این بخش، شما به طور کامل فرآیند ساخت یک تصویر داکر از روی یک `Dockerfile`، اجرای یک کانتینر از آن تصویر و آزمایش نهایی برنامه را به صورت محلی پشت سر گذاشتید. این مرحله آزمون و خطا برای اطمینان از صحت عملکرد برنامه قبل از ارسال به محیط ابری بسیار حیاتی است. اکنون که یک تصویر داکر کاملاً کاربردی دارید، گام بعدی ارسال این تصویر به یک رجیستری کانتینر مانند Amazon ECR است تا آماده استقرار در یک سرویس بدون سرور مانند AWS Lambda شود. انجام دقیق این مراحل محلی، احتمال بروز خطا در مراحل بعدی را به شدت کاهش می‌دهد.



آپلود تصویر به ECR و تنظیمات



آماده‌سازی تصویر داکر برای آپلود در ثبتِ آمازون (ECR)


پس از اطمینان از عملکرد صحیح کانتینر در محیط لوکال، نوبت به انتقال تصویر ساخته‌شده به یک رجیستری کانتینر می‌رسد. برای این منظور و برای استفاده در سرویس AWS Lambda، تصویر شما باید در سرویس Amazon Elastic Container Registry یا ECR آپلود شود. اولین قدم در این فرآیند، تگ‌گذاری صحیح تصویر داکر است. تصویر شما در حال حاضر با یک تگ ساده مانند lambda-docker:1.0.0 مشخص شده است. اما برای آپلود در ECR، باید آن را مطابق با استانداردهای AWS نام‌گذاری کنید. این نام‌گذاری شامل آدرس رجیستری، شناسه حساب AWS، نام مخزن و تگ تصویر می‌شود.



ایجاد مخزن ECR و احراز هویت با استفاده از AWS CLI


پیش از هر چیز، نیاز به یک مخزن (Repository) در ECR دارید. این کار را می‌توان به سادگی و از طریق خط فرمان AWS CLI انجام داد. برای این کار، مطمئن شوید که AWS CLI به صورت محلی نصب شده و اعتبارنامه‌های حساب AWS شما با دستور aws configure تنظیم شده‌اند. بهترین روش این است که مجوزهای این اعتبارنامه تنها به اقدامات لازم برای این آموزش محدود شده باشد. با تعریف متغیرهای محیطی مناسب برای منطقه (Region)، شناسه حساب (Account ID) و نام مخزن، دستور ایجاد مخزن را اجرا می‌کنید. پس از ایجاد مخزن، باید داکر کلاینت محلی شما برای ارسال تصویر به ECR احراز هویت شود. AWS CLI دستور خاصی برای دریافت توکن احراز هویت و ثبت آن در داکر ارائه می‌دهد که انجام این مرحله برای اجازه آپلود تصویر ضروری است.



مراحل نهایی: تگ‌گذاری و Push تصویر


اکنون با استفاده از دستور docker tag، تصویر موجود خود را با آدرس کامل مخزن ECRای که ایجاد کردید، تگ می‌کنید. این کار در واقع یک نام مستعار برای تصویر فعلی شما ایجاد می‌کند که آدرس مقصد را نشان می‌دهد. در نهایت، با استفاده از دستور استاندارد docker push و با مشخص کردن نام تگ جدید، تصویر را به مخزن ECR در cloud آپلود می‌کنید. با اتمام این فرآیند، تصویر داکر شما به طور ایمن در ECR ذخیره شده و برای استقرار در سرویس‌های مختلف AWS مانند Lambda آماده است. این مرحله نقطه اتصال بین توسعه لوکال و اجرای سرورلس در cloud به شمار می‌رود.



ایجاد تابع Lambda بر اساس تصویر ECR


با در دسترس بودن تصویر در ECR، می‌توانید عملیات استقرار را در کنسول سرویس Lambda تکمیل کنید. با مراجعه به کنسول Lambda و انتخاب گزینه "Create a Function"، نوع منبع را "Container Image" انتخاب کنید. در این مرحله، می‌توانید مخزن ECR خود را جستجو کرده و تصویر آپلودشده را انتخاب نمایید. پس از انتخاب، می‌توانید با تنظیمات پیش‌فرض تابع را ایجاد کنید. ایجاد تابع ممکن است چند لحظه طول بکشد تا Lambda تصویر را از ECR بازیابی و محیط اجرا را آماده کند. پس از ایجاد، می‌توانید از طریق زبانه تست درون‌ساخت کنسول Lambda، درخواستی مشابه تست لوکال به تابع ارسال کرده و از صحت عملکرد آن اطمینان حاصل کنید.



استقرار و تست روی Lambda

آماده‌سازی برای استقرار در Lambda

پس از اینکه تصویر داکر خود را با موفقیت در ECR آپلود کردید، نوبت به ایجاد تابع Lambda می‌رسد. ابتدا وارد کنسول AWS Lambda شوید و روی گزینه 'Create a Function' کلیک کنید. در این مرحله، گزینه 'Container Image' را انتخاب نمایید تا بتوانید از تصویری که در مرحله قبل به ECR推送 کردید استفاده کنید.

ایجاد تابع Lambda با تصویر کانتینر

در صفحه ایجاد تابع، باید مخزن ECR ای که ایجاد کرده‌اید را جستجو و انتخاب کنید. پس از انتخاب تصویر مربوطه، می‌توانید سایر تنظیمات را به صورت پیش‌فرض نگه دارید. Lambda به طور خودکار تنظیمات لازم برای اجرای کانتینر را تشخیص می‌دهد. برای تأیید، روی دکمه 'Create' کلیک کنید تا تابع شما ساخته شود.

تست عملکرد تابع مستقر شده

پس از ایجاد تابع، برای اطمینان از عملکرد صحیح، باید آن را تست کنید. به تب 'Test' در کنسول Lambda مراجعه کنید. یک رویداد تست جدید ایجاد نمایید و payload مورد نیاز برنامه که شامل کلید 'name' است را وارد کنید. با اجرای تست، باید پاسخ موفقیت‌آمیزی دریافت کنید که شامل سلام و نام وارد شده می‌باشد.

یکپارچه‌سازی با API Gateway

برای دسترسی به تابع از طریق اینترنت، می‌توانید آن را با Amazon API Gateway یکپارچه کنید. این کار امکان فراخوانی تابع شما را از طریق endpointهای REST فراهم می‌سازد. این مرحله اختیاری است اما برای برنامه‌های کاربردی که نیاز به دسترسی از سوی کلاینت‌های خارجی دارند، ضروری می‌باشد.

مدیریت هزینه و پاک‌سازی منابع

به یاد داشته باشید که پس از اتمام کار، منابع ایجاد شده شامل تابع Lambda و مخزن ECR را حذف کنید تا از هزینه‌های غیرضروری جلوگیری شود. این کار از طریق کنسول AWS یا CLI قابل انجام است. مدیریت صحیح منابع نه تنها در کنترل هزینه‌ها مؤثر است، بلکه امنیت محیط کلود شما را نیز افزایش می‌دهد.

جمع‌بندی و توصیه نهایی

استقرار کانتینرهای داکر در AWS Lambda روشی کارآمد برای اجرای برنامه‌های شما بدون دردسر مدیریت زیرساخت است. این ترکیب قدرتمند، مزایای سرورلس را با انعطاف‌پذیری داکر ادغام می‌کند. برای پروژه‌های جدید، حتماً محدودیت‌های Lambda از نظر زمان اجرا و حافظه را در نظر بگیرید و از تصاویر پایه مناسب ارائه شده توسط AWS استفاده کنید. با رعایت بهترین روش‌های امنیتی در مدیریت مجوزهای IAM، می‌توانید سیستم‌های مقیاس‌پذیر و مقرون‌به‌صرفه‌ای ایجاد نمایید.

نظرات (0)

اشتراک گذاری

این پست را با دیگران به اشتراک بگذارید

تنظیمات GDPR

When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.