Creación de capas Lambda - 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.

Creación de capas Lambda

Se puede utilizar AWS SAM para crear capas Lambda personalizadas. Las capas Lambda permiten extraer código de una función Lambda que luego se puede reutilizar en varias funciones Lambda. Crear solo capas Lambda (en lugar de crear toda la aplicación) puede beneficiarlo de varias maneras. Puede ayudarlo a reducir el tamaño de sus paquetes de implementación, separar la lógica de las funciones principales de las dependencias y permitirle compartir las dependencias entre varias funciones. Para obtener más información acerca de las capas, consulte Capas Lambda de AWS, en la Guía para desarrolladores de AWS Lambda .

Cómo crear una capa Lambda en AWS SAM

nota

Antes de poder crear una capa Lambda, primero debe escribir una capa Lambda en la plantilla. AWS SAM Para obtener información y ejemplos sobre cómo hacerlo, consulte. Aumente la eficiencia con las capas Lambda con AWS SAM

Para crear una capa personalizada, declárala en tu archivo de plantilla AWS Serverless Application Model (AWS SAM) e incluye una sección de atributos de Metadata recursos con una BuildMethod entrada. Los valores válidos BuildMethod son los identificadores de un tiempo de ejecución de AWS Lambda, omakefile. Incluya una entrada BuildArchitecture para especificar las arquitecturas del conjunto de instrucciones que admite la capa. Los valores válidos para BuildArchitecture son las arquitecturas de conjuntos de instrucciones Lambda.

Si especifica makefile, proporcione el archivo Make personalizado, en el que se declara el destino de compilación del formulario build-layer-logical-id que contiene los comandos de creación de la capa. El archivo Make se encarga de compilar la capa, si es necesario, y de copiar los artefactos de compilación en la ubicación adecuada para los siguientes pasos del flujo de trabajo. La ubicación del archivo Make viene especificada por la propiedad ContentUri del recurso de capa y debe tener un nombre Makefile.

nota

Al crear una capa personalizada, AWS Lambda depende de las variables de entorno para encontrar el código de la capa. Los tiempos de ejecución de Lambda incluyen rutas en el directorio /opt en el que se copia el código de capa. La estructura de carpetas de artefactos de compilación del proyecto debe coincidir con la estructura de carpetas esperada para el tiempo de ejecución para poder encontrar el código de capa personalizado.

Por ejemplo, para Python, puede colocar el código en el subdirectorio python/. Por ejemplo, para NodeJS, puede colocar el código en el subdirectorio nodejs/node_modules/.

Para obtener más información, consulte Incluir las dependencias de biblioteca en una capa en la Guía para desarrolladores de AWS Lambda .

A continuación, se muestra un ejemplo de una sección de atributos de recursos Metadata.

Metadata: BuildMethod: python3.8 BuildArchitecture: arm64
nota

Si no incluye la sección de atributos del Metadata recurso, AWS SAM no crea la capa. En su lugar, copia los artefactos de compilación de la ubicación especificada en la propiedad CodeUri del recurso de la capa. Para obtener más información, consulte la ContentUripropiedad del tipo de AWS::Serverless::LayerVersion recurso.

Al incluir la sección de atributos del Metadata recurso, puede usar el sam build comando para crear la capa, como un objeto independiente o como una dependencia de una AWS Lambda función.

  • Como objeto independiente. Es posible que desee crear solo el objeto de la capa, por ejemplo, cuando esté probando localmente un cambio de código en la capa y no necesite compilar toda la aplicación. Para crear la capa de forma independiente, especifique el recurso de la capa con el comando sam build layer-logical-id.

  • Como dependencia de una función de Lambda. Al incluir el ID lógico de una capa en la propiedad Layers de una función de Lambda del mismo archivo de plantilla de AWS SAM , la capa es una dependencia de esa función de Lambda. Cuando esa capa también incluye una sección de atributos de recursos Metadata con una entrada BuildMethod, se crea la capa creando toda la aplicación con el comando sam build o especificando el recurso de la función con el comando sam build function-logical-id.

Ejemplos

Ejemplo de plantilla 1: Crear una capa con tiempo de ejecución de Python 3.9

La siguiente AWS SAM plantilla de ejemplo crea una capa en el entorno de ejecución de Python 3.9.

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.9 Metadata: BuildMethod: python3.9 # Required to have AWS SAM build this layer

Ejemplo de plantilla 2: Crear una capa con un archivo Make personalizado

La siguiente AWS SAM plantilla de ejemplo utiliza una capa personalizada makefile para crear la capa.

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.8 Metadata: BuildMethod: makefile

makefile contiene el destino de compilación y los comandos que se ejecutarán. Tenga en cuenta que la propiedad ContentUri está establecida en my_layer, por lo que el archivo Make debe estar ubicado en la raíz del subdirectorio my_layer y el nombre del archivo debe ser Makefile. Tenga en cuenta también que los artefactos de construcción se copian en el python/ subdirectorio para AWS Lambda que pueda encontrar el código de la capa.

build-MyLayer: mkdir -p "$(ARTIFACTS_DIR)/python" cp *.py "$(ARTIFACTS_DIR)/python" python -m pip install -r requirements.txt -t "$(ARTIFACTS_DIR)/python"

Ejemplo de comandos de compilación de sam

Los siguientes comandos sam build crean capas que incluyen las secciones de atributos de recursos Metadata.

# Build the 'layer-logical-id' resource independently $ sam build layer-logical-id # Build the 'function-logical-id' resource and layers that this function depends on $ sam build function-logical-id # Build the entire application, including the layers that any function depends on $ sam build