أداء AWS Lambda: JavaScript مقابل Python مقابل Golang

ما هي اللغة التي يجب استخدامها لـ AWS Lambda؟

Page content

يمكننا كتابة دالة لامبدا للاستخدام في نشرها على AWS بلغات مختلفة. لنقارن أداء الدوال (التي تكاد تكون فارغة) المكتوبة بلغات JavaScript وPython وGolang…

شعار دالة AWS Lambda

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

روابط مفيدة