AWS Lambda هي خدمة حوسبة بدون خادم تتيح لك تشغيل الكود دون الحاجة إلى توفير أو إدارة الخوادم.
في هذا الدليل، سنقوم بنشر خادم HTTP Bun إلى AWS Lambda باستخدام Dockerfile.
NOTE
قبل المتابعة، تأكد من أن لديك:إنشاء Dockerfile جديد
تأكد من أنك في الدليل الذي يحتوي على مشروعك، ثم قم بإنشاء Dockerfile جديد في الجذر الخاص بمشروعك. يحتوي هذا الملف على التعليمات لتهيئة الحاوية ونسخ ملفات المشروع المحلية وتثبيت التبعيات وتشغيل التطبيق.
# استخدام صورة محول AWS Lambda الرسمية للتعامل مع وقت تشغيل Lambda
FROM public.ecr.aws/awsguru/aws-lambda-adapter:0.9.0 AS aws-lambda-adapter
# استخدام صورة Bun الرسمية لتشغيل التطبيق
FROM oven/bun:debian AS bun_latest
# نسخ محول Lambda إلى داخل الحاوية
COPY --from=aws-lambda-adapter /lambda-adapter /opt/extensions/lambda-adapter
# تعيين المنفذ إلى 8080. هذا مطلوب لمحول AWS Lambda.
ENV PORT=8080
# تعيين دليل العمل إلى `/var/task`. هذا هو دليل العمل الافتراضي لـ Lambda.
WORKDIR "/var/task"
# نسخ package.json و bun.lock إلى داخل الحاوية
COPY package.json bun.lock ./
# تثبيت التبعيات
RUN bun install --production --frozen-lockfile
# نسخ بقية التطبيق إلى داخل الحاوية
COPY . /var/task
# تشغيل التطبيق.
CMD ["bun", "index.ts"]NOTE
تأكد من أن أمر البدء يتوافق مع نقطة دخول التطبيق. يمكن أن يكون هذا أيضًا `CMD ["bun", "run", "start"]` إذا كان لديك نص بدء في `package.json`.تقوم هذه الصورة بتثبيت التبعيات وتشغيل التطبيق باستخدام Bun داخل حاوية. إذا لم يكن للتطبيق تبعيات، يمكنك حذف السطر RUN bun install --production --frozen-lockfile.
أنشئ ملف .dockerignore جديد في الجذر الخاص بمشروعك. يحتوي هذا الملف على الملفات والمجلدات التي يجب استبعادها من صورة الحاوية، مثل node_modules. هذا يجعل عمليات البناء أسرع وأصغر:
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# أي ملفات أو مجلدات أخرى تريد استبعادهابناء صورة Docker
تأكد من أنك في الدليل الذي يحتوي على Dockerfile، ثم قم ببناء صورة Docker. في هذه الحالة، سنسمي الصورة bun-lambda-demo ونضع علامة latest.
# cd /path/to/your/app
docker build --provenance=false --platform linux/amd64 -t bun-lambda-demo:latest .إنشاء مستودع ECR
لدفع الصورة إلى AWS Lambda، نحتاج أولاً إلى إنشاء مستودع ECR لدفع الصورة إليه.
من خلال تشغيل الأمر التالي، نقوم بما يلي:
- إنشاء مستودع ECR باسم
bun-lambda-demoفي منطقةus-east-1 - الحصول على URI للمستودع وتصدير URI للمستودع كمتغير بيئة. هذا اختياري، لكنه يجعل الخطوات التالية أسهل.
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --query 'repository.repositoryUri' --output text)
echo $ECR_URI[id].dkr.ecr.us-east-1.amazonaws.com/bun-lambda-demoNOTE
إذا كنت تستخدم IAM Identity Center (SSO) أو قمت بتكوين AWS CLI مع ملفات تعريف، فستحتاج إلى إضافة العلم `--profile` إلى أوامر AWS CLI.على سبيل المثال، إذا كان ملف التعريف الخاص بك يسمى my-sso-app، استخدم --profile my-sso-app. تحقق من تكوين AWS CLI باستخدام aws configure list-profiles لمعرفة ملفات التعريف المتاحة.
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --profile my-sso-app --query 'repository.repositoryUri' --output text)
echo $ECR_URIالمصادقة مع مستودع ECR
سجل الدخول إلى مستودع ECR:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URILogin SucceededNOTE
إذا كنت تستخدم ملف تعريف، استخدم العلم `--profile`:aws ecr get-login-password --region us-east-1 --profile my-sso-app | docker login --username AWS --password-stdin $ECR_URIوضع علامة ودفع صورة docker إلى مستودع ECR
تأكد من أنك في الدليل الذي يحتوي على Dockerfile، ثم ضع علامة على صورة docker باستخدام URI لمستودع ECR.
docker tag bun-lambda-demo:latest ${ECR_URI}:latestثم، ادفع الصورة إلى مستودع ECR.
docker push ${ECR_URI}:latestإنشاء دالة AWS Lambda
انتقل إلى AWS Console > Lambda > إنشاء دالة > حدد صورة الحاوية

أعطِ الدالة اسمًا، مثل my-bun-function.
تحديد صورة الحاوية
ثم، انتقل إلى قسم Container image URI، انقر على Browse images. حدد الصورة التي دفعناها للتو إلى مستودع ECR.

ثم، حدد الصورة latest، وانقر على Select image.

تهيئة الدالة
للحصول على عنوان URL عام للدالة، نحتاج إلى الانتقال إلى Additional configurations > Networking > Function URL.
اضبط هذا على Enable، مع نوع المصادقة NONE.

إنشاء الدالة
انقر على Create function في أسفل الصفحة، سيؤدي هذا إلى إنشاء الدالة.

الحصول على عنوان URL للدالة
بمجرد إنشاء الدالة، ستتم إعادة توجيهك إلى صفحة الدالة، حيث يمكنك رؤية عنوان URL للدالة في قسم "Function URL".

اختبار الدالة
🥳 تطبيقك الآن يعمل! لاختبار الدالة، يمكنك إما الانتقال إلى علامة التبويب Test، أو استدعاء عنوان URL للدالة مباشرة.
curl -X GET https://[your-function-id].lambda-url.us-east-1.on.aws/Hello from Bun on Lambda!