Je veux créer une couche pour ma fonction Python AWS Lambda.
Solution
Les instructions suivantes déploient une application pour créer une couche permettant d'appeler une fonction Python Lambda.
- Ouvrez la console AWS Serverless Application Repository.
- Dans le panneau de navigation, sélectionnez Available applications (Applications disponibles).
- Sélectionnez Show apps that create custom IAM roles or resource policies (Afficher les applications qui créent des rôles IAM ou des politiques de ressources personnalisés).
- Dans le panneau de recherche, saisissez python-lambda-layer-creation.
- Choisissez la fonction python-lambda-layer-creation.
- Dans les paramètres des applications python-lambda-layer-creation, sélectionnez I acknowledge that this app creates custom IAM roles (Je reconnais que cette application crée des rôles IAM personnalisés), puis Deploy (Déployer).
Vous pouvez créer une couche pour appeler votre fonction Lambda et transmettre une liste de dépendances incluses dans les métadonnées de la couche.
L'exemple suivant crée des couches Python Lambda contenant des bibliothèques de requests (dernière version), numpy (version 1.20.1) et keyring (version >= 4.1.1). Vous pouvez appeler la fonction Lambda avec une charge utile similaire à la suivante :
{
"dependencies": {
"requests": "latest",
"numpy": "== 1.20.1",
"keyring": ">= 4.1.1"
},
"layer": {
"name": "a-sample-python-lambda-layer",
"description": "this layer contains requests, numpy and keyring libraries",
"compatible-runtimes": ["python3.6","python3.7","python3.8"],
"license-info": "MIT"
}
}
Pour tester la couche de fonction Python Lambda, notez l'ARN. Créez ensuite une pile AWS CloudFormation à l'aide d'un modèle YAML similaire au suivant :
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
Layer:
Type: String
Description: The ARN of the lambda function layer
Resources:
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
Code:
ZipFile: |
import json
import requests
import numpy as np
def handler(event, context):
try:
ip = requests.get("http://checkip.amazonaws.com/")
x = np.array([2,3,1,0])
except requests.RequestException as e:
raise e
return {
"statusCode": 200,
"body": json.dumps({
"array[0]": ("%s" % str(x[0])),
"location": ip.text.replace("\n", "")
}),
}
Handler: index.handler
Runtime: python3.7
MemorySize: 128
Timeout: 30
Layers:
- !Ref Layer
Role:
Fn::GetAtt:
- LambdaExecutionRole
- Arn
LambdaExecutionRole:
Description: Allow Lambda to connect function to publish Lambda layers
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action: sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
# Policies:
# - PolicyName: AllowPublishLambdaLayer
# PolicyDocument:
# Version: '2012-10-17'
# Statement:
# - Effect: Allow
# Action: lambda:PublishLayerVersion
# Resource: '*'
Exécutez la fonction Python Lambda. Exemple de réponse :
{
"statusCode": 200,
"body": "{\"array[0]\": \"2\", \"location\": \"[your-outbound-ip-address]\"}"
}
Remarque : cette fonction Lambda utilise pip pour gérer les dépendances afin que les bibliothèques incluses dans la couche Lambda existent dans le référentiel d'index de packages Python.
Pour des exemples de bibliothèques Python incluses dans la couche définie pour les dépendances et les attributs de la couche, consultez l'installation de pip sur le site Web de pip.
Pour plus d'informations, consultez la section Création et partage de couches Lambda.
Informations connexes
Création de fonctions Lambda avec Python
Utilisation de couches avec votre fonction Lambda
Comment puis-je créer une couche Lambda à l'aide d'un environnement Lambda simulé avec Docker ?
Comment intégrer la dernière version du kit SDK AWS pour JavaScript à ma fonction Lambda Node.js en utilisant les couches ?