Las funciones de AWS Lambda son una forma de ejecutar código sin aprovisionar ni administrar sus propios servidores. En lugar de ejecutar una aplicación siempre en línea, ejecutan una sola función en la nube, que puede activarse en respuesta a eventos de la API u otros eventos en su cuenta de AWS.
¿Cómo se utilizan las funciones Lambda?
Lambda es un servicio de cómputo, sencillo y simple, y probablemente sea el más simple de todos. En lugar de alquilar un servidor con una cantidad específica de núcleos y una cantidad de RAM, simplemente cargue su código y ejecute la función. Por lo general, no lo ejecutará manualmente; en su lugar, lo configurará para que se ejecute en función de las acciones de otros servicios de AWS. Por ejemplo, ejecutar una función para cambiar el tamaño de las imágenes cada vez que se coloca un nuevo archivo en S3 (un método utilizado por el Seattle Times con gran eficacia), o consultar una base de datos cada vez que se envía una solicitud a API Gateway.
Los recursos de la computadora se otorgan automáticamente a la función en ejecución, y utilizará tanta memoria como sea necesario mientras la tarea continúe. Simplemente se le factura en función del número de invocaciones de funciones y la cantidad de memoria que utiliza cada invocación.
Esto hace que Lambda sea muy flexible para su uso como backend. Las aplicaciones tradicionales son en su mayoría monolíticas; tiene un servidor (o una flota de ellos) ejecutando su aplicación. Puede tener servidores separados para alojamiento web, bases de datos y otras cosas, pero muchas aplicaciones se construyen de esta manera: un gran ejecutable, muchas partes móviles.

Con todo tan interconectado y sin un orden estricto, esto puede complicarse muy rápido. También es más difícil escalar de manera efectiva; si encuentra que una parte de su aplicación es el cuello de botella, puede ser difícil eliminarla sin escalar toda la aplicación y aumentar considerablemente su factura de AWS en el proceso.
En su lugar, puede eliminar el cuello de botella por completo y moverlo a Lambda. Después de todo, a Lambda no le importa si ejecuta su función diez veces al mes o diez millones de veces al mes.

Esto permite que Lambda sea altamente eficiente y, cuando se implementa correctamente, puede ahorrarle mucho dinero. Adam Pash de Postlight pudo reducir su factura mensual de AWS de más de $10 000 a solo $370 simplemente cambiando a Lambda y optimizando el uso de la memoria.
Aunque no va a ser tan drástico ni tan fácil para todas las aplicaciones, Lambda tiene grandes beneficios que lo convierten en una parte crucial de la línea de servicios informáticos de AWS.
Para aplicaciones que no son de misión crítica, también presenta una forma muy económica de ejecutar una aplicación que necesita realizar solicitudes de API. Por ejemplo, podría servir una aplicación web estática sin ningún servidor, almacenando su sitio web en S3, sirviéndolo a través de CloudFront y conectándose a un backend de Lambda a través de API Gateway que se comunica con una tabla de DynamoDB.
¿Cuánto cuestan?
Como la mayoría de AWS, el precio de Lambda es un modelo de "pago por uso". En lugar de pagar un precio fijo por todo el servidor, solo pagará por la cantidad exacta de recursos que usa su aplicación; nunca pagará por el tiempo de inactividad, ni siquiera por un segundo. Obviamente, esto hace que Lambda sea bastante eficiente, además de poder eliminar los cuellos de botella en aplicaciones monolíticas.
Los cargos de Lambda son los siguientes, para
us-east-1:
- $0.20 por 1 millón de solicitudes
- $0.000016667 por cada GB-segundo
La primera carga tiene más sentido; si tiene 100 millones de solicitudes en un mes, pagará una tarifa de $20 por eso.
El segundo cargo es mucho más confuso. Básicamente, se le cobra en función del uso de memoria de sus funciones, ya que ese suele ser el factor limitante para AWS. Si su función se inicia, asigna 1024 MB de RAM y se ejecuta durante un solo segundo, se le cobrará $ 0.000001667 por eso. Ese es un número bastante bajo, pero en 1 millón de solicitudes, es $1.667.
Naturalmente, querrá elegir un tiempo de ejecución que sea eficiente en memoria. NodeJS se usa comúnmente, ya que es bastante liviano en comparación con tiempos de ejecución como Java. Sin embargo, Java puede ser más rápido para las tareas que tardan más en completarse y, dado que no paga por el tiempo dedicado a inicializar el tiempo de ejecución (es decir, un "arranque en frío"), no siempre es tan malo como parece en el papel.

Todo es un juego de equilibrio, pero desea minimizar dos cosas: el uso de la memoria y el tiempo dedicado a ejecutar la función. No hay un cargo explícito por las funciones de mayor duración, pero se le cobra por segundo, por GB, por lo que una función de 256 MB que se ejecuta durante dos segundos le costará lo mismo que una función de 512 MB que se ejecuta durante uno.
Primeros pasos
Inicie sesión en su cuenta de AWS y diríjase a la consola de administración de Lambda.
Aquí hay dos pestañas principales. El primero es para Aplicaciones; Las aplicaciones Lambda administran múltiples funciones y se implementan específicamente de forma automática mediante una plantilla SAM. Esto les permite realizar un seguimiento en Git y administrar la versión, lo que ayuda enormemente cuando se trabaja con cientos de funciones.
La segunda pestaña es para funciones individuales. Si solo está creando una función Lambda independiente, o simplemente está jugando para familiarizarse con ella, debe comenzar aquí y crear una función desde cero, ya que es mucho más simple.
Puede crear una nueva función desde la pestaña "Funciones":

Tienes algunas opciones aquí. Puede crear la función completamente desde cero, lo que inicializará la función con nada más que un hola mundo. También puede optar por utilizar una plantilla prediseñada o incluso descargar una función del repositorio de aplicaciones sin servidor de Lambda.
Si lo está creando usted mismo, tendrá que elegir un tiempo de ejecución. Lambda tiene algunos para elegir de forma predeterminada:

También puede traer su propio tiempo de ejecución para ejecutar cualquier idioma que desee.
Una vez creada, puedes editarla desde la página de la función. La función estándar de NodeJS exporta un controlador, al que se llama cada vez que la función responde a eventos.

Recomendamos usar el IDE Cloud9 de AWS para trabajar con funciones de Lambda. Es un IDE basado en la web creado en el mismo editor que se usa en el editor de funciones predeterminado, pero con el beneficio adicional de una prueba y depuración mucho más sencillas.
Si desea que su función responda a las solicitudes de API, el método más sencillo para configurarlo es con API Gateway. Puede crear una nueva API y hacer que enrute ciertos puntos finales directamente a una función Lambda específica, que manejará la solicitud y devolverá una respuesta.
De lo contrario, puede especificar un disparador en el "Diseñador" en la parte superior, como cada vez que se coloca un objeto en un depósito S3 en particular. También puede especificar un destino al que se envían los resultados, como una cola de SQS, un tema de SNS u otra función de Lambda.
La función Lambda se ejecutará con los privilegios que le otorga el rol de ejecución que se creó para ella. Si está accediendo a otros recursos de AWS, deberá otorgarle permiso para hacerlo en la consola de administración de IAM.