

# Uso de capas para funciones de Lambda en Java
<a name="java-layers"></a>

Utilice [capas de Lambda](chapter-layers.md) para empaquetar el código y las dependencias que desee reutilizar en varias funciones. Las capas suelen contener dependencias de biblioteca, un [tiempo de ejecución personalizado](runtimes-custom.md) o archivos de configuración. La creación de una capa implica tres pasos generales:

1. Empaquete el contenido de su capa. Esto significa crear un archivo de archivo. zip que contenga las dependencias que desea usar en sus funciones.

1. Cree la capa en Lambda.

1. Agregue la capa a sus funciones.

**Topics**
+ [Empaquete el contenido de su capa.](#java-layers-package)
+ [Creación de la capa en Lambda](#publishing-layer)
+ [Adición de la capa a la función](#java-layer-adding)

## Empaquete el contenido de su capa.
<a name="java-layers-package"></a>

Para crear una capa, agrupe sus paquetes en un archivo .zip que cumpla con los siguientes requisitos:
+ Asegúrese de que la versión de Java a la que hace referencia Maven o Gradle sea la misma que la versión de Java de la función que se pretende implementar. Por ejemplo, para una función de Java 25, el comando `mvn -v` debería incluir Java 25 en el resultado:
+ Las dependencias deben estar almacenadas en el directorio `java/lib`, en la raíz del archivo .zip. Para obtener más información, consulte [Rutas de capa para cada tiempo de ejecución de Lambda](packaging-layers.md#packaging-layers-paths).
+ Los paquetes de la capa deben ser compatibles con Linux. Las funciones de Lambda se ejecutan en Amazon Linux.

Puede crear capas que contengan bibliotecas de Java de terceros o sus propios módulos y paquetes de Java. El siguiente procedimiento utiliza Maven. También puede usar Gradle para empaquetar el contenido de la capa.

**Crear una capa mediante las dependencias de Maven**

1. Cree un proyecto de Apache Maven con un archivo `pom.xml` que defina las dependencias.

   El siguiente ejemplo incluye [Jackson Databind](https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind) para el procesamiento de JSON. La sección `<build>` usa el complemento [maven-dependency-plugin](https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-dependency-plugin) para crear archivos JAR independientes para cada dependencia en lugar de agruparlos en un único uber-jar. Si quiere crear un uber-jar, use [maven-shade-plugin](https://maven.apache.org/plugins/maven-shade-plugin/).  
**Example pom.xml**  

   ```
   <dependencies>
       <dependency>
           <groupId>com.fasterxml.jackson.core</groupId>
           <artifactId>jackson-databind</artifactId>
           <version>2.17.0</version>
       </dependency>
   </dependencies>
   
   <build>
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>3.13.0</version>
               <configuration>
                   <source>21</source>
                   <target>21</target>
                   <release>21</release>
               </configuration>
           </plugin>
           
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-dependency-plugin</artifactId>
               <version>3.6.1</version>
               <executions>
                   <execution>
                       <id>copy-dependencies</id>
                       <phase>package</phase>
                       <goals>
                           <goal>copy-dependencies</goal>
                       </goals>
                       <configuration>
                           <outputDirectory>${project.build.directory}/lib</outputDirectory>
                       </configuration>
                   </execution>
               </executions>
           </plugin>
       </plugins>
   </build>
   ```

1. Compilar el proyecto. Este comando crea todos los archivos JAR de dependencia en el directorio `target/lib/`.

   ```
   mvn clean package
   ```

1. Cree la estructura del directorio necesario para su capa:

   ```
   mkdir -p java/lib
   ```

1. Copie los archivos JAR de dependencia en el directorio `java/lib`:

   ```
   cp target/lib/*.jar java/lib/
   ```

1. Comprima en formato zip el contenido de la capa:

------
#### [ Linux/macOS ]

   ```
   zip -r layer.zip java/
   ```

------
#### [ PowerShell ]

   ```
   Compress-Archive -Path .\java -DestinationPath .\layer.zip
   ```

------

   La estructura de directorios del archivo .zip debería ser similar a la siguiente:

   ```
   java/              
   └── lib/
       ├── jackson-databind-2.17.0.jar
       ├── jackson-core-2.17.0.jar
       └── jackson-annotations-2.17.0.jar
   ```
**nota**  
Asegúrese de que su archivo .zip incluya el directorio `java` en el nivel raíz con `lib` en su interior. Esta estructura garantiza que Lambda pueda localizar e importar sus bibliotecas. Cada dependencia se mantiene como un archivo JAR independiente en lugar de estar agrupadas en un uber-jar.

## Creación de la capa en Lambda
<a name="publishing-layer"></a>

También puede publicar la capa con la AWS CLI o la consola de Lambda.

------
#### [ AWS CLI ]

Ejecute el comando [publish-layer-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/publish-layer-version.html) de la AWS CLI para crear la capa de Lambda:

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

El parámetro [Tiempos de ejecución compatibles](https://docs.aws.amazon.com/lambda/latest/api/API_PublishLayerVersion.html#lambda-PublishLayerVersion-request-CompatibleRuntimes) es opcional. Cuando se especifica, Lambda usa este parámetro para filtrar las capas en la consola de Lambda.

------
#### [ Console ]

**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. Elija **Cargar un archivo .zip** y, a continuación, cargue el archivo .zip que creó anteriormente.

1. (Opcional) En **Tiempos de ejecución compatibles**, elija el tiempo de ejecución de Java que corresponda a la versión de Java que utilizó para crear la capa.

1. Seleccione **Crear**.

------

## Adición de la capa a la función
<a name="java-layer-adding"></a>

------
#### [ AWS CLI ]

Para adjuntar la capa a la función, ejecute el comando [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html) de la AWS CLI. Para el parámetro `--layers`, use el ARN de la capa. El ARN debe especificar la versión (por ejemplo, `arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1`). Para obtener más información, consulte [Capas y versiones de capas](chapter-layers.md#lambda-layer-versions).

```
aws lambda update-function-configuration --function-name my-function --cli-binary-format raw-in-base64-out --layers "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"
```

La opción **cli-binary-format** es obligatoria si va a utilizar la versión 2 de la AWS CLI. Para que esta sea la configuración predeterminada, ejecute `aws configure set cli-binary-format raw-in-base64-out`. Para obtener más información, consulte [Opciones de la línea de comandos globales compatibles con AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) en la *Guía del usuario de la AWS Command Line Interface versión 2*.

------
#### [ Console ]

**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 **Elija una capa**, seleccione **Capas personalizadas** y, a continuación, elija su capa.
**nota**  
Si no agregó un [tiempo de ejecución compatible](https://docs.aws.amazon.com/lambda/latest/api/API_PublishLayerVersion.html#lambda-PublishLayerVersion-request-CompatibleRuntimes) al crear la capa, su capa no aparecerá aquí. Puede especificar el ARN de la capa en su lugar.

1. Seleccione **Añadir**.

------