# AWS Lambda

AWS Lambda és una funció com a servei (FaaS) basada en esdeveniments i sense servidor proporcionada per Amazon com a part d'Amazon Web Services. Està dissenyat per permetre als desenvolupadors executar codi sense proveir ni gestionar servidors. Executa codi en resposta als esdeveniments i gestiona automàticament els recursos informàtics requerits per aquest codi. Es va presentar el 13 de novembre de 2014.

## Especificació

Cada instància d'AWS Lambda s'executa en un entorn lleuger i aïllat alimentat per microVM Firecracker. Aquestes microVM s'inicien amb un entorn d'execució basat en Amazon Linux (Amazon Linux AMI o Amazon Linux 2), una distribució de Linux personalitzada desenvolupada per AWS. Firecracker proporciona un aïllament basat en la virtualització de maquinari, amb l'objectiu d'aconseguir un rendiment gairebé de metall amb una sobrecàrrega mínima. AWS afirma que, a diferència de les màquines virtuals tradicionals, aquestes microVM es llancen en mil·lisegons, permetent una execució ràpida i segura de funcions amb una empremta de memòria mínima. L'AMI Linux d'Amazon està optimitzada específicament per a càrregues de treball natives del núvol i sense servidor, amb l'objectiu de proporcionar un entorn d'execució lleuger, segur i de rendiment.
A 2025, AWS Lambda supports Node.js, Python, Java, Go,.NET, Ruby and custom runtimes.

## Característiques

El 2019, a la conferència anual de computació en núvol d'AWS (AWS re:Invent), l'equip d'AWS Lambda va anunciar "Provisioned Concurrency", una característica que "manté les funcions inicialitzades i hiper-preparades per respondre en mil·lisegons de dos dígits". L'equip de Lambda va descriure Provisioned Concurrency com "ideal per implementar serveis interactius, com ara backends web i mòbils, microserveis sensibles a la latència o API síncrones".
L'URL de la funció Lambda proporciona a Lambda un URL únic i permanent al qual poden accedir usuaris autenticats i no autenticats.

### Capa lambda

La capa AWS Lambda és un arxiu ZIP que conté biblioteques, marcs o codi personalitzat que es pot afegir a les funcions d'AWS Lambda. Des de desembre de 2024, les capes d'AWS Lambda tenen limitacions importants:
* No hi ha suport de versions semàntiques.
* Incompatibilitat amb les principals eines d'escaneig de seguretat.
* Contribució al límit de mida de 250 MB de Lambda.
* Proves locals impedides.
* No hi ha optimitzacions per tremolar els arbres.

## Destinacions Lambda vs. Cues de cartes morta

Les destinacions d'AWS Lambda ofereixen capacitats avançades de gestió d'errors i d'encaminament en comparació amb les cues de cartes inèdites (DLQ). Tot i que els DLQ només capturen invocacions asíncrones fallides per al processament manual, Lambda Destinations admet tant invocacions síncrones com asíncrones. Les destinacions Lambda permeten l'encaminament a diversos objectius, com ara Amazon SQS, SNS, EventBridge o una altra funció Lambda, en funció del resultat de la invocació (èxit o error). Les destinacions també inclouen la capacitat de capturar informació contextual detallada sobre la invocació, com ara càrregues útils de sol·licituds i respostes, ajudant a un seguiment i resolució de problemes més granulars. Aquesta característica facilita fluxos de treball de gestió d'errors més dinàmics i automatitzats en aplicacions sense servidor.

## Bones pràctiques

Seguir les pràctiques de DevSecOps pot ajudar els usuaris finals a utilitzar i protegir les aplicacions basades en Lambda de manera més eficaç. A les aplicacions basades en Lambda, la línia entre la infraestructura i la lògica empresarial es difumina i les aplicacions solen estar repartides per diversos serveis. Segons Yan Cui, per treure el màxim profit dels esforços de prova, les aplicacions basades en Lambda s'han de provar principalment per a les seves integracions, i les proves unitàries només s'han d'utilitzar si hi ha una lògica de negoci complexa. A més, per facilitar la depuració i la implementació de basats en Lambda, els desenvolupadors haurien d'utilitzar l'orquestració dins del context limitat d'un microservei i haurien d'utilitzar la coreografia entre els contextos acotats.

## Referències

* ↑ Serverless Development on AWS Building Enterprise-Scale Serverless Solutions (en anglès). O'Reilly Media. ISBN 9781098141899.
* ↑ Accelerating Server-Side Development with Fastify: A comprehensive guide to API development for building a scalable backend for your web apps (en anglès). ISBN 9781800568747.
* ↑ «Firecracker – Lightweight Virtualization for Serverless Computing» (en anglès).
* ↑ «Secure and fast microVMs for serverless computing» (en anglès).
* ↑ «Lambda runtimes» (en anglès).
* ↑ «New – Provisioned Concurrency for Lambda Functions» (en anglès). aws.amazon.com, 03-12-2019. Arxivat de l'original el 2020-10-18. [Consulta: 12 octubre 2020].
* ↑ «New – Provisioned Concurrency for Lambda Functions» (en anglès americà). Amazon Web Services, 03-12-2019. Arxivat de l'original el 2020-02-03. [Consulta: 3 febrer 2020].
* ↑ «Lambda function URLs - AWS Lambda» (en anglès). docs.aws.amazon.com. Arxivat de l'original el 2024-03-01. [Consulta: 1r març 2024].
* ↑ «Managing Lambda dependencies with layers» (en anglès). Arxivat de l'original el 2024-02-04. [Consulta: 2 febrer 2024].
* ↑ Sbarski, Peter. Serverless Architectures on AWS: With examples using AWS Lambda (en anglès). ISBN 9781638351146.
* ↑ Data Engineering with AWS: Learn how to design and build cloud-based data transformation pipelines using AWS (en anglès). ISBN 9781800569041.
* ↑ Programming AWS Lambda: Build and Deploy Serverless Applications with Java (en anglès). O'Reilly Media. ISBN 9781492041023.
* ↑ Cui, Yan. Serverless Architectures on AWS (en anglès). 2nd. Manning, 2020. ISBN 978-1617295423.
* ↑ Katzer, Jason. Learning Serverless: Design, Develop, and Deploy with Confidence (en anglès). O'Reilly Media, 2020. ISBN 978-1492057017.
* ↑ Cui, Yan. Serverless Architectures on AWS (en anglès). 2nd. Manning, 2020. ISBN 978-1617295423.