¿Cómo puedo crear una capa para mi función Python de Lambda?

3 minutos de lectura
0

Quiero crear una capa para mi función Python de AWS Lambda.

Resolución

Las siguientes instrucciones implementan una aplicación para crear una capa que invoque una función Python de Lambda.

  1. Abra la consola del repositorio de aplicaciones sin servidor de AWS.
  2. En el panel de navegación, seleccione Available applications (Aplicaciones disponibles).
  3. Seleccione Show apps that create custom IAM roles or resource policies (Mostrar aplicaciones que crean roles de IAM o políticas de recursos personalizados).
  4. En el panel de búsqueda, ingrese python-lambda-layer-creation.
  5. Elija la función python-lambda-layer-creation.
  6. En la configuración de aplicaciones de python-lambda-layer-creation, seleccione I acknowledge that this app creates custom IAM roles (Reconozco que esta aplicación crea roles de IAM personalizados) y, a continuación, elija Deploy (Implementar).

Puede crear una capa para invocar la función de Lambda y transferir una lista de dependencias incluida en los metadatos de la capa.

El siguiente ejemplo crea capas Lambda de Python que contienen las bibliotecas requests (última versión), numpy (versión 1.20.1) y keyring (versión >= 4.1.1). Puede invocar la función de Lambda con una carga similar a la siguiente:

{
  "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" 
  } 
}

Para probar la capa de funciones Python de Lambda, anote el ARN. A continuación, cree una pila de AWS CloudFormation con una plantilla YAML similar a la siguiente:

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: '*'

Ejecute la función Python de Lambda. Ejemplo de respuesta:

{
  "statusCode": 200,
  "body": "{\"array[0]\": \"2\", \"location\": \"[your-outbound-ip-address]\"}"
}

Nota: Esta función de Lambda usa pip para administrar las dependencias, de modo que las bibliotecas incluidas en la capa de Lambda existan en el repositorio de índices de paquetes de Python.

Para ver ejemplos de las bibliotecas de Python incluidas en la capa definida para las dependencias y los atributos de la capa, consulte pip install (Instalación de pip) en el sitio web de pip.

Para obtener más información, consulte Creación y uso compartido de capas de Lambda.


Información relacionada

Creación de funciones de Lambda con Python

Uso de capas con su función de Lambda

How do I create a Lambda layer using a simulated Lambda environment with Docker? (¿Cómo creo una capa Lambda usando un entorno Lambda simulado con Docker?)

How do I integrate the latest version of the AWS SDK for JavaScript into my Node.js Lambda function using layers? (¿Cómo puedo integrar la última versión del SDK de AWS para JavaScript en la función de Lambda de Node.js con capas?)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año