KLayers: El paquete que cambió el juego

El paquete que cambió su forma de escribir funciones de AWS Lambda

KLayers — Cómo establecer capas y dependencias de AWS Lambda en solo unos minutos: ¡nunca vuelva a tocar un archivo zip!

AWS Lambda es un servicio increíblemente útil. Permite ejecutar pequeños fragmentos de código rápidamente sin servidor. Sin embargo, Lambda siempre se ha peleado por cómo administrar las dependencias.

Hace años, tenías que descargar bibliotecas adicionales manualmente, las necesitabas y las comprimías con el resto de tu código. Una característica dolorosa y, sinceramente, molesta. Sin mencionar la dificultad de actualizar un paquete individual tan estrechamente relacionado con el resto de su código.

Luego vinieron las capas de AWS, un método para separar los paquetes que necesita del código que ha escrito. Esto hizo las cosas MUCHO más limpias, pero desafortunadamente no facilitó mucho la configuración.

Todavía tenía que ir y descargar cada paquete que necesita, comprimirlo en un archivo y empaquetarlo en su propia capa de lambda, repitiendo el proceso cada vez que se necesita actualizar una biblioteca.

Pero eso ahora es cosa del pasado gracias a KLayers, un recurso de Python que empaqueta la mayoría de las bibliotecas en Nombres de recursos de Amazon (ARN) y los hace fácilmente disponibles para todos.


Empezando

Usar KLayers es increíblemente simple, simplemente seleccione su versión de tiempo de ejecución de Python, especifique su región y copie el ARN. (o presione la referencia de la API directamente https://api.klayers.cloud/api/v2/{python_version}/layers/{region}/{package}). Desde allí, vaya a su lambda, seleccione agregar capa, especifique un ARN y péguelo, ¡así de fácil!

KLayers

Mejor aún, si el paquete que necesita no existe, simplemente puede crear una solicitud de extracción y agregar el paquete solicitado a un CSV.

Automatización de KLayers

¿Eres parte de una organización que pone en marcha la infraestructura usando Terraform? Bueno, KLayers tiene un proveedor dedicado, terraform-provider-klayers.

Al usar este proveedor, podemos especificar una versión específica de cada biblioteca para que se incluya en el momento de la creación, o hacer que nuestras bibliotecas se actualicen automáticamente a la última versión, ¡resolviendo por completo los problemas anteriores de control de versiones de Lambda!

El siguiente ejemplo muestra cómo se podría empaquetar automáticamente la última versión de pandas en un Lambda.

terraform {
   required_providers {
    klayer = {
     version = "~> 1.0.0"
     source = "ldcorentin/klayer"
    }
    aws = {
     source = "hashicorp/aws"
     version = "~> 3.0"
    }
   }
}

provider "aws" {
   region = "us-east-1"
}

data "klayers_package_latest_version" "pandas" {
   name = "pandas"
   region = "us-east-1"
}

resource "aws_lambda_function" "test_lambda" {
   filename = "index.zip"
   function_name = "klayers-test"
   role = aws_iam_role.iam_for_lambda.arn
   handler = "index.handler"
   runtime = "python3.9"
   layers = [
    data.klayers_package_latest_version.pandas
   ]
}

Alternativas

Revisé la web en busca de alternativas a KLayers que pudiera compartir para agregar a la base de conocimientos de mis lectores. Pero, para ser honesto, no pude encontrar mucho de nada.

Sin embargo, casi siempre podía buscar en Google un paquete conocido + ARN + capa (por ejemplo, la capa de ARN de TensorFlow) y encontrar un retenedor de paquete o un usuario independiente que había creado una capa, como esta para TensorFlow, o esta para pyTenable.


Conclusión

Cambiar a KLayers como administrador de biblioteca me ha ahorrado mucho tiempo en el proceso de creación y actualización de Lambda. Pasó de una tarea rutinaria a una tarea prácticamente automatizada.

Sinceramente, me sorprende que AWS no haya intentado crear su propio método para descargar paquetes comunes dentro de Lambda, ¡pero no me sorprendería si lo viéramos en algún momento!

¡Espero que este artículo cambie la forma en que interactúa con AWS Lambda! Si es así, ¡asegúrate de guardar/marcar la historia si crees que tendrás que volver para consultarla!

Si disfrutó este artículo, siéntete libre de seguirme y leer más de lo que escribo, o utilízame como referencia para que pueda continuar creando el contenido que amo.


¿Le interesa puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre Laravel?

Recent Post