Lagerade Lambdas: AWS SAM och Python
Lite kodåteranvändning skadar aldrig
Här är steg-för-steg-instruktionerna för hur man lägger till lager till AWS Lambdas - i Python. Vi kommer att använda grundkoden som genereras av standardmallningen HelloWorld-exemplet.

Och ja, naturligtvis måste du ha alla Python och AWS SAM-saker installerade och konfigurerade.
Generering och körning av exempelprojekt
Nu anropa sam init och svara på frågorna på standard sätt, så här:

det kommer visa sammanfattningen

och kommer skapa projektmappen med struktur och några filer. template.yaml är ganska standard.

och funktionskoden också (jag kommer att rensa bort extra genererade kommentarer)
import json
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
# "location": ip.text.replace("\n", "")
}),
}
Nu låt oss bygga och anropa denna funktion lokalt
sam validate && sam build --use-container && sam local invoke HelloWorldFunction --event events/event.json
Svarsslutet bör vara nära det nedan:
.....
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\"}"}
Lägger till lagret
Lägg till lagerbeskrivning i template.yaml
Två delar:
- ApiSharedLayer - block som beskriver det
- Layers: … - !Ref ApiSharedLayer - i funktionen som använder det
.....
Resources:
# tillagd kod 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
# tillagd kod slut
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
# tillagd kod start
Layers:
- !Ref ApiSharedLayer
# tillagd kod slut
Events:
.....
Lägg till lagerkod
i mappen api_shared_layer lägg till lite kod

Uppdatera funktionen för att använda denna kod
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
}),
}
Testkörning
Återigen:
sam validate && sam build --use-container && sam local invoke HelloWorldFunction --event events/event.json
Svarsslutet bör vara nära det nedan:
.....
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\"}"}
Bra.