أداء AWS Lambda: JavaScript مقابل Python مقابل Golang
ما هي اللغة التي يجب استخدامها لـ AWS Lambda؟
يمكننا كتابة دالة لامبدا للاستخدام في نشرها على AWS بلغات مختلفة. لنقارن أداء الدوال (التي تكاد تكون فارغة) المكتوبة بلغات JavaScript وPython وGolang…
TL;DR
بإيجاز:
اللغة | المدة المُحسوبة للتشغيل مع التسخين | المدة المُحسوبة للتشغيل | حجم الذاكرة | الحد الأقصى لاستخدام الذاكرة |
---|---|---|---|---|
Python | 197 مللي ثانية | 2 مللي ثانية | 128 ميغابايت | 32 ميغابايت |
Python S3 | 516 مللي ثانية | 35 مللي ثانية | 128 ميغابايت | 77 ميغابايت |
JavaScript | 2 مللي ثانية | 2 مللي ثانية | 128 ميغابايت | 63 ميغابايت |
JavaScript S3 | 120 مللي ثانية | 72 مللي ثانية | 128 ميغابايت | 89 ميغابايت |
Golang | 11 مللي ثانية | 1 مللي ثانية | 128 ميغابايت | 20 ميغابايت |
Golang S3 | 30 مللي ثانية | 29 مللي ثانية | 128 ميغابايت | 38 ميغابايت |
- Python لديه أطول وقت للتسخين عند استخدام 128 ميغابايت من الذاكرة،
- JavaScript هو الأبطأ بشكل عام
- Golang هو الأفضل بين الثلاثة، لكنه ليس بشكل كبير
خيار مثير للاهتمام هو تسريع دالة Python Lambda من خلال إضافة المزيد من الذاكرة، وأيضًا المعالج. من المتوقع أن يقلل فقط من وقت التسخين، أعتقد. لن يصبح الاتصال بـ S3 أقل تأخيرًا.
في الاختبار الاصطناعي لـ الأعداد الأولية
من AWS - تكاليف تشغيل دالة Python Lambda هي نفسها عند استخدام 128 ميغابايت و512 ميغابايت من حد الذاكرة،
وأداء إعداد 512 ميغابايت هو أسرع بشكل كبير.
https://docs.aws.amazon.com/lambda/latest/operatorguide/computing-power.html
ما هو AWS SAM
نحن نستخدم SAM هنا لاختبار الدوال Lambda المختلفة.
AWS SAM هو نموذج تطبيق بدون خادم.
يحتوي مشروع AWS SAM على قوالب AWS SAM والكود الخاص بالدالة. يصف قوالب SAM كيفية نشر وتشغيل واختبار دالة Lambda، والصلاحيات وغيرها من المعلمات المهمة لإنشاء مكدس CloudFormation.
للاستخدام نحتاج إلى aws cli
و sam cli
.
تثبيت AWS cli
كيفية التثبيت محليًا: تثبيت AWS CLI في وثيقة إعادة تثبيت لينكس
أو على موقع AWS: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
تثبيت SAM cli
بشكل أساسي - احصل على ملف ضغط مثبت لـ SAM cli من موقع AWS، وفك الضغط وقم بتثبيته
wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
sudo ./sam-installation/install
# تحقق من تثبيت sam
sam --version
تنظيف ملفات المثبت
rm -rf sam-installation
rm aws-sam-cli-linux-x86_64.zip
إنشاء الدوال Lambda
تشغيل النص البرمجي ثلاث مرات
sam init
واختيار نموذج hello-world كل مرة، ولكن بلغات مختلفة، نقوم بإنشاء 3 تطبيقات sam
دالة Lambda بناءً على Python 3.12
الناتج من sam init
:
-----------------------
إنشاء التطبيق:
-----------------------
الاسم: t1-py
وقت التشغيل: python3.12
الأنظمة: x86_64
مدير الاعتماديات: pip
نموذج التطبيق: hello-world
الدليل المخرج: .
ملف التكوين: t1-py/samconfig.toml
الخطوات التالية يمكن العثور عليها في ملف README في t1-py/README.md
ال الأوامر التي يمكنك استخدامها بعد ذلك
=========================
[*] إنشاء أنبوب: cd t1-py && sam pipeline init --bootstrap
[*] التحقق من صحة قوالب SAM: cd t1-py && sam validate
[*] اختبار الدالة في السحابة: cd t1-py && sam sync --stack-name {stack-name} --watch
دالة Lambda بناءً على JavaScript وnodejs20.x
الناتج من sam init
:
-----------------------
إنشاء التطبيق:
-----------------------
الاسم: t2-js
وقت التشغيل: nodejs20.x
الأنظمة: x86_64
مدير الاعتماديات: npm
نموذج التطبيق: hello-world
الدليل المخرج: .
ملف التكوين: t2-js/samconfig.toml
الخطوات التالية يمكن العثور عليها في ملف README في t2-js/README.md
...
دالة Lambda بناءً على Golang (صورة aws al2023)
الناتج من sam init
:
-----------------------
إنشاء التطبيق:
-----------------------
الاسم: t3-go
وقت التشغيل: go (provided.al2023)
الأنظمة: x86_64
مدير الاعتماديات: mod
نموذج التطبيق: hello-world
الدليل المخرج: .
ملف التكوين: t3-go/samconfig.toml
الخطوات التالية يمكن العثور عليها في ملف README في t3-go/README.md
بناء، اختبار، نشر، وتشغيل - دالة Lambda بناءً على Python
اختبار محليًا
sam build --use-container
يظهر الناتج في النهاية:
ال الأوامر التي يمكنك استخدامها بعد ذلك
=========================
[*] التحقق من صحة قوالب SAM: sam validate
[*] استدعاء الدالة: sam local invoke
[*] اختبار الدالة في السحابة: sam sync --stack-name {{stack-name}} --watch
[*] النشر: sam deploy --guided
بعد تشغيل ثلاث مرات
sam local invoke
الناتج الذي نراه:
REPORT RequestId: 3b36575a-629d-40ba-adb7-018bdb8cae63 Init Duration: 0.09 ms Duration: 46.95 ms Billed Duration: 47 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: e1233b8a-99c6-49d9-ab91-f02408a5ec6f Init Duration: 0.07 ms Duration: 44.56 ms Billed Duration: 45 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: 34772494-39ff-457d-a1c1-16cd5e177b42 Init Duration: 0.02 ms Duration: 26.35 ms Billed Duration: 27 ms Memory Size: 128 MB Max Memory Used: 128 MB
إذا أضفنا استدعاء قراءة من S3، فسيكون الناتج مختلفًا
...
REPORT RequestId: 158b806c-852d-4f6b-ab28-cdd6e0868fa1 Init Duration: 0.02 ms Duration: 675.64 ms Billed Duration: 676 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: d4cc689c-f944-49fa-9254-555266816b97 Init Duration: 0.79 ms Duration: 465.80 ms Billed Duration: 466 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: b8d30096-cd93-4787-84d7-e8f52d7e2e13 Init Duration: 0.02 ms Duration: 447.83 ms Billed Duration: 448 ms Memory Size: 128 MB Max Memory Used: 128 MB
حسنًا، كل مكالمة تأخذ نصف ثانية، واستخدام الذاكرة هو 128 ميغابايت
اختبار على AWS
sam build --use-container
sam deploy --guided
سيسأل SAM cli عن اسم مكدس CloudFormation، ثم يسأل عن التأكيد، ثم ينشر دالتنا إلى AWS. ستبدو الصفحة الأخيرة من ناتج sam على النحو التالي:
معاينة تغييرات مكدس CloudFormation قبل النشر
======================================================
هل تريد نشر هذا التغيير؟ [y/N]: Y
2024-08-17 20:19:30 - انتظر حتى يكتمل إنشاء/تحديث المكدس
أحداث CloudFormation من عمليات المكدس (تحديث كل 5.0 ثانية)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
حالة الموارد نوع المورد المعرف المنطقي سبب حالة المورد
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS AWS::CloudFormation::Stack t1-py تم بدئه من قبل المستخدم
CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole -
CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole تم بدء إنشاء المورد
CREATE_COMPLETE AWS::IAM::Role HelloWorldFunctionRole -
CREATE_IN_PROGRESS AWS::Lambda::Function HelloWorldFunction -
CREATE_IN_PROGRESS AWS::Lambda::Function HelloWorldFunction تم بدء إنشاء المورد
CREATE_COMPLETE AWS::Lambda::Function HelloWorldFunction -
CREATE_IN_PROGRESS AWS::ApiGateway::RestApi ServerlessRestApi -
CREATE_IN_PROGRESS AWS::ApiGateway::RestApi ServerlessRestApi تم بدء إنشاء المورد
CREATE_COMPLETE AWS::ApiGateway::RestApi ServerlessRestApi -
CREATE_IN_PROGRESS AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermissionProd -
CREATE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d5f9d -
CREATE_IN_PROGRESS AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermissionProd تم بدء إنشاء المورد
CREATE_COMPLETE AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermissionProd -
CREATE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d5f9d تم بدء إنشاء المورد
CREATE_COMPLETE AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d5f9d -
CREATE_IN_PROGRESS AWS::ApiGateway::Stage ServerlessRestApiProdStage -
CREATE_IN_PROGRESS AWS::ApiGateway::Stage ServerlessRestApiProdStage تم بدء إنشاء المورد
CREATE_COMPLETE AWS::ApiGateway::Stage ServerlessRestApiProdStage -
CREATE_COMPLETE AWS::CloudFormation::Stack t1-py -
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
نواتج CloudFormation من المكدس المُنشر
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
النواتج
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
...
المفتاح HelloWorldApi
الوصف عنوان URL لبوابة API في مرحلة الإنتاج لدالة Hello World
القيمة https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
...-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
هل ترى مفتاح HelloWorldApi
مع الوصف عنوان URL لبوابة API في مرحلة الإنتاج لدالة Hello World
؟ هناك عنوان URL العام لدينا:
https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
لكن دعنا نبدأ مستمع سجلاتنا أولاً:
sam logs -n HelloWorldFunction --stack-name "t1-py" --tail
ثم نقوم بتشغيل في نافذة أخرى من الطرفية:
curl https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
الناتج:
2024/08/18/[$LATEST]d86ecb94a39d44778f35bc2200b077a7 2024-08-18T00:46:22.468000 REPORT RequestId: 2e35fcf9-4d4b-4ced-962e-923adeddcbaa Duration: 199.56 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 56 MB
...break...
2024/08/18/[$LATEST]d86ecb94a39d44778f35bc2200b077a7 2024-08-18T00:46:22.909000 REPORT RequestId: dd200d9d-cf35-4813-a243-ca8cf7435908 Duration: 194.60 ms Billed Duration: 195 ms Memory Size: 128 MB Max Memory Used: 56 MB
...break...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:01.610000 REPORT RequestId: afae88d1-3873-40a3-8b82-caa7019ca45e Duration: 1.94 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB Init Duration: 117.62 ms
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:03.292000 REPORT RequestId: d7011c87-e6a2-4d76-bb39-4c32b754b991 Duration: 1.71 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:06.905000 REPORT RequestId: 0eab1866-b11f-4a26-8234-be07f47ecb49 Duration: 1.62 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:12.696000 REPORT RequestId: f0cc5b4b-f3c3-49d5-9708-fce265581ed2 Duration: 1.51 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:13.202000 REPORT RequestId: 40367789-27c0-419b-8483-cf054978e9b6 Duration: 1.51 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:13.552000 REPORT RequestId: 6d166356-5a6c-44c7-b5dd-5c2808340b79 Duration: 1.38 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
مع استدعاء S3 - هنا نحن نتحدث
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:54:55.322000 REPORT RequestId: d97fd1cd-d9ef-4d16-adcb-514fa65ca6f8 Duration: 513.99 ms Billed Duration: 514 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
فجوة
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.063000 REPORT RequestId: e6e6884d-d6b6-4dc7-aede-f3863f3b331d Duration: 519.35 ms Billed Duration: 520 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.202000 REPORT RequestId: 91eeaca0-c983-4e99-9608-36948511bd27 Duration: 23.95 ms Billed Duration: 24 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.662000 REPORT RequestId: d7035256-53f8-463c-93fd-f5de608f47a6 Duration: 33.55 ms Billed Duration: 34 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:03.082000 REPORT RequestId: a2e338b3-f18e-4644-8f6d-2ab151421996 Duration: 21.50 ms Billed Duration: 22 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:03.562000 REPORT RequestId: 111665a1-f43c-488b-bc02-cd203fef478f Duration: 42.58 ms Billed Duration: 43 ms Memory Size: 128 MB Max Memory Used: 77 MB
حجم الذاكرة: 77 ميغابايت ووقت المحسوب ~35 مللي ثانية… وقت التسخين 1/2 ثانية
تنظيف مكدس CloudFormation على AWS
sam delete --stack-name "t1-py"
بناء، اختبار، نشر، وتشغيل دالة لامبدا بناءً على JavaScript
JavaScript محلي
بناء وتشغيل محلي
sam build
sam local invoke
يُنتج
REPORT RequestId: 9e3c0a43-6432-4cc7-babf-f591773e5315 Init Duration: 0.05 ms Duration: 126.34 ms Billed Duration: 127 ms Memory Size: 128 MB Max Memory Used: 128 MB
REPORT RequestId: 2856e8f1-166f-4a90-a094-d575ef00ff69 Init Duration: 0.02 ms Duration: 43.73 ms Billed Duration: 44 ms Memory Size: 128 MB Max Memory Used: 128 MB
REPORT RequestId: f1156bd5-dd9f-4c1c-b65d-68c04df5a987 Init Duration: 0.02 ms Duration: 42.79 ms Billed Duration: 43 ms Memory Size: 128 MB Max Memory Used: 128 MB
مدة الاتصال بـ S3 من المحلي:
REPORT RequestId: 06c4a5a0-6f1a-4e09-9518-cf706d08c319 Init Duration: 0.13 ms Duration: 280.33 ms Billed Duration: 281 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: 4393e8bd-c59b-42e5-83b5-1729d0fb4d8f Init Duration: 0.08 ms Duration: 270.42 ms Billed Duration: 271 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: 90979693-7245-4f88-9f6b-070be83f75df Init Duration: 0.05 ms Duration: 431.86 ms Billed Duration: 432 ms Memory Size: 128 MB Max Memory Used: 128 MB
JavaScript على AWS
نشر وافق على ما يطلبه sam وقوله السماح بالاتصال غير المصادق عليه بدوالنا
sam deploy --guided
# الآن استمع إلى السجلات
sam logs -n HelloWorldFunction --stack-name t2-js --tail
# أو
sam logs -n HelloWorldS3Function --stack-name t2-js --tail
وبعد إرسال cURL في وحدة تحكم أخرى، السجلات
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:38.831000 REPORT RequestId: 24e86600-e316-4678-81db-41eafff81aa0 Duration: 4.92 ms Billed Duration: 5 ms Memory Size: 128 MB Max Memory Used: 62 MB Init Duration: 139.82 ms
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:47.451000 REPORT RequestId: 0d269d7f-61f6-4b48-b3c2-6f83aaba5f45 Duration: 2.58 ms Billed Duration: 3 ms Memory Size: 128 MB Max Memory Used: 62 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:58.622000 REPORT RequestId: f1bd0e5a-d1d0-4136-9b02-6fba4dcc9a70 Duration: 1.34 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:59.089000 REPORT RequestId: baa791a7-4f9c-41be-b516-81213bc7a365 Duration: 1.44 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:59.966000 REPORT RequestId: ea2a1515-1188-4a44-956f-91f2fc97491f Duration: 1.46 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:39:00.428000 REPORT RequestId: 0f536ec5-26cb-42b9-beaa-045984b8c468 Duration: 1.45 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 63 MB
جيد. لا يتم إنفاق الكثير من الوقت على فعل شيء. لكن لا ينام أيضًا.
أداء دالة لامبدا التي تقرأ من حاوية S3 في JavaScript
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:45.155000 REPORT RequestId: c4630419-4502-467c-9cda-c5087d6b2743 Duration: 1051.97 ms Billed Duration: 1052 ms Memory Size: 128 MB Max Memory Used: 88 MB Init Duration: 411.76 ms
...break...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:52.195000 REPORT RequestId: 4b881f2b-4b30-4890-afc2-b7299b6397b3 Duration: 259.87 ms Billed Duration: 260 ms Memory Size: 128 MB Max Memory Used: 89 MB
...break...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:58.455000 REPORT RequestId: 77f4d820-2f2e-4190-a1e3-bc4821ccdb9b Duration: 165.44 ms Billed Duration: 166 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:03.095000 REPORT RequestId: 41ce9fd8-aaf4-46c4-a827-0a45592041c0 Duration: 63.74 ms Billed Duration: 64 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:03.695000 REPORT RequestId: 9494f176-3818-4fb3-a581-857f1eb2df23 Duration: 73.16 ms Billed Duration: 74 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:04.315000 REPORT RequestId: 528c909f-4a08-415e-a713-e3d9e9e4d615 Duration: 87.44 ms Billed Duration: 88 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:04.835000 REPORT RequestId: 9b636429-56f5-4974-afe9-e53e786adb61 Duration: 55.62 ms Billed Duration: 56 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:05.415000 REPORT RequestId: d4c298df-b237-4605-894f-fde05fe0461a Duration: 69.88 ms Billed Duration: 70 ms Memory Size: 128 MB Max Memory Used: 89 MB
تنظيف AWS JS
حذف…
sam delete --stack-name t2-js
بناء، اختبار، نشر، وتشغيل دالة لامبدا بناءً على Golang
اختبار Golang Lambda محليًا
بشكل دقيق - إجراء مكالمات اختبار
، وليس تشغيل اختبارات وحدة
.
يوجد أمر sam build
داخل ملف Makefile
. لذا نحن نقوم بتشغيل:
make
تشغيل وظيفة واحدة
sam local invoke HelloWorldFunction --event events/event.json
sam local invoke HelloWorldFunction --event events/event.json
sam local invoke HelloWorldFunction --event events/event.json
sam local invoke HelloWorldS3Function --event events/event.json
sam local invoke HelloWorldS3Function --event events/event.json
sam local invoke HelloWorldS3Function --event events/event.json
الخيار 2: الآن ابدأ الخادم المحلي:
sam local start-api
الإخراج:
الآن في نافذة وحدة تحكم منفصلة:
curl http://localhost:3000/hello
curl http://localhost:3000/hello
curl http://localhost:3000/hello
curl http://localhost:3000/hellos3
curl http://localhost:3000/hellos3
curl http://localhost:3000/hellos3
إخراج مكالمة محلية بسيطة إلى دالة لامبدا بناءً على Golang:
REPORT RequestId: 54cc3271-7f04-44a3-8d91-d5d69d2428ea Init Duration: 0.03 ms Duration: 2.24 ms Billed Duration: 3 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: c753bdf9-1af0-4b40-9516-5fb2ad96ba00 Duration: 0.29 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: edceb310-e6e9-4f0a-bd6e-58afd40e9b70 Duration: 0.28 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 128 MB
إخراج مكالمة محلية “s3” إلى دالة لامبدا بناءً على Golang:
REPORT RequestId: 1556e298-a17a-4d45-9fdc-b7f62118c246 Init Duration: 0.06 ms Duration: 142.76 ms Billed Duration: 143 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: e4638fb4-52f4-4086-b673-c9de0f02d3f7 Duration: 86.75 ms Billed Duration: 87 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: b1bdcbf8-06f8-4605-a7da-d34f41198811 Duration: 105.07 ms Billed Duration: 106 ms Memory Size: 128 MB Max Memory Used: 128 MB
مدة 1ms تبدو جيدة، ولكن Memory Size: 128 MB؟ لماذا؟ يجب أن تكون حوالي 12MB؟ على الأرجح أن هذا هو الحد الأدنى الذي يمتلكونه.
اختبار Lambda Golang على AWS
sam deploy --guided
ابدأ مستمع السجلات
sam logs -n HelloWorldFunction --stack-name t3-go --tail
وافعل الدالة 3 مرات:
curl https://k92zaa81w8.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://k92zaa81w8.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://k92zaa81w8.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
في السجلات نرى:
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:02.908000 REPORT RequestId: 358b5762-dad7-4380-a83f-e21349fae20b Duration: 11.71 ms Billed Duration: 70 ms Memory Size: 128 MB Max Memory Used: 20 MB Init Duration: 57.52 ms
...break...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:07.404000 REPORT RequestId: 3051d741-504a-49ae-95b3-077628b4b929 Duration: 0.99 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 20 MB
...break...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:11.923000 REPORT RequestId: 51c38ca9-920d-4f30-be75-a1a44538c9ee Duration: 1.02 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 20 MB
...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:12.486000 REPORT RequestId: 98727f66-f3f1-46ad-9a5a-55a6243609ba Duration: 0.96 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 20 MB
...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:13.015000 REPORT RequestId: 9d8bfb28-d4eb-4868-9af7-3b3946acc92c Duration: 0.98 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 20 MB
- المدة المُفوَّضة هي 2ms. جيد.
- Max Memory Used: 20 MB. متوقع
- يبدو أنه لا ينام
الآن دعنا نفعل الشيء نفسه للدالة التي تحتوي على مكالمة إلى S3
2024/08/18/[$LATEST]8bd6f2bea333485aad2cbf5166433cf5 2024-08-18T04:22:57.711000 REPORT RequestId: 9f09db3e-d9bc-45fe-9674-df133f0f1dc2 Duration: 28.08 ms Billed Duration: 29 ms Memory Size: 128 MB Max Memory Used: 37 MB
...
2024/08/18/[$LATEST]8bd6f2bea333485aad2cbf5166433cf5 2024-08-18T04:23:15.324000 REPORT RequestId: 4bc39553-6a42-4347-b322-6c80f24cdb01 Duration: 30.56 ms Billed Duration: 31 ms Memory Size: 128 MB Max Memory Used: 38 MB
...
2024/08/18/[$LATEST]8bd6f2bea333485aad2cbf5166433cf5 2024-08-18T04:23:51.144000 REPORT RequestId: 55ac2b18-394c-4699-87a5-4ba52230f386 Duration: 27.01 ms Billed Duration: 28 ms Memory Size: 128 MB Max Memory Used: 38 MB
التنظيف
لا تنسَ إزالته
sam delete --stack-name t3-go
روابط مفيدة
- لambdas متعددة الطبقات مع AWS SAM وPython
- إصلاح خطأ Golang GORM AutoMigrate لـ postgresql
- AWS SAM + AWS SQS + Python PowerTools
- SAM cli: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
- تثبيت لينكس والأدوات
- ورقة ملاحظات Golang
- ورقة ملاحظات Bash
- ورقة ملاحظات Python
- شُعبية لغات البرمجة والمنصات
- مجال Golang
- بدائل لـ Beautiful Soup لـ Go
- إنشاء ملفات PDF في Go - المكتبات وال أمثلة"