La traducción del artículo ha sido preparada especialmente para los estudiantes del curso . ¿Te interesa desarrollarte en esta área? Mira el taller de Egor Zuev (TeamLead en la empresa InBit) y únete al próximo grupo del curso: inicio 26 de septiembre.

Cada vez más personas están migrando a AWS Lambda por su escalabilidad, rendimiento, ahorro y la capacidad de manejar millones e incluso trillones de solicitudes al mes. Para ello, no es necesario gestionar la infraestructura en la que opera el servicio. La autoescalabilidad permite atender miles de solicitudes simultáneas por segundo. Creo que AWS Lambda puede ser sin duda uno de los servicios más demandados de AWS.
AWS Lambda
AWS Lambda es un servicio de computación sin servidor orientado a eventos, que permite ejecutar código sin necesidad de aprovisionar y administrar servidores, y complementa otros servicios de AWS basándose en la lógica del usuario. Lambda reacciona automáticamente a diversos eventos (llamados desencadenadores), como las solicitudes HTTP a través de Amazon API Gateway, cambios de datos en los buckets de Amazon S3 o tablas de Amazon DynamoDB; o se puede ejecutar su código mediante llamadas a la API, utilizando AWS SDK y transiciones entre estados en AWS Step Functions.
Lambda ejecuta código en una infraestructura computacional de alta disponibilidad y se encarga completamente de la administración de la plataforma subyacente, incluyendo el mantenimiento de servidores y sistemas operativos, aprovisionamiento de recursos, escalado automático, monitoreo de código y registro. Es decir, solo necesita cargar su código y configurar cómo y cuándo debe ejecutarse. Por su parte, el servicio se encargará de su ejecución y garantizará la alta disponibilidad de su aplicación.
¿Cuándo pasar a Lambda?
AWS Lambda es una plataforma de computación conveniente, adecuada para muchos escenarios de uso, siempre que el lenguaje y el entorno de ejecución de su código sean compatibles con el servicio. Si desea concentrarse en el código y la lógica de negocio, delegando el mantenimiento de servidores, aprovisionamiento de recursos y escalado a un proveedor externo por un precio razonable, definitivamente debería considerar la transición a AWS Lambda.
Lambda es ideal para crear interfaces de programación, y si se utiliza el servicio junto con API Gateway, se pueden reducir significativamente los costos y llevar el producto al mercado más rápidamente. Existen diversas maneras de utilizar las funciones de Lambda y opciones para organizar arquitecturas sin servidor; cada uno podrá elegir la que mejor se adapte a sus objetivos.
Lambda permite realizar una amplia gama de tareas. Gracias al soporte de CloudWatch, se pueden crear trabajos programados y automatizar procesos específicos. No hay restricciones sobre la naturaleza e intensidad del uso del servicio (se consideran el consumo de memoria y el tiempo), y nada impide que trabajes de manera constante en un microservicio completo basado en Lambda.
Aquí se pueden crear acciones orientadas a servicios que no se ejecutan continuamente. Un ejemplo típico es el escalado de imágenes. Incluso en sistemas distribuidos, las funciones de Lambda no pierden su relevancia.
Así que, si no quieres preocuparte por la asignación y administración de recursos computacionales, prueba AWS Lambda; si no necesitas cálculos pesados y que consuman muchos recursos, también prueba AWS Lambda; si tu código se ejecuta periódicamente, tienes razón, deberías probar AWS Lambda.
Seguridad
Hasta ahora, no ha habido críticas sobre la seguridad. Por otro lado, dado que muchos procesos internos y particularidades de la implementación de este modelo están ocultos para el usuario del entorno gestionado de AWS Lambda, algunas reglas comunes de seguridad en la nube pierden relevancia.
Al igual que la mayoría de los servicios de AWS, Lambda se proporciona bajo el principio de responsabilidad compartida entre AWS y el cliente en cuanto a la seguridad y el cumplimiento normativo. Este principio reduce la carga operativa sobre el cliente, ya que AWS asume tareas de mantenimiento, administración y control de los componentes del servicio, desde el sistema operativo del host y el nivel de virtualización hasta la seguridad física de los objetos de infraestructura.
En el caso específico de AWS Lambda, AWS se encarga de gestionar la infraestructura subyacente, los servicios básicos asociados, el sistema operativo y la plataforma de aplicaciones. Mientras tanto, el cliente es responsable de la seguridad de su código, el almacenamiento de datos confidenciales, el control de acceso a ellos, así como al servicio y recursos de Lambda (Identity and Access Management, IAM), incluso dentro de las funciones utilizadas.
En el esquema a continuación se presenta el modelo de responsabilidad compartida aplicable a AWS Lambda. El ámbito de responsabilidad de AWS está marcado en naranja, y la responsabilidad del cliente en azul. Como puede ver, AWS asume una mayor responsabilidad por las aplicaciones desplegadas en el servicio.

Modelo de responsabilidad compartida aplicable a AWS Lambda
Entorno de ejecución de Lambda
La principal ventaja de Lambda es que, al ejecutar una función en su nombre, el servicio asigna automáticamente los recursos necesarios. Puede evitar gastar tiempo y esfuerzo en la administración de sistemas y concentrarse en la lógica de negocio y en la escritura de código.
El servicio Lambda se divide en dos planos. El primero es el plano de control. Según Wikipedia, el plano de control (control plane) es la parte de la red encargada de transportar el tráfico de señalización y la маршрутизация. Es el componente principal que toma decisiones globales sobre la asignación, mantenimiento y distribución de cargas de trabajo. Además, el plano de control actúa como la topología de red del proveedor de soluciones, encargada de la маршрутизация y la gestión del tráfico.
El segundo plano es el plano de datos. Al igual que el plano de control, tiene sus propias tareas. El plano de control proporciona API para gestionar funciones (CreateFunction, UpdateFunctionCode) y supervisa la interacción de Lambda con otros servicios de AWS. El plano de datos gestiona las llamadas a la API (Invoke API), que inicia las funciones Lambda. Después de invocar una función, el plano de control asigna o selecciona un entorno de ejecución existente, previamente preparado para esta función, y luego ejecuta el código en él.
AWS Lambda admite varios lenguajes de programación, incluyendo Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 y otros, a través de los entornos de ejecución correspondientes. AWS los actualiza regularmente, distribuye parches de seguridad y realiza otras operaciones de mantenimiento en estos entornos. Lambda también permite el uso de otros lenguajes siempre que implementes el entorno de ejecución correspondiente. En ese caso, tú serás responsable de su mantenimiento, incluyendo la supervisión de la seguridad.
¿Cómo funciona todo esto y cómo el servicio ejecutará tus funciones?
Cada función opera en uno o más entornos aislados, que solo existen durante el ciclo de vida de esa función y luego se destruyen. En cada entorno, solo se ejecuta una llamada a la vez, pero este se puede reutilizar si hay múltiples llamadas en serie a la misma función. Todos los entornos de ejecución operan en máquinas virtuales con virtualización por hardware — en lo que se denomina microVM. Cada microVM se asigna a una cuenta específica de AWS y puede ser reutilizada varias veces por entornos para ejecutar distintas funciones en esa cuenta. Las microVM están empaquetadas en bloques estructurales de la plataforma de hardware Lambda Worker, que es propiedad y está bajo la gestión de AWS. Un mismo entorno de ejecución no puede ser utilizado por diferentes funciones, al igual que las microVM son únicas para diferentes cuentas de AWS.

Modelo de aislamiento en AWS Lambda
El aislamiento de los entornos de ejecución se realiza mediante varios mecanismos. A un nivel alto, cada entorno presenta copias separadas de los siguientes componentes:
- Código de la función
- Cualquier capa de Lambda seleccionada para la función
- Entorno de ejecución de la función
- Espacio de usuario mínimo basado en Amazon Linux
Para aislar diferentes entornos de ejecución, se aplican los siguientes mecanismos:
- cgroups — limitación del acceso a recursos de CPU, memoria, capacidad de almacenamiento y red para cada entorno de ejecución;
- namespaces — agrupación de ID de procesos, ID de usuarios, interfaces de red y otros recursos, que son gestionados por el núcleo de Linux. Cada entorno de ejecución opera en su propio espacio de nombres;
- seccomp-bpf — limitación de las llamadas al sistema que se pueden utilizar en el entorno de ejecución;
- iptables y tablas de enrutamiento — aislamiento de los entornos de ejecución entre sí;
- chroot — proporciona acceso limitado al sistema de archivos subyacente.
Junto con las tecnologías de aislamiento propietario de AWS, los mecanismos enumerados garantizan una separación segura de los entornos de ejecución. Los entornos aislados de esta manera no pueden acceder ni modificar los datos de otros entornos.
Aunque varios entornos de ejecución de una misma cuenta de AWS pueden ejecutarse en una sola microVM, bajo ninguna circunstancia se pueden compartir microVM entre diferentes cuentas de AWS. Para la aislamiento de microVM, AWS Lambda usa solo dos mecanismos: instancias de EC2 y Firecracker. El aislamiento de invitados en Lambda basado en instancias de EC2 se ha aplicado desde 2015. Firecracker es un nuevo hipervisor de código abierto, diseñado especialmente por AWS para cargas de trabajo sin servidor y presentado en 2018. El hardware físico en el que se ejecutan las microVM es compartido por cargas de trabajo de diferentes cuentas.
Conservación de entornos y estados de procesos
Aunque los entornos de ejecución de Lambda son únicos para diferentes funciones, se puede invocar la misma función varias veces, es decir, el entorno de ejecución puede existir durante varias horas antes de ser destruido.
En cada entorno de ejecución de Lambda también hay un sistema de archivos con permisos de escritura, accesible a través del directorio /tmp. Su contenido no puede ser accedido desde otros entornos de ejecución. En cuanto a la conservación de estados de procesos, los archivos escritos en /tmp existen durante todo el ciclo de vida del entorno de ejecución. Esto permite la acumulación de resultados de varias invocaciones, lo cual es especialmente útil para operaciones costosas, como la carga de modelos de aprendizaje automático.
Transmisión de datos de invocaciones
La interfaz Invoke API se puede utilizar en dos modos: en modo de eventos y en modo de 'solicitud-respuesta'. En modo de eventos, la invocación se coloca en una cola para su ejecución posterior. En modo de 'solicitud-respuesta', la función se invoca instantáneamente con la carga útil proporcionada, luego se retorna una respuesta. En ambos casos, la función se ejecuta en el entorno Lambda, pero con diferentes caminos de carga útil.
Durante las llamadas del tipo 'petición-respuesta', la carga útil llega desde la API de procesamiento de solicitudes (API Caller), como AWS API Gateway o AWS SDK, al balanceador de carga y luego al servicio de ejecución de llamadas Lambda (Invoke Service). Este último determina el entorno adecuado para ejecutar la función y le envía la carga útil para completar la llamada. El balanceador de carga recibe tráfico con protección TLS a través de Internet. El tráfico dentro del servicio Lambda, después del balanceador de carga, pasa a través de una VPC interna en una región específica de AWS.

Modelo de procesamiento de llamadas de AWS Lambda: modo 'petición-respuesta'
Las llamadas basadas en eventos pueden ejecutarse de inmediato o ser encoladas. En algunos casos, la cola se implementa mediante el servicio Amazon SQS (Amazon Simple Queue Service), que envía las llamadas al servicio de ejecución de llamadas Lambda a través de un proceso interno de sondeo (poller). El tráfico transmitido está protegido por TLS, y no hay cifrado adicional de los datos almacenados en Amazon SQS.
Las llamadas basadas en eventos no devuelven respuestas; cualquier información de respuesta se ignora simplemente por Lambda Worker. Las llamadas desde fuentes de eventos de Amazon S3, Amazon SNS, CloudWatch y otras son procesadas por el servicio Lambda en modo de evento. Las llamadas desde flujos de Amazon Kinesis y DynamoDB, las llamadas de las colas SQS, del balanceador de carga de aplicaciones y del API Gateway se procesan en modo 'petición-respuesta'.
Monitoreo
Puede realizar el monitoreo y auditoría de las funciones Lambda utilizando varios mecanismos y servicios de AWS, incluidos los siguientes.
Amazon CloudWatch
Recopila varias estadísticas, como el número de solicitudes, la duración de la ejecución de solicitudes y el número de solicitudes que terminaron con error.
Amazon CloudTrail
Permite llevar registros, monitoreo continuo y conservar información sobre la actividad en su cuenta relacionada con su infraestructura AWS. Tendrá una cronología completa de las acciones realizadas a través de la consola de AWS Management Console, AWS SDK, herramientas de línea de comandos y otros servicios de AWS.
AWS X-Ray
Proporciona visibilidad completa de todas las etapas del procesamiento de llamadas en su aplicación basada en un mapa de sus componentes internos. Permite analizar aplicaciones durante el desarrollo y en el entorno de producción.
AWS Config
Podrá realizar un seguimiento de los cambios en la configuración de las funciones Lambda (incluida su eliminación) y en el entorno de ejecución, etiquetas, nombres de controladores, tamaño del código, asignación de memoria, configuraciones de tiempo de espera y parámetros de paralelismo, así como el rol de ejecución de IAM Lambda, la subred y la vinculación de grupos de seguridad.
Conclusión
AWS Lambda ofrece un poderoso conjunto de herramientas para crear aplicaciones seguras y escalables. Muchos métodos de seguridad y cumplimiento en AWS Lambda son similares a los utilizados en otros servicios de AWS, aunque hay excepciones. A partir de marzo de 2019, Lambda cumple con los requisitos de SOC 1, SOC 2, SOC 3, PCI DSS, la Ley de Responsabilidad y Transferibilidad de Seguro Médico (HIPAA) de EE. UU. y otras normativas. Por lo tanto, cuando piense en implementar una nueva aplicación, considere el servicio AWS Lambda; puede ser la solución perfecta para su tarea.
Fuente: habr.com
