Geslagen Lambdas: AWS SAM en Python
Een beetje codehergebruik schaadt nooit
Dit zijn de stap-voor-stap instructies voor het toevoegen van lagen aan AWS Lambdas - in Python. We zullen gebruik maken van basiscode gegenereerd door het standaard HelloWorld sjabloonvoorbeeld.
En ja, natuurlijk heb je alle Python en AWS SAM dingen vooraf geïnstalleerd en geconfigureerd.
Genereren en uitvoeren van een voorbeeldproject
Roep nu sam init
aan en beantwoord de vragen op de standaard manier, zoals hieronder:
het zal een overzicht tonen
en het zal de projectmap met structuur en enkele bestanden aanmaken. template.yaml is vrij standaard.
en de functiecode ook (ik zal extra gegenereerde opmerkingen verwijderen)
import json
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
# "location": ip.text.replace("\n", "")
}),
}
Laten we nu deze functie lokaal bouwen en aanroepen
sam validate && sam build --use-container && sam local invoke HelloWorldFunction --event events/event.json
Het einde van de respons moet ongeveer overeenkomen met het onderstaande:
.....
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\"}"}
De laag toevoegen
Voeg een beschrijving van de laag toe aan template.yaml
Twee onderdelen:
- ApiSharedLayer - blok dat het beschrijft
- Layers: … - !Ref ApiSharedLayer - in de functie die het gebruikt
.....
Resources:
# toegevoegde code start
ApiSharedLayer:
Type: AWS::Serverless::LayerVersion
Properties:
ContentUri: api_shared_layer/
LayerName: api-shared-layer
Description: Mijn api-shared-layer
CompatibleRuntimes:
- python3.9
RetentionPolicy: Delete
Metadata:
BuildMethod: python3.9 # Vereist om AWS SAM deze laag te bouwen
# toegevoegde code einde
HelloWorldFunction:
Type: AWS::Serverless::Function # Meer info over 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
# toegevoegde code start
Layers:
- !Ref ApiSharedLayer
# toegevoegde code einde
Events:
.....
Voeg de laagcode toe
in de map api_shared_layer
voeg wat code toe
Werk de functie bij om deze code te gebruiken
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
}),
}
Testuitvoering
Opnieuw:
sam validate && sam build --use-container && sam local invoke HelloWorldFunction --event events/event.json
Het einde van de respons moet ongeveer overeenkomen met het onderstaande:
.....
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\"}"}
Prima.