Beim Erstellen einer serverlosen Anwendung mit Lambda oder dynamoDB mit AWS SAM wird möglicherweise der Code ausgegeben, der üblicherweise in verschiedenen Projekten verwendet wird. Es wäre praktisch, wenn Dinge, die geteilt werden könnten, schnell geteilt und bei Bedarf aufgerufen werden könnten, also habe ich sie sofort in die Praxis umgesetzt.
AWS Lambda verfügt über eine Ebenenfunktion, und Sie können die Bibliothek festlegen, die Sie im Lambda-Code verwenden möchten. Ich habe versucht herauszufinden, wie Code und Bibliotheken eingerichtet werden, die von Layer als Projekt von AWS SAM abhängen.
Ich habe einige Möglichkeiten gefunden, die erforderlichen Bibliotheken für Layer in Zip in S3 zu speichern und über die AWS-Konsole festzulegen, konnte sie jedoch nicht als AWS SAM-Projekt bereitstellen. Daher habe ich sie als Memorandum geschrieben. Ich werde es verlassen.
Wir gehen davon aus, dass Sie die AWS SAM CLI bereits installiert haben. Diese Erklärung verwendet Python 3.6.
Das Verzeichnis, in dem der Code und die Bibliotheken gespeichert sind, die Sie als Layer verwenden möchten, wird für jede Sprache festgelegt. Einfügen von AWS Lambda-Bibliotheksabhängigkeiten in Ebenen (https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html#configuration-layers-path)
Wenn Sie es für Python nicht in "Python" oder "Python / lib / python3.6 / site-packages" speichern, wird der folgende Referenzfehler angezeigt.
Unable to import module 'app': cannot import name 'layer_code'
Fügen Sie das Verzeichnis zum Speichern der Ebene zu dem SAM-Projekt hinzu, das mit dem Befehl sam init
erstellt wurde.
sam-app
├── README.md
├── app
│ ├── __init__.py
│ ├── app.py
│ └── requirements.txt
├── events
│ └── event.json
├── layer //Fügen Sie hier das Layer-Speicherverzeichnis hinzu
│ └── python //Verzeichnis der Sprachnamen
│ └── sample
│ └── sample_layer.py //Code, den Sie als Ebene verwenden möchten
└── template.yaml
template.yaml
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: hello-world-sample-function
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.6
Layers:
- !Ref LayerSampleLayer #Punkt 1
Events:
(Kürzung)
#Ebenendefinition
LayerSampleLayer:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: layer-sample-layer
Description: Hello World Sample Application Resource Layer
ContentUri: layer #Punkt 2
Es gibt zwei Punkte beim Schreiben von template.yaml.
Fügen Sie der Lambda-Funktionsdefinition das Element "Ebenen" hinzu und stellen Sie es so ein, dass es auf die Ebenendefinition verweist.
Legen Sie in der Ebenendefinition den Ordnerpfad fest, in dem der Ebenencode gespeichert ist. → Um genau zu sein, legen Sie das übergeordnete Verzeichnis des Sprachnamenverzeichnisses fest
Wenn Sie die Ebene in template.yaml festlegen, können Sie sie so verwenden, als ob sie sich in derselben Ebene wie app.py befindet. Die Einstellungen werden nur wiedergegeben, wenn Sie "sam build" einmal ausführen.
app.py
#Durchsuchen Sie die als Ebene hinzugefügte Datei
from sample import sample_layer
def lambda_handler(event, context):
res = sample_layer.hello()
return res
sample_layer.py
def hello():
return "hello Layer!"
Was ist das AWS Serverless Application Model (AWS SAM) AWS Lambda Layer
Recommended Posts