Estoy jugando con Cloudformation Serverless Transformation y estoy tratando de averiguar cómo y cuándo usar AWS::Serverless::Function o AWS::Lambda::Function . Por alguna razón, la versión de Lambda se usa para ejemplos de SAM en AWS. Esto es muy confuso. SAMgithub . Y luego también está el marco servlerless en sí mismo, que es realmente un marco nodejs . Todo esto me está confundiendo mucho.
En primer lugar, permítanme explicar cada uno de estos.
AWS Serverless Stack: una combinación de tecnologías sin servidor que ofrece AWS, incluidas API Gateway, Lambda, S3, etc.
Cuando Lambda se presentó por primera vez, fue un desafío desarrollar aplicaciones sin servidor usando estas tecnologías usando Cloudformation. El problema se debió a la complejidad de escribir Cloudformation para API Gateway y Lambda.
Aquí es donde entró Serverless Framework.
Marco sin servidor: un marco DevOps de código abierto que simplifica la definición de API Gateway y Lambda mediante un archivo simple llamado serverless.yml. Dado que Serverless Framework usa convenciones sobre configuraciones, solo requirió unas pocas líneas de código para definir Lambda, API Gateway, etc. Debajo de Serverless Framework genera Cloudformation basado en lo que se define en serverless.yml. Además, Serverless Framework admitió múltiples proveedores de nube.
Más tarde, AWS introdujo su propio lenguaje de secuencias de comandos simplificado llamado AWS SAM (Nota: AWS SAM no es un marco como Serverless con complementos y compatibilidad con extensiones a partir de ahora) para reducir la complejidad en la definición de CloudFormation como una alternativa a Serverless Framework.
AWS::Lambda::Function es la sintaxis de Cloudformation para definir una función de Lambda.
AWS::Serverless::Function es la sintaxis de AWS SAM para definir una función Lambda que crea internamente una función Lambda en Cloudformation ( AWS::Lambda::Function ) y recursos relacionados por convención al ejecutar AWS SAM.
AWS::Serverless::Function es para cuando se usa con AWS SAM , mientras que AWS::Lambda::Function es para usar con Cloudformation simple. Esencialmente, ambos modelan funciones Lambda, pero es solo para diferentes marcos, que por lo tanto tienen diferentes nombres para más o menos lo mismo.
Conceptualmente, no hay diferencia entre una función sin servidor o Lambda. Serverless es el término genérico para lo que AWS llama Lambda (y API Gateway).
El marco sin servidor es entonces solo un proyecto de software que se basa en principios sin servidor y que puede funcionar con AWS Lambda (entre otros). Realmente no es muy diferente de otros marcos como Chalice o Zappa (ambos marcos sin servidor basados en Python que se ejecutan en AWS Lambda).
En cuanto al marco, no hay mucha diferencia entre ambos, sin embargo, hay una diferencia menor técnicamente como se muestra a continuación
Sin servidor: crea el rol de IAM, S3 Bucket, Cloudformation Template, crea, actualiza e implementa el código. Puede invocar el programa desde el comando.
Un punto más importante, cuando nos gustaría eliminar la función y todos los servicios asociados como S3, rol de IAM, etc., eso se puede hacer usando un comando de una sola línea. En AWS Lambda, debemos eliminar manualmente cada servicio uno por uno
AWS Lambda: permite que se ejecuten fragmentos de código en respuesta a disparadores causados por la actividad de otros recursos de AWS, como una alarma de AWS CloudWatch, cambios en una tabla NoSQL como DynamoDB, un evento de carga en un depósito S3, etc.
La función de AWS Lambda tiene límites y se recomienda que mantenga el tamaño del código bajo y divida la función más grande en otras más pequeñas.