Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 22, 2023 08:54 pm GMT

Desplegar funciones Lambdas usando Layers con Java

El servicio de AWS Lambas ofrece una gran variedad de configuraciones, con el objetivo de minimizar costos, optimizar cdigo y mejorar tiempos de respuesta. En esta ocasin se har uso de Layers para centralizar las dependencias/libs (jars) en un solo lugar, y que todas las lambdas desplegadas puedan acceder a esa configuracin donde se almacenan las dependencias.

Layers o Capas AWS Lambda

AWS Lambda Layers es una caracterstica de AWS Lambda que permite a los desarrolladores empaquetar y reutilizar cdigo comn en mltiples funciones. Esta caracterstica se puede utilizar para compartir bibliotecas de cdigo, tiempos de ejecucin personalizados y otras dependencias entre funciones, lo que puede simplificar el proceso de desarrollo y reducir el tamao de los paquetes de implementacin.

Uno de los principales beneficios de utilizar Layers en Lambda es que permite a los desarrolladores separar el cdigo de las dependencias, esto permite actualizar las dependencias en un solo lugar y no tener que hacerlo en cada funcin, esto tambin reduce el tamao de los paquetes de implementacin ya que las dependencias no se incluyen en cada funcin.

La imagen proporcionada por DZone sobre Layers en Lambdas es super simple de entender. Con el uso de Lambda Layers podemos centralizar todas las dependencias en un solo lugar, y las definiciones de las funciones lambdas deben tener la capacidad de consumir dicho repositorio para realizar las tareas sin problemas, adems de que el tamao de las funciones van a ser muy ligeras.

Image description

Ejercicio AWS Lambda Layers

Para mostrar el uso de Lambda Layers se usa un proyecto dummy en Java con dos lambdas para desplegar con la ayuda de SAM CLI.

Configuracin de Layers

Para configurar un Layer se usa las plantillas de AWS CloudFormation con la extensin del framework SAM, el tipo de recurso a crear es AWS::Serverless::LayerVersion.

Resources:  LabsLayer:    Type: AWS::Serverless::LayerVersion    Properties:      LayerName: !Sub ${AWS::StackName}-LabsLayer      Description: Layer libs for kc-labs-serverless      ContentUri: kc-labs-app/dependencies      CompatibleRuntimes:        - java11        - java8      CompatibleArchitectures:        - x86_64      LicenseInfo: "MIT"      RetentionPolicy: Retain......

En las definiciones de las funciones lambdas se debe vincular el layer creado:

Image description

Nota: Se configura la propiedad Metadata para personalizar la construccin del empaquetado de las funciones lambdas.

Libreras de proyecto en pom.xml

Para este ejercicio se tienen algunas dependencias usadas en el proyecto de Lambdas.

Image description

Makefile

En la raiz del proyecto de Java se debe crear un archivo Makefile:

Image description

build-lambda:    cp -rf ./target/classes/* $(ARTIFACTS_DIR)/build-LabsGreetingsGETHelloLambda: build-lambdabuild-LabsGreetingGETNameLambda: build-lambda

Dentro de ese archivo se configura el comando para copiar las definiciones de nuestras clases, ah estarn los handlers/manejadores de entrada para las lambdas. En este caso se tiene dos lambdas, se debe configurar con el nombre lgico para cada lambda.

Image description

Construir proyecto

Dentro de la raz del proyecto Java se ejecutan los siguiente comandos.

Para construir el empaquetado del proyecto:

mvn clean package

Para obtener todas las dependencias (jars) usadas en el proyecto en una carpeta:

mvn dependency:copy-dependencies -DoutputDirectory=dependencies/java/lib -Dmdep.prependGroupId=true -DexcludeScope=provided

Nota: Verificar que la carpetas target y dependencies/java/lib hayan sido creadas.

Nota: Verificar la ruta de la capa, para cada runtime es diferente: Layer dependecies.

Un directorio ms atrs donde esta definido el archivo template.yaml ejecutar el comando:

sam build

Finalmente para desplegar usar el comando:

sam deploy o sam deploy --guided si es un primer despliegue.

Resultados

Una vez desplegado el stack se puede verificar las lambdas desde la consola de Lambda en la seccin Code:

Image description

Se puede verificar que la lambda pesa muy poco, esto debido a que no se esta incluyendo las dependencias jars para cada lambda.

Se verifica la creacin del layer:

Image description

Image description

Con la creacin de este layer todas las lambdas tienen la posibilidad de acceder a este recurso para consumir las dependencias que se hayan subido.

Conclusiones

  • AWS Lambda Layers es una caracterstica poderosa que permite a los desarrolladores reutilizar cdigo y dependencias en mltiples funciones, lo que simplifica el proceso de desarrollo y reduce el tamao de los paquetes de implementacin.

  • Esta caracterstica tambin permite actualizar las dependencias en un solo lugar y compartir cdigo entre mltiples funciones, esto ayudara a la escalabilidad de la aplicacin debido a que se puede tener diferentes capas para cada responsabilidad y las lgicas de negocio aisladas del handler principal.

  • Si la capa layer es bastante pesada es considerable usar un bucket de S3 y referenciar ese bucket en la creacin del Layer.

Referencias


Original Link: https://dev.to/kcatucuamba/desplegar-funciones-lambdas-usando-layers-con-java-57c6

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To