

# Administración de las dependencias de Lambda con capas
<a name="chapter-layers"></a>

Una capa de Lambda es un archivo .zip que contiene código o datos adicionales. Las capas suelen contener dependencias de biblioteca, un [tiempo de ejecución personalizado](runtimes-custom.md) o archivos de configuración. 

Hay varias razones por las que podría considerar la posibilidad de usar las capas:
+ **Para reducir el tamaño de sus paquetes de implementación.** En lugar de incluir todas las dependencias de la función junto con el código de la función en el paquete de implementación, colóquelas en una capa. Esto mantiene los paquetes de implementación pequeños y organizados.
+ **Para separar la lógica de las funciones principales de las dependencias.** Con las capas, puede actualizar las dependencias de las funciones independientemente del código de la función y viceversa. Esto promueve la separación de preocupaciones y lo ayuda a concentrarse en la lógica de su función.
+ **Para compartir dependencias entre varias funciones.** Después de crear una capa, puede aplicarla a cualquier número de funciones de su cuenta. Sin capas, debe incluir las mismas dependencias en cada paquete de implementación individual.
+ **Para usar el editor de código de la consola de Lambda.** El editor de código es una herramienta útil para probar rápidamente actualizaciones de código de funciones menores. Sin embargo, no puede usar el editor si el tamaño del paquete de implementación es demasiado grande. El uso de capas reduce el tamaño del paquete y puede desbloquear el uso del editor de código.
+ **Para bloquear una versión de SDK incrustada.**Los SDK incrustados pueden cambiar sin previo aviso a medida que AWS ⁣publica nuevos servicios y características. Puede bloquear una versión del SDK al [crear una capa de Lambda](#chapter-layers) con la versión específica necesaria. Entonces, la función siempre usa la versión de la capa, incluso si la versión que se incrusta en el servicio cambia.

Si trabaja con funciones de Lambda en Go o Rust, le recomendamos que no utilice capas. En el caso de las funciones en Go y Rust, debe proporcionar el código de la función como ejecutable, que incluye el código de la función compilado junto con todas sus dependencias. Al colocar las dependencias en una capa, la función tiene que cargar de forma manual los ensamblajes adicionales durante la fase de inicialización, lo que puede aumentar los tiempos de arranque en frío. Para obtener un rendimiento óptimo de las funciones en Go y Rust, debe incluir las dependencias junto con el paquete de implementación.

El siguiente diagrama ilustra las diferencias arquitectónicas de alto nivel entre dos funciones que comparten dependencias. Una usa capas Lambda y la otra no.

![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/lambda-layers-diagram.png)


Cuando incluye una capa en una función, Lambda extrae los contenidos de la capa en el directorio `/opt` en el [entorno de ejecución](lambda-runtime-environment.md) de la función. Todos los tiempos de ejecución de Lambda compatibles de forma nativa incluyen rutas a directorios específicos dentro del directorio `/opt`. Esto permite que la función acceda al contenido de la capa. Para obtener más información sobre estas rutas específicas y sobre cómo empaquetar correctamente las capas, consulte [Empaquetado del contenido de la capa](packaging-layers.md).

Puede incluir hasta cinco capas por función. Además, puede utilizar capas solo con funciones de Lambda [implementadas como archivos .zip](configuration-function-zip.md). Para una función [definida como una imagen de contenedor](images-create.md), empaquete su tiempo de ejecución preferido y todas las dependencias de código al crear la imagen de contenedor. Para obtener más información, consulte [Cómo trabajar con capas y extensiones de Lambda](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/) en imágenes de contenedor en el blog de cómputo de AWS.

**Topics**
+ [

## Cómo usar las capas
](#lambda-layers-overview)
+ [

## Capas y versiones de capas
](#lambda-layer-versions)
+ [

# Empaquetado del contenido de la capa
](packaging-layers.md)
+ [

# Creación y eliminación de capas en Lambda
](creating-deleting-layers.md)
+ [

# Adición de capas a las funciones
](adding-layers.md)
+ [

# Usar AWS CloudFormation con capas
](layers-cfn.md)
+ [

# Usar AWS SAM con capas
](layers-sam.md)

## Cómo usar las capas
<a name="lambda-layers-overview"></a>

Para crear una capa, empaquete sus dependencias en un archivo .zip, de forma similar a como [crear un paquete de implementación normal](configuration-function-zip.md). Más específicamente, el proceso general de creación y uso de capas incluye estos tres pasos:
+ **Primero, empaquete el contenido de la capa.** Esto significa crear un archivo .zip. Para obtener más información, consulte [Empaquetado del contenido de la capa](packaging-layers.md).
+ **A continuación, cree la capa en Lambda.** Para obtener más información, consulte [Creación y eliminación de capas en Lambda](creating-deleting-layers.md).
+ **Agregue la capa a las funciones.** Para obtener más información, consulte [Adición de capas a las funciones](adding-layers.md).

## Capas y versiones de capas
<a name="lambda-layer-versions"></a>

Una versión de capa es una instantánea inmutable de una versión específica de una capa. Al crear una capa nueva, Lambda crea una nueva versión de capa con el número de versión 1. Cada vez que publique una actualización de la capa, Lambda incrementa el número de versión y crea una nueva versión de capa.

Cada versión de capa se identifica mediante un Nombre de recurso de Amazon (ARN) único. Al agregar una capa a la función, debe especificar la versión de capa exacta que desea utilizar (por ejemplo, `arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1`).

# Empaquetado del contenido de la capa
<a name="packaging-layers"></a>

Una capa de Lambda es un archivo .zip que contiene código o datos adicionales. Las capas suelen contener dependencias de biblioteca, un [tiempo de ejecución personalizado](runtimes-custom.md) o archivos de configuración. 

En esta sección se explica cómo empaquetar correctamente el contenido de la capa. Para obtener más información conceptual sobre las capas y los motivos por los que podría considerar la posibilidad de utilizarlas, consulte [Administración de las dependencias de Lambda con capas](chapter-layers.md).

El primer paso para crear una capa consiste en agrupar todo el contenido de la capa en un archivo .zip. Dado que las funciones de Lambda se ejecutan en [Amazon Linux](https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html), el contenido de la capa debe poder compilarse y crearse en un entorno de Linux.

Para garantizar que el contenido de su capa funcione correctamente en un entorno Linux, le recomendamos crear el contenido de la capa con una herramienta como [Docker](https://docs.docker.com/get-docker).

**Topics**
+ [

## Rutas de capa para cada tiempo de ejecución de Lambda
](#packaging-layers-paths)

## Rutas de capa para cada tiempo de ejecución de Lambda
<a name="packaging-layers-paths"></a>

Cuando agrega una capa a una función, Lambda carga el contenido de la capa en el directorio `/opt` de ese entorno de ejecución. Para cada tiempo de ejecución de Lambda, la variable `PATH` ya incluye rutas de carpeta específicas en el directorio `/opt`. Para garantizar que Lambda recoja el contenido de la capa, el archivo .zip de la capa, debe tener sus dependencias en las siguientes rutas de carpeta:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/packaging-layers.html)

En los siguientes ejemplos se muestra cómo puede estructurar las carpetas en el archivo .zip de su capa.

------
#### [ Node.js ]

**Example estructura de archivos para el SDK de AWS X-Ray para Node.js**  

```
xray-sdk.zip
└ nodejs/node_modules/aws-xray-sdk
```

------
#### [ Python ]

**Example**  

```
python/              # Required top-level directory
└── requests/
└── boto3/
└── numpy/
└── (dependencies of the other packages)
```

------
#### [ Ruby ]

**Example estructura de archivos para la gema de JSON**  

```
json.zip
└ ruby/gems/3.4.0/
               | build_info
               | cache
               | doc
               | extensions
               | gems
               | └ json-2.1.0
               └ specifications
                 └ json-2.1.0.gemspec
```

------
#### [ Java ]

**Example estructura de archivos para el archivo JAR de Jackson**  

```
layer_content.zip
└ java
    └ lib
        └ jackson-core-2.17.0.jar
        └ <other potential dependencies>
        └ ...
```

------
#### [ All ]

**Example estructura de archivos para la biblioteca jq**  

```
jq.zip
└ bin/jq
```

------

Para obtener instrucciones específicas del idioma sobre cómo empaquetar, crear y agregar una capa, consulte las siguientes páginas:
+ **Node.js**: [Uso de capas para funciones de Lambda en Node.js](nodejs-layers.md)
+ **Python**: [Uso de capas para funciones de Lambda en Python](python-layers.md)
+ **Ruby**: [Uso de capas para funciones de Lambda en Ruby](ruby-layers.md)
+ **Java**: [Uso de capas para funciones de Lambda en Java](java-layers.md)

**No recomendamos** usar capas para administrar las dependencias de las funciones de Lambda escritas en Go y Rust. Esto se debe a que las funciones de Lambda escritas en esos lenguajes se compilan en un único ejecutable, que se proporciona a Lambda al implementar la función. Este ejecutable contiene el código de la función compilada, junto con todas sus dependencias. El uso de capas no solo complica este proceso, sino que también aumenta los tiempos de arranque en frío, ya que las funciones tienen que cargar manualmente los ensamblajes adicionales en la memoria durante la fase de inicialización.

Para usar dependencias externas con las funciones de Lambda de Go y Rust, inclúyalas directamente en el paquete de implementación.

# Creación y eliminación de capas en Lambda
<a name="creating-deleting-layers"></a>

Una capa de Lambda es un archivo .zip que contiene código o datos adicionales. Las capas suelen contener dependencias de biblioteca, un [tiempo de ejecución personalizado](runtimes-custom.md) o archivos de configuración. 

En esta sección se explica cómo crear y eliminar capas en Lambda. Para obtener más información conceptual sobre las capas y los motivos por los que podría considerar la posibilidad de utilizarlas, consulte [Administración de las dependencias de Lambda con capas](chapter-layers.md).

Después de haber [empaquetado el contenido de su capa](packaging-layers.md), el siguiente paso consiste en crear la capa en Lambda. En esta sección se muestra cómo crear y eliminar capas utilizando únicamente la consola de Lambda o la API de Lambda. Para crear una capa con AWS CloudFormation, consulte [Usar AWS CloudFormation con capas](layers-cfn.md). Para crear una capa con AWS Serverless Application Model (AWS SAM), consulte [Usar AWS SAM con capas](layers-sam.md).

**Topics**
+ [

## Creación de una capa
](#layers-create)
+ [

## Eliminación de una versión de capa
](#layers-delete)

## Creación de una capa
<a name="layers-create"></a>

Para crear una capa, puede cargar el archivo .zip desde su equipo local o desde Amazon Simple Storage Service (Amazon S3). Lambda extrae el contenido de la capa en el directorio `/opt` al configurar el entorno de ejecución para la función.

Las capas pueden tener una o más [versiones de capa](chapter-layers.md#lambda-layer-versions). Al crear una capa, Lambda establece la versión de la capa en la versión 1. Puede cambiar los permisos de una versión de capa existente en cualquier momento. Sin embargo, para actualizar el código o realizar otros cambios de configuración, debe crear una nueva versión de la capa.

**Para crear una capa (consola)**

1. Abra la página de [Capas](https://console.aws.amazon.com/lambda/home#/layers) de la consola de Lambda.

1. Elija **Crear capa**.

1. En **Configuración de la capa**, en **Nombre**, escriba un nombre para la capa.

1. (Opcional) En **Descripción**, escriba una descripción para su capa.

1. Para cargar el código de capa, realice una de las siguientes acciones:
   + Para cargar un archivo.zip desde el equipo, elija **Cargar un archivo .zip**. Seleccione **Cargar** para seleccionar el archivo .zip local.
   + Para cargar un archivo desde Amazon S3, elija **Upload a file from Amazon S3 (Cargar un archivo desde Amazon S3)**. Entonces, para el **URL de enlace de Amazon S3**, ingrese un enlace al archivo.

1. (Opcional) En **Arquitecturas compatibles**, elija un valor o ambos valores. Para obtener más información, consulte [Configuración y selección de la arquitectura del conjunto de instrucciones para una función de Lambda](foundation-arch.md).

1. (Opcional) Para **Tiempos de ejecución compatibles**, elija los tiempos de ejecución con los que la capa es compatible.

1. (Opcional) Para **Licencia**, introduzca la información de licencia necesaria.

1. Seleccione **Crear**.

Como alternativa, puede ejecutar el comando [publish-layer-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/publish-layer-version.html) de la AWS Command Line Interface (CLI). Ejemplo:

```
aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes python3.14
```

Cada vez que ejecuta `publish-layer-version`, Lambda crea una [nueva versión de la capa](chapter-layers.md#lambda-layer-versions).

## Eliminación de una versión de capa
<a name="layers-delete"></a>

Para eliminar una versión de capa, utilice la operación de la API [DeleteLayerVersion](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteLayerVersion.html). Por ejemplo, ejecute el comando [delete-layer-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/delete-layer-version.html) de la AWS CLI con el nombre de capa y la versión de capa especificados.

```
aws lambda delete-layer-version --layer-name my-layer --version-number 1
```

Al eliminar una versión de una capa, ya no puede configurar una función de Lambda para usarla. Sin embargo, cualquier función que ya utilice la versión sigue teniendo acceso a la misma. Además, Lambda nunca reutiliza los números de versión para el nombre de una capa.

Al calcular las [cuotas](gettingstarted-limits.md), eliminar una versión de capa significa que ya no se cuenta como parte de la cuota predeterminada de 75 GB para el almacenamiento de funciones y capas. Sin embargo, en el caso de las funciones que consumen una versión de capa eliminada, el contenido de la capa sigue contando para la cuota de tamaño del paquete de implementación de la función (es decir, 250 MB para archivos con formato .zip).

# Adición de capas a las funciones
<a name="adding-layers"></a>

Una capa de Lambda es un archivo .zip que contiene código o datos adicionales. Las capas suelen contener dependencias de biblioteca, un [tiempo de ejecución personalizado](runtimes-custom.md) o archivos de configuración. 

En esta sección se explica cómo agregar una capa a una función de Lambda. Para obtener más información conceptual sobre las capas y los motivos por los que podría considerar la posibilidad de utilizarlas, consulte [Administración de las dependencias de Lambda con capas](chapter-layers.md).

Para poder configurar una función de Lambda en la que se utilice una capa, debe hacer lo siguiente:
+ [Empaquete el contenido de su capa](packaging-layers.md).
+ [Cree una capa en Lambda](creating-deleting-layers.md).
+ Asegúrese de que tiene permiso para llamar a la API [GetLayerVersion](https://docs.aws.amazon.com/lambda/latest/api/API_GetLayerVersion.html) en la versión de la capa. Para las funciones de su Cuenta de AWS, debe tener este permiso en su [política de usuario](access-control-identity-based.md). Para utilizar una capa en otra cuenta, el propietario de esa cuenta debe conceder permiso a su cuenta en una [política basada en recursos](access-control-resource-based.md). Para ver ejemplos, consulte [Concesión de acceso a las capas de Lambda a otras cuentas](permissions-layer-cross-account.md).

Puede agregar hasta cinco capas a una función de Lambda. El tamaño total descomprimido de la función y todas las capas no puede superar la cuota de tamaño del paquete de implementación sin comprimir, de 250 MB. Para obtener más información, consulte [Cuotas de Lambda](gettingstarted-limits.md).

Sus funciones pueden seguir utilizando cualquier versión de capa que ya haya agregado, incluso después de que se haya eliminado esa versión de capa o después de revocar su permiso de acceso a la capa. Sin embargo, no puede crear una nueva función que utilice una versión de capa eliminada.

**Adición de una capa a una función**

1. Abra la página de [Funciones](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Elija la función.

1. Desplácese hacia abajo hasta la sección **Capas** y, a continuación, elija **Agregar una capa**.

1. En **Elegir una capa**, elija un origen de capa:

   1. **Capas de AWS**: elija en la lista de [extensiones administradas por AWS](extensions-api-partners.md#aws-managed-extensions).

   1. **Capas personalizadas**: elija una capa creada en su Cuenta de AWS.

   1. **Especificar un ARN**: para usar una capa [de una Cuenta de AWS distinta](permissions-layer-cross-account.md), como una [extensión de un tercero](extensions-api-partners.md), ingrese el Nombre de recurso de Amazon (ARN).

1. Elija **Agregar**.

El orden en el que agrega las capas es el orden en que Lambda combina el contenido de las capas en el entorno de ejecución. Puede cambiar el orden de fusión de capas mediante la consola.

**Para actualizar el orden de combinación de capas de una función (consola)**

1. Abra la página de [Funciones](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Elija la función que desea configurar.

1. En **Layers** (Capas), elija **Edit** (Editar).

1. Elija una de las capas.

1. Elija **Merge earlier** (Fusionar antes) o **Merge later** (Fusionar después) para ajustar el orden de las capas.

1. Seleccione **Save**.

Las capas están versionadas. El contenido de cada versión de capa es inmutable. El propietario de una capa puede lanzar una nueva versión de capa para proporcionar contenido actualizado. Puede utilizar la consola para actualizar la versión de capa adjunta a sus funciones.

**Para actualizar las versiones de las capas de la función (consola)**

1. Abra la página de [Capas](https://console.aws.amazon.com/lambda/home#/layers) de la consola de Lambda.

1. Elija la capa para la que desea actualizar la versión.

1. Elija la pestaña **Funciones que utilizan esta versión**.

1. Elija las funciones que desee modificar y, a continuación, elija **Editar**.

1. En **Versión de la capa**, seleccione la versión de capa a la que desea cambiar.

1. Elija **Update functions** (Actualizar funciones).

No se pueden actualizar las versiones de capas de función entre cuentas de AWS.

## Búsqueda de información de capa
<a name="finding-layer-information"></a>

Para buscar capas en su cuenta que sean compatibles con el tiempo de ejecución de su función, utilice la API [ListLayers](https://docs.aws.amazon.com/lambda/latest/api/API_ListLayers.html). Por ejemplo, puede usar el siguiente comando [list-layers](https://docs.aws.amazon.com/cli/latest/reference/lambda/list-layers.html) de la AWS Command Line Interface (CLI):

```
aws lambda list-layers --compatible-runtime python3.14
```

Debería ver una salida similar a esta:

```
{
    "Layers": [
        {
            "LayerName": "my-layer",
            "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer",
            "LatestMatchingVersion": {
                "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2",
                "Version": 2,
                "Description": "My layer",
                "CreatedDate": "2025-04-15T00:37:46.592+0000",
                "CompatibleRuntimes": [
                    "python3.14"
                ]
            }
        }
    ]
}
```

Para enumerar todas las capas de su cuenta, omita la opción `--compatible-runtime`. Los detalles de la respuesta muestran la versión más reciente de cada capa.

También puede obtener la versión más reciente de una capa con la API [ListLayerVersions](https://docs.aws.amazon.com/lambda/latest/api/API_ListLayerVersions.html). Por ejemplo, puede usar el siguiente comando `list-layer-versions` de la CLI:

```
aws lambda list-layer-versions --layer-name my-layer
```

Debería ver una salida similar a esta:

```
{
    "LayerVersions": [
        {
            "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2",
            "Version": 2,
            "Description": "My layer",
            "CreatedDate": "2023-11-15T00:37:46.592+0000",
            "CompatibleRuntimes": [
                "java11"
            ]
        },
        {
            "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:1",
            "Version": 1,
            "Description": "My layer",
            "CreatedDate": "2023-11-15T00:27:46.592+0000",
            "CompatibleRuntimes": [
                "java11"
            ]
        }
    ]
}
```

# Usar AWS CloudFormation con capas
<a name="layers-cfn"></a>

Puede utilizar CloudFormation para crear una capa y asociar la capa con la función de Lambda. En la siguiente plantilla de ejemplo se crea una capa denominada `my-lambda-layer` y se asocia la capa a la función de Lambda mediante la propiedad **Layers**.

En este ejemplo, la plantilla especifica el nombre de recurso de Amazon (ARN) de un [rol de ejecución](lambda-intro-execution-role.md) de IAM existente. También puede crear un nuevo rol de ejecución en la plantilla mediante el recurso de la CloudFormation [AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html).

Su función no necesita ningún permiso especial para usar capas.

```
---
Description: CloudFormation Template for Lambda Function with Lambda Layer
Resources:
  MyLambdaLayer:
    Type: AWS::Lambda::LayerVersion
    Properties:
      LayerName: my-lambda-layer
      Description: My Lambda Layer
      Content:
        S3Bucket: amzn-s3-demo-bucket
        S3Key: my-layer.zip
      CompatibleRuntimes:
        - python3.9
        - python3.10
        - python3.11

  MyLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: my-lambda-function
      Runtime: python3.9
      Handler: index.handler
      Timeout: 10
      Role: arn:aws:iam::111122223333:role/my_lambda_role
      Layers:
        - !Ref MyLambdaLayer
```

# Usar AWS SAM con capas
<a name="layers-sam"></a>

Puede utilizar AWS Serverless Application Model (AWS SAM) para automatizar la creación de capas en su aplicación. El tipo de recurso `AWS::Serverless::LayerVersion` crea una versión de capa a la que puede hacer referencia desde la configuración de la función de Lambda.

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: AWS SAM Template for Lambda Function with Lambda Layer

Resources:
  MyLambdaLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: my-lambda-layer
      Description: My Lambda Layer
      ContentUri: s3://amzn-s3-demo-bucket/my-layer.zip
      CompatibleRuntimes:
        - python3.9
        - python3.10
        - python3.11

  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: MyLambdaFunction
      Runtime: python3.9
      Handler: app.handler
      CodeUri: s3://amzn-s3-demo-bucket/my-function
      Layers:
        - !Ref MyLambdaLayer
```