Comment créer une couche pour ma fonction Python Lambda ?

Lecture de 3 minute(s)
0

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.

  1. Ouvrez la console AWS Serverless Application Repository.
  2. Dans le panneau de navigation, sélectionnez Available applications (Applications disponibles).
  3. 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).
  4. Dans le panneau de recherche, saisissez python-lambda-layer-creation.
  5. Choisissez la fonction python-lambda-layer-creation.
  6. 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 ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an