Skip to content

AWS Lambda هي خدمة حوسبة بدون خادم تتيح لك تشغيل الكود دون الحاجة إلى توفير أو إدارة الخوادم.

في هذا الدليل، سنقوم بنشر خادم HTTP Bun إلى AWS Lambda باستخدام Dockerfile.

NOTE

قبل المتابعة، تأكد من أن لديك:

إنشاء Dockerfile جديد

تأكد من أنك في الدليل الذي يحتوي على مشروعك، ثم قم بإنشاء Dockerfile جديد في الجذر الخاص بمشروعك. يحتوي هذا الملف على التعليمات لتهيئة الحاوية ونسخ ملفات المشروع المحلية وتثبيت التبعيات وتشغيل التطبيق.

docker
# استخدام صورة محول 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. هذا يجعل عمليات البناء أسرع وأصغر:

docker
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# أي ملفات أو مجلدات أخرى تريد استبعادها

بناء صورة Docker

تأكد من أنك في الدليل الذي يحتوي على Dockerfile، ثم قم ببناء صورة Docker. في هذه الحالة، سنسمي الصورة bun-lambda-demo ونضع علامة latest.

bash
# 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 للمستودع كمتغير بيئة. هذا اختياري، لكنه يجعل الخطوات التالية أسهل.
bash
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --query 'repository.repositoryUri' --output text)
echo $ECR_URI
txt
[id].dkr.ecr.us-east-1.amazonaws.com/bun-lambda-demo

NOTE

إذا كنت تستخدم IAM Identity Center (SSO) أو قمت بتكوين AWS CLI مع ملفات تعريف، فستحتاج إلى إضافة العلم `--profile` إلى أوامر AWS CLI.

على سبيل المثال، إذا كان ملف التعريف الخاص بك يسمى my-sso-app، استخدم --profile my-sso-app. تحقق من تكوين AWS CLI باستخدام aws configure list-profiles لمعرفة ملفات التعريف المتاحة.

bash
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:

bash
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URI
txt
Login Succeeded

NOTE

إذا كنت تستخدم ملف تعريف، استخدم العلم `--profile`:
bash
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.

bash
docker tag bun-lambda-demo:latest ${ECR_URI}:latest

ثم، ادفع الصورة إلى مستودع ECR.

bash
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.

تعيين عنوان URL للدالة

إنشاء الدالة

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

إنشاء دالة

الحصول على عنوان URL للدالة

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

عنوان URL للدالة

اختبار الدالة

🥳 تطبيقك الآن يعمل! لاختبار الدالة، يمكنك إما الانتقال إلى علامة التبويب Test، أو استدعاء عنوان URL للدالة مباشرة.

bash
curl -X GET https://[your-function-id].lambda-url.us-east-1.on.aws/
txt
Hello from Bun on Lambda!

Bun بواسطة www.bunjs.com.cn تحرير