Aumente la eficiencia con las capas Lambda con AWS SAM - AWS Serverless Application Model

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Aumente la eficiencia con las capas Lambda con AWS SAM

Con AWS SAMél, puede incluir capas en sus aplicaciones sin servidor. AWS Lambda las capas permiten extraer código de una función de Lambda a una capa de Lambda, que luego se puede utilizar en varias funciones de Lambda. Esto le permite reducir el tamaño de los paquetes de implementación, separar la lógica de las funciones principales de las dependencias y compartir las dependencias entre varias funciones. Para obtener más información sobre las capas, consulte las capas Lambda en la Guía para AWS Lambda desarrolladores.

Este tema proporciona información sobre lo siguiente:

  • Incluir capas en la aplicación

  • Cómo se almacenan las capas en caché local

Para obtener información sobre la creación de capas personalizadas, consulte Creación de capas Lambda en AWS SAM.

Incluir capas en la aplicación

Para incluir capas en la aplicación, utilice la propiedad Layers del tipo de recurso AWS::Serverless::Function.

A continuación se presenta un ejemplo AWS SAM de plantilla con una función Lambda que incluye una capa:

ServerlessFunction: Type: AWS::Serverless::Function Properties: CodeUri: . Handler: my_handler Runtime: Python3.7 Layers: - <LayerVersion ARN>

Cómo se almacenan las capas en caché local

Al invocar la función mediante uno de los comandos sam local, el paquete de capas de la función se descarga y se almacena en caché en el host local.

En la tabla siguiente se muestran las ubicaciones predeterminadas de los directorios de caché para los distintos sistemas operativos.

SO Ubicación
Windows 7 C:\Users\<user>\AppData\Roaming\AWS SAM
Windows 8 C:\Users\<user>\AppData\Roaming\AWS SAM
Windows 10 C:\Users\<user>\AppData\Roaming\AWS SAM
macOS ~/.aws-sam/layers-pkg
Unix ~/.aws-sam/layers-pkg

Una vez almacenado el paquete en caché, la CLI de AWS SAM superpone las capas en una imagen de Docker que se utiliza para invocar la función. AWS SAMCLIGenera los nombres de las imágenes que crea, así como las LayerVersions que se guardan en la memoria caché. Encontrará más detalles sobre el esquema en las secciones siguientes.

Para inspeccionar las capas superpuestas, ejecute el siguiente comando para iniciar una sesión de bash en la imagen que desea inspeccionar:

docker run -it --entrypoint=/bin/bash samcli/lambda:<Tag following the schema outlined in Docker Image Tag Schema> -i

Esquema de nombres del directorio de almacenamiento en caché de capas

Dado LayerVersionArn que a está definido en su plantilla, AWS SAMCLI extrae la versión LayerName y del ARN. Crea un directorio para colocar el contenido de la capa denominada LayerName-Version-<first 10 characters of sha256 of ARN>.

Ejemplo:

ARN = arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1 Directory name = myLayer-1-926eeb5ff1

Esquema de etiquetas de Docker Images

Para calcular el hash de las capas únicas, combine todos los nombres de capa únicos con un delimitador de “-”, tome el hash SHA256 y, a continuación, tome los primeros 10 caracteres.

Ejemplo:

ServerlessFunction: Type: AWS::Serverless::Function Properties: CodeUri: . Handler: my_handler Runtime: Python3.7 Layers: - arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1 - arn:aws:lambda:us-west-2:111111111111:layer:mySecondLayer:1

Los nombres únicos se calculan de la misma manera que en el esquema de nombres del directorio de almacenamiento en caché de capas:

arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1 = myLayer-1-926eeb5ff1 arn:aws:lambda:us-west-2:111111111111:layer:mySecondLayer:1 = mySecondLayer-1-6bc1022bdf

Para calcular el hash de las capas únicas, combine todos los nombres de capa únicos con un delimitador de “-”, tome el hash sha256 y, a continuación, tome los primeros 25 caracteres:

myLayer-1-926eeb5ff1-mySecondLayer-1-6bc1022bdf = 2dd7ac5ffb30d515926aef

A continuación, combine este valor con el tiempo de ejecución y la arquitectura de la función, con un delimitador de '-':

python3.7-x86_64-2dd7ac5ffb30d515926aefffd