Lors de la création d'une application sans serveur à l'aide de Lambda ou dynamoDB avec AWS SAM, le code couramment utilisé dans divers projets peut sortir. Ce serait pratique si les choses qui pourraient être partagées pouvaient être partagées rapidement et appelées en cas de besoin, alors je les ai immédiatement mises en pratique.
AWS Lambda possède une fonction Layer et vous pouvez définir la bibliothèque que vous souhaitez utiliser dans le code Lambda. J'ai essayé de savoir comment configurer du code et des bibliothèques qui dépendent de Layer en tant que projet d'AWS SAM.
J'ai trouvé des moyens de sauvegarder les bibliothèques nécessaires pour Layer to S3 dans Zip et de les définir à partir de la console AWS, mais je ne pouvais pas vraiment travailler pour les déployer en tant que projets AWS SAM, alors je les ai écrits sous forme de mémorandum. Je vais le laisser.
Nous supposerons que vous avez déjà installé l'AWS SAM CLI. Cette explication utilise Python 3.6.
Le répertoire qui stocke le code et les bibliothèques que vous souhaitez utiliser comme couche est déterminé pour chaque langue. Inclure les dépendances de la bibliothèque AWS Lambda dans les couches (https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html#configuration-layers-path)
Pour python, si vous ne le stockez pas dans python
ou python / lib / python3.6 / site-packages
, l'erreur de référence suivante sera affichée.
Unable to import module 'app': cannot import name 'layer_code'
Ajoutez le répertoire pour stocker la couche au projet SAM créé par la commande sam init
.
sam-app
├── README.md
├── app
│ ├── __init__.py
│ ├── app.py
│ └── requirements.txt
├── events
│ └── event.json
├── layer //Ajoutez un répertoire de stockage de couches ici
│ └── python //Répertoire des noms de langue
│ └── sample
│ └── sample_layer.py //Code que vous souhaitez utiliser comme couche
└── 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 #Point 1
Events:
(réduction)
#Définition de la couche
LayerSampleLayer:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: layer-sample-layer
Description: Hello World Sample Application Resource Layer
ContentUri: layer #Point 2
Il y a deux points dans l'écriture de template.yaml.
Ajoutez l'élément Layers
à la définition de la fonction Lambda et définissez-le pour qu'il fasse référence à la définition de la couche.
Dans la définition de couche, définissez le chemin du dossier qui stocke le code de couche. → Pour être exact, définissez le répertoire parent du répertoire des noms de langue
Si vous définissez le calque dans template.yaml, vous pouvez l'utiliser comme s'il se trouvait dans le même calque que app.py.
Les paramètres ne seront pas reflétés à moins que vous ne fassiez une fois sam build
.
app.py
#Parcourir le fichier ajouté en tant que couche
from sample import sample_layer
def lambda_handler(event, context):
res = sample_layer.hello()
return res
sample_layer.py
def hello():
return "hello Layer!"
Qu'est-ce qu'AWS Serverless Application Model (AWS SAM) AWS Lambda Layer
Recommended Posts