اللامبدات المُستحِلة: AWS SAM وبايثون
لا ضرر من قليل من إعادة استخدام الكود
Page content
هذا هو الإرشادات خطوة بخطوة حول كيفية إضافة طبقات إلى AWS Lambdas - باستخدام لغة بايثون. سأستخدم الشفرة الأساسية التي تولدها نموذج HelloWorld القياسي.
نعم بالتأكيد، تحتاج إلى أن يكون لديك جميع البايثون وأشياء AWS SAM مثبتة مسبقًا ومُعدة.
إنشاء وتشغيل مشروع نموذجي
الآن قم بتشغيل sam init
واجبَل الأسئلة بطريقة القياسي، مثل هذا:
سيعرض الملخص
وسيقوم بإنشاء مجلد المشروع مع الهيكل والملفات. template.yaml هو القياسي.
كما هو الشفرة الخاصة بالوظيفة أيضًا (سأقوم بمسح التعليقات الإضافية المُولدة):
import json
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
# "location": ip.text.replace("\n", "")
}),
}
الآن دعنا نبني ونقوم بتشغيل هذه الوظيفة محليًا
sam validate && sam build --use-container && sam local invoke HelloWorldFunction --event events/event.json
يجب أن يكون نهاية الاستجابة قريبة من تلك أدناه:
.....
START RequestId: 6da35464-7c6a-40b2-bcc0-60796994317a Version: $LATEST
END RequestId: 737ae28d-2b99-49e6-baae-40ab9bb99599
REPORT RequestId: 737ae28d-2b99-49e6-baae-40ab9bb99599 Init Duration: 0.04 ms Duration: 28.40 ms Billed Duration: 29 ms Memory Size: 128 MB Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello world\"}"}
إضافة الطبقات
إضافة وصف الطبقات إلى template.yaml
أثناءين من الأجزاء:
- ApiSharedLayer - كتلة تصفِّرها
- Layers: … - !Ref ApiSharedLayer - في الوظيفة التي تستخدمها
.....
Resources:
# added code start
ApiSharedLayer:
Type: AWS::Serverless::LayerVersion
Properties:
ContentUri: api_shared_layer/
LayerName: api-shared-layer
Description: My api-shared-layer
CompatibleRuntimes:
- python3.9
RetentionPolicy: Delete
Metadata:
BuildMethod: python3.9 # Required to have AWS SAM build this layer
# added code end
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.9
Architectures:
- x86_64
# added code start
Layers:
- !Ref ApiSharedLayer
# added code end
Events:
.....
إضافة شفرة الطبقات
في المجلد api_shared_layer
أضف بعض الشفرة
تحديث الوظيفة لاستخدام هذه الشفرة
import json
from api_version import API_VERSION
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
"version": API_VERSION
}),
}
تشغيل الاختبار
مرة أخرى:
sam validate && sam build --use-container && sam local invoke HelloWorldFunction --event events/event.json
يجب أن يكون نهاية الاستجابة قريبة من تلك أدناه:
.....
START RequestId: 88eb1887-ae94-479d-a059-f87c4b71a282 Version: $LATEST
END RequestId: 927f7d05-4d13-44ba-9377-03e6d3e8bacf
REPORT RequestId: 927f7d05-4d13-44ba-9377-03e6d3e8bacf Init Duration: 0.72 ms Duration: 34.80 ms Billed Duration: 35 ms Memory Size: 128 MB Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello world\", \"version\": \"1.1.1\"}"}
رائع.