Análisis detallado de AWS Lambda

La traducción del artículo fue preparada específicamente para estudiantes del curso. "Servicios en la nube". ¿Interesado en desarrollarse en esta dirección? Mire la clase magistral de Egor Zuev (TeamLead en InBit) "Servicio AWS EC2" y únete al próximo grupo del curso: comienza el 26 de septiembre.

Análisis detallado de AWS Lambda

Cada vez más personas están migrando a AWS Lambda en busca de escalabilidad, rendimiento, ahorro y la capacidad de manejar millones o incluso billones de solicitudes por mes. Para ello, no es necesario gestionar la infraestructura en la que se ejecuta el servicio. Y el ajuste de escala automático le permite atender miles de solicitudes simultáneas por segundo. Creo que AWS Lambda puede considerarse legítimamente uno de los servicios de AWS más populares.

AWS Lambda

AWS Lambda es un servicio informático sin servidor controlado por eventos que le permite ejecutar código sin aprovisionar ni administrar servidores y ampliar otros servicios de AWS mediante lógica personalizada. Lambda responde automáticamente a varios eventos (llamados desencadenadores), como solicitudes HTTP a través de Amazon API Gateway, cambios en los datos en los depósitos de Amazon S3 o tablas de Amazon DynamoDB; o puede ejecutar su código a través de llamadas API utilizando AWS SDK y transiciones de estado en AWS Step Functions.

Lambda ejecuta código en una infraestructura informática de alta disponibilidad y es totalmente responsable de administrar la plataforma subyacente, incluido el mantenimiento del servidor y del sistema operativo, el aprovisionamiento de recursos, el escalado automático, la supervisión del código y el registro. Es decir, sólo necesitas subir tu código y configurar cómo y cuándo se debe ejecutar. A su vez, el servicio se encargará de su lanzamiento y garantizará una alta disponibilidad de su aplicación.

¿Cuándo cambiar a Lambda?

AWS Lambda es una plataforma informática conveniente que es adecuada para una variedad de casos de uso, siempre que el servicio admita el lenguaje y el tiempo de ejecución de su código. Si desea centrarse en su código y lógica empresarial mientras subcontrata el mantenimiento, el aprovisionamiento y el escalado del servidor a un costo razonable, AWS Lambda es definitivamente el camino a seguir.

Lambda es ideal para crear interfaces de programación y, cuando se utiliza junto con API Gateway, puede reducir significativamente los costos y llegar al mercado más rápido. Hay diferentes formas de utilizar las funciones y opciones de Lambda para organizar una arquitectura sin servidor: cada uno puede elegir algo adecuado según su objetivo.

Lambda le permite realizar una amplia gama de tareas. Así, gracias al soporte de CloudWatch, puedes crear tareas diferidas y automatizar procesos individuales. No existen restricciones sobre la naturaleza y la intensidad del uso del servicio (se tienen en cuenta el consumo de memoria y el tiempo) y nada le impide trabajar sistemáticamente en un microservicio completo basado en Lambda.

Aquí puede crear acciones orientadas a servicios que no se ejecutan continuamente. Un ejemplo típico es el escalado de imágenes. Incluso en el caso de sistemas distribuidos, las funciones Lambda siguen siendo relevantes.

Por lo tanto, si no desea ocuparse de la asignación y administración de recursos informáticos, pruebe AWS Lambda; si no necesita cálculos pesados ​​y que consuman muchos recursos, pruebe también AWS Lambda; Si su código se ejecuta periódicamente, así es, debería probar AWS Lambda.

seguridad

Hasta el momento no hay quejas sobre la seguridad. Por otro lado, dado que muchos de los procesos internos y las características de implementación de este modelo están ocultos para el usuario del entorno de ejecución administrado de AWS Lambda, algunas reglas de seguridad en la nube generalmente aceptadas se vuelven irrelevantes.

Como la mayoría de los servicios de AWS, Lambda se proporciona sobre una base de cumplimiento y seguridad compartida entre AWS y el cliente. Este principio reduce la carga operativa del cliente, ya que AWS asume las tareas de mantener, administrar y monitorear los componentes del servicio, desde el sistema operativo host y la capa de virtualización hasta la seguridad física de los activos de la infraestructura.

Hablando específicamente de AWS Lambda, AWS es responsable de administrar la infraestructura subyacente, los servicios subyacentes asociados, el sistema operativo y la plataforma de aplicaciones. Mientras que el cliente es responsable de la seguridad de su código, almacenando datos confidenciales, controlando el acceso a los mismos, así como al servicio y recursos Lambda (Gestión de Identidad y Acceso, IAM), incluso dentro de los límites de las funciones utilizadas.

El siguiente diagrama muestra el modelo de responsabilidad compartida tal como se aplica a AWS Lambda. La responsabilidad de AWS es naranja y la responsabilidad del cliente es azul. Como puede ver, AWS asume más responsabilidad por las aplicaciones implementadas en el servicio.

Análisis detallado de AWS Lambda

Modelo de responsabilidad compartida aplicable a AWS Lambda

tiempo de ejecución lambda

La principal ventaja de Lambda es que al realizar una función en su nombre, el propio servicio asigna los recursos necesarios. Puede evitar perder tiempo y esfuerzo en la administración del sistema y centrarse en la lógica y la codificación empresarial.

El servicio Lambda se divide en dos planos. El primero es el plano de control. Según Wikipedia, el plano de control es la parte de la red encargada de transportar el tráfico de señalización y el enrutamiento. Es el componente principal que toma decisiones globales sobre el aprovisionamiento, el mantenimiento y la distribución de cargas de trabajo. Además, el plano de control actúa como la topología de red del proveedor de soluciones, responsable de enrutar y gestionar el tráfico.

El segundo plano es el plano de datos. Éste, al igual que el avión de control, tiene sus propias tareas. El plano de control proporciona API para administrar funciones (CreateFunction, UpdateFunctionCode) y controla cómo Lambda se comunica con otros servicios de AWS. El plano de datos controla la API Invoke, que ejecuta funciones Lambda. Después de llamar a una función, el plano de control asigna o selecciona un entorno de ejecución existente que está preparado previamente para esa función y luego ejecuta el código en él.

AWS Lambda admite una variedad de lenguajes de programación, incluidos Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 y otros, a través de sus respectivos entornos de ejecución. AWS los actualiza periódicamente, distribuye parches de seguridad y realiza otras actividades de mantenimiento en estos entornos. Lambda también le permite utilizar otros lenguajes, siempre que usted mismo implemente el tiempo de ejecución adecuado. Y luego tendrás que encargarte de su mantenimiento, incluido el seguimiento de su seguridad.

¿Cómo funciona todo y cómo realizará el servicio sus funciones?

Cada función se ejecuta en uno o más entornos dedicados, que existen sólo durante la vida de esa función y luego se destruyen. Cada entorno realiza sólo una llamada a la vez, pero se reutiliza si hay varias llamadas en serie a la misma función. Todos los entornos de ejecución se ejecutan en máquinas virtuales con virtualización de hardware, las llamadas microVM. Cada microVM se asigna a una cuenta de AWS específica y los entornos pueden reutilizarla para realizar diferentes funciones dentro de esa cuenta. Las MicroVM están empaquetadas en bloques de construcción de la plataforma de hardware Lambda Worker, que es propiedad de AWS y está operada por ella. El mismo tiempo de ejecución no puede ser utilizado por diferentes funciones, ni las microVM son exclusivas de diferentes cuentas de AWS.

Análisis detallado de AWS Lambda

Modelo de aislamiento AWS Lambda

El aislamiento de los entornos de ejecución se implementa mediante varios mecanismos. En el nivel superior de cada entorno hay copias independientes de los siguientes componentes:

  • Código de función
  • Cualquier capa Lambda seleccionada para la función
  • Entorno de ejecución de funciones
  • Espacio de usuario mínimo basado en Amazon Linux

Los siguientes mecanismos se utilizan para aislar diferentes entornos de ejecución:

  • cgroups: limita el acceso a la CPU, la memoria, el almacenamiento y los recursos de red para cada entorno de ejecución;
  • espacios de nombres: agrupación de ID de procesos, ID de usuarios, interfaces de red y otros recursos administrados por el kernel de Linux. Cada tiempo de ejecución se ejecuta en su propio espacio de nombres;
  • seccomp-bpf: restringe las llamadas al sistema que se pueden utilizar en tiempo 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.

Combinados con las tecnologías de aislamiento patentadas de AWS, estos mecanismos garantizan una separación confiable del tiempo de ejecución. Los entornos aislados de esta manera no pueden acceder ni modificar datos de otros entornos.

Aunque se pueden ejecutar varios tiempos de ejecución de la misma cuenta de AWS en una sola microVM, bajo ninguna circunstancia se pueden compartir microVM entre diferentes cuentas de AWS. AWS Lambda utiliza solo dos mecanismos para aislar microVM: instancias EC2 y Firecracker. El aislamiento de invitados en Lambda basado en instancias EC2 existe desde 2015. Firecracker es un nuevo hipervisor de código abierto diseñado específicamente por AWS para cargas de trabajo sin servidor y presentado en 2018. El hardware físico que ejecuta microVM se comparte entre cargas de trabajo de diferentes cuentas.

Guardar entornos y estados de proceso

Aunque los tiempos de ejecución de Lambda son exclusivos de diferentes funciones, pueden llamar a la misma función repetidamente, lo que significa que el tiempo de ejecución puede sobrevivir durante varias horas antes de ser destruido.

Cada tiempo de ejecución de Lambda también tiene un sistema de archivos grabable al que se puede acceder a través del directorio /tmp. No se puede acceder a su contenido desde otros tiempos de ejecución. En lo que respecta a la persistencia del estado del proceso, los archivos escritos en /tmp existen durante todo el ciclo de vida del entorno de ejecución. Esto permite acumular los resultados de múltiples llamadas, lo que es especialmente útil para operaciones costosas como la carga de modelos de aprendizaje automático.

transferencia de datos de llamadas

La API Invoke se puede utilizar en dos modos: modo de evento y modo de solicitud-respuesta. En modo evento, la llamada se agrega a una cola para su posterior ejecución. En el modo de solicitud-respuesta, la función se llama instantáneamente con la carga útil proporcionada, después de lo cual se devuelve la respuesta. En ambos casos, la función se ejecuta en un entorno Lambda, pero con diferentes rutas de carga útil.

Durante las llamadas de solicitud-respuesta, la carga útil fluye desde una API de procesamiento de solicitudes (API Caller), como AWS API Gateway o AWS SDK, al balanceador de carga y luego al servicio de llamadas Lambda (Invoke Service). Este último determina el entorno apropiado para ejecutar la función y pasa allí la carga útil para completar la llamada. El equilibrador de carga recibe tráfico protegido por TLS a través de Internet. El tráfico dentro del servicio Lambda (después del equilibrador de carga) pasa a través de una VPC interna en una región de AWS específica.

Análisis detallado de AWS Lambda

Modelo de procesamiento de llamadas de AWS Lambda: modo de solicitud-respuesta

Las llamadas de eventos se pueden realizar inmediatamente o agregar a una cola. En algunos casos, la cola se implementa mediante Amazon SQS (Amazon Simple Queue Service), que pasa las llamadas al servicio de cumplimiento de llamadas Lambda a través de un proceso de sondeo interno. El tráfico transmitido está protegido por TLS y no existe cifrado adicional de los datos almacenados en Amazon SQS.

Las llamadas a eventos no devuelven respuestas; Lambda Worker simplemente ignora cualquier información de respuesta. Lambda procesa las llamadas basadas en eventos de Amazon S3, Amazon SNS, CloudWatch y otras fuentes en modo de evento. Las llamadas de flujos de Amazon Kinesis y DynamoDB, colas SQS, Application Load Balancer y llamadas API Gateway se procesan en forma de solicitud-respuesta.

Monitoreo

Puede monitorear y auditar funciones de Lambda utilizando una variedad de mecanismos y servicios de AWS, incluidos los siguientes.

Reloj en la nube de Amazon
Recopila varias estadísticas, como la cantidad de solicitudes, la duración de las solicitudes y la cantidad de solicitudes que fallaron.

Amazon CloudTrail
Le permite registrar, monitorear continuamente y mantener información de la actividad de la cuenta asociada con su infraestructura de AWS. Tendrá un historial completo de las acciones realizadas utilizando la Consola de administración de AWS, el SDK de AWS, las herramientas de línea de comandos y otros servicios de AWS.

Rayos X de AWS
Proporciona visibilidad completa de todas las etapas del procesamiento de solicitudes en su aplicación en función de un mapa de sus componentes internos. Le permite analizar aplicaciones durante el desarrollo y en entornos de producción.

Configuración de AWS
Podrá realizar un seguimiento de los cambios en la configuración de la función Lambda (incluida la eliminación) y los tiempos de ejecución, las etiquetas, los nombres de los controladores, el tamaño del código, la asignación de memoria, la configuración del tiempo de espera y la configuración de simultaneidad, así como la función de ejecución de Lambda IAM, las subredes y los enlaces de grupos de seguridad. .

Conclusión

AWS Lambda ofrece un potente conjunto de herramientas para crear aplicaciones seguras y escalables. Muchas de las prácticas de seguridad y cumplimiento de AWS Lambda son las mismas que en otros servicios de AWS, aunque existen excepciones. A partir de marzo de 2019, Lambda cumple con SOC 1, SOC 2, SOC 3, PCI DSS, la Ley de Responsabilidad y Portabilidad de Seguros Médicos (HIPAA) y otras regulaciones. Por lo tanto, cuando esté pensando en implementar su próxima aplicación, considere el servicio AWS Lambda: puede ser la mejor opción para su tarea.

Fuente: habr.com

Añadir un comentario