Cómo funciona Lambda
Las funciones de Lambda son los componentes básicos que se utilizan para crear aplicaciones de Lambda. Para escribir funciones, es esencial comprender los conceptos y componentes principales que componen el modelo de programación Lambda. Esta sección lo guiará a través de los elementos fundamentales que necesita conocer para empezar a crear aplicaciones sin servidor con Lambda.
-
Funciones de Lambda y controladores de funciones: una función de Lambda es un pequeño bloque de código que se ejecuta en respuesta a eventos. Las funciones son los componentes básicos que se utilizan para crear aplicaciones. Los controladores de funciones son el punto de entrada para los objetos de eventos que procesa el código de función de Lambda.
-
Tiempos de ejecución y entorno de ejecución de Lambda: los entornos de ejecución administran los recursos necesarios para ejecutar la función. Los tiempos de ejecución son los entornos específicos del lenguaje en los que se ejecutan las funciones.
-
Eventos y desencadenadores: cómo otros Servicios de AWS invocan sus funciones en respuesta a eventos específicos.
-
Permisos y roles de Lambda: cómo controla quién puede acceder a sus funciones y con qué otros Servicios de AWS pueden interactuar sus funciones.
sugerencia
Si desea comenzar por comprender el desarrollo sin servidor de manera más general, consulte Comprensión de la diferencia entre el desarrollo tradicional y sin servidor en la Guía para desarrolladores de AWS sin servidor.
Funciones de Lambda y controladores de funciones
En Lambda, las funciones son los componentes básicos que se utilizan para crear aplicaciones. Una función de Lambda es una porción de código que se ejecuta en respuesta a eventos, como un usuario que hace clic en un botón de un sitio web o un archivo que se carga en un bucket de Amazon Simple Storage Service (Amazon S3). Una función es una especie de programa autónomo con las siguientes propiedades. Un controlador de la función de Lambda es el método del código de la función que procesa eventos. Cuando una función se ejecuta en respuesta a un evento, Lambda ejecuta el controlador de la función. Los datos sobre el evento que provocó la ejecución de la función se transmiten directamente al controlador. Mientras que el código de una función de Lambda puede contener más de un método o función, las funciones de Lambda solo pueden tener un controlador.
Para crear una función de Lambda, se combinan el código de la función y sus dependencias en un paquete de implementación. Lambda admite dos tipos de paquetes de implementación: archivos .zip e imágenes de contenedores.
-
Cada función tiene un cometido u objetivo específico
-
Se ejecutan únicamente cuando es necesario en respuesta a eventos específicos
-
Se dejan de ejecutar automáticamente cuando terminan
Tiempos de ejecución y entorno de ejecución de Lambda
Las funciones de Lambda se ejecutan en un entorno de ejecución seguro y aislado que Lambda administra en su nombre. Este entorno de ejecución administra los procesos y recursos que se necesitan para ejecutar la función. Cuando se invoca una función por primera vez, Lambda crea un nuevo entorno de ejecución para que la función se ejecute en este. Una vez que la función termina de ejecutarse, Lambda no detiene el entorno de ejecución de inmediato; si la función se invoca de nuevo, Lambda puede reutilizar el entorno de ejecución existente.
El entorno de ejecución de Lambda también contiene un tiempo de ejecución, un entorno específico del lenguaje que transmite información de eventos y respuestas entre Lambda y la función. Lambda proporciona una serie de tiempos de ejecución administrados para los lenguajes de programación más conocidos, o puede crear los suyos propios.
En el caso de los tiempos de ejecución administrados, Lambda aplica automáticamente actualizaciones y revisiones de seguridad a las funciones que utilizan el tiempo de ejecución.
Eventos y desencadenadores
Además, puede invocar una función de Lambda directamente mediante la consola de Lambda, AWS CLI
Para que su función responda a los eventos, configure un desencadenador. Un desencadenador conecta su función a una fuente de eventos, y su función puede tener varios desencadenadores. Cuando se produce un evento, Lambda recibe los datos del evento como un documento JSON y los convierte en un objeto que su código puede procesar. Puede definir el siguiente formato JSON para su evento y el tiempo de ejecución de Lambda convierte este JSON en un objeto antes de pasarlo al controlador de su función.
ejemplo evento de Lambda personalizado
{ "Location": "SEA", "WeatherData":{ "TemperaturesF":{ "MinTempF": 22, "MaxTempF": 78 }, "PressuresHPa":{ "MinPressureHPa": 1015, "MaxPressureHPa": 1027 } } }
Para servicios de transmisión y cola como Amazon Kinesis o Amazon SQS, Lambda utiliza una asignación de orígenes de eventos en lugar de un desencadenador estándar. Las asignaciones de orígenes de eventos sondean la fuente en busca de nuevos datos, agrupan los registros y, a continuación, invocan su función con los eventos agrupados.
Para entender cómo funciona un desencadenador, comience completando el tutorial Uso de un desencadenador de Amazon S3, o para obtener una descripción general del uso de desencadenadores e instrucciones sobre cómo crear un desencadenador utilizando la consola de Lambda, consulte Integración de otros servicios.
Permisos y roles de Lambda
En el caso de Lambda, existen dos tipos principales de permisos que debe configurar:
-
Permisos que la función necesita para acceder a otros Servicios de AWS
-
Permisos que otros usuarios y Servicios de AWS necesitan para acceder a la función
En las siguientes secciones se describen estos dos tipos de permisos y se analizan las prácticas recomendadas para aplicar los permisos de privilegio mínimo.
Permisos para que las funciones accedan a otros recursos de AWS
Con frecuencia, las funciones de Lambda necesitan acceder a otros recursos de AWS y realizar acciones en estos. Por ejemplo, una función puede leer elementos de una tabla de DynamoDB, almacenar un objeto en un bucket de S3 o escribir en una cola de Amazon SQS. Para conceder a las funciones los permisos que necesitan para realizar estas acciones, se utiliza un rol de ejecución.
Un rol de ejecución de Lambda es un tipo especial de rol de AWS Identity and Access Management (IAM), una identidad que crea en la cuenta y que tiene asociados permisos específicos definidos en una política.
Cada función de Lambda debe tener un rol de ejecución, y un mismo rol puede ser utilizado por más de una función. Cuando se invoca una función, Lambda asume el rol de ejecución de la función y se le concede permiso para realizar las acciones definidas en la política del rol.
Al crear una función en la consola de Lambda, Lambda crea automáticamente un rol de ejecución para la función. La política del rol concede a la función permisos básicos para escribir salidas de registros en Registros de Amazon CloudWatch. Para conceder a la función permiso para realizar acciones en otros recursos de AWS, es necesario editar el rol para agregar los permisos adicionales. La forma más sencilla de agregar permisos es utilizar una política administrada por AWS. Las políticas administradas son creadas y administradas por AWS y proporcionan permisos para numerosos casos de uso habituales. Por ejemplo, si la función realiza operaciones CRUD en una tabla de DynamoDB, puede agregar la política AmazonDynamoDBFullAccess al rol.
Permisos para que otros usuarios y recursos accedan a la función
Para conceder permiso a otro Servicio de AWS para acceder a la función de Lambda, se utilizan políticas basadas en recursos. En IAM, las políticas basadas en recursos se asocian a un recurso (en este caso, la función de Lambda) y definen tanto quién puede acceder al recurso como qué acciones puede realizar.
Para que otro Servicio de AWS invoque la función a través de un desencadenador, la política basada en recursos de la función debe conceder a dicho servicio permiso para utilizar la acción lambda:InvokeFunction
. Si crea el desencadenador con la consola, Lambda agregará automáticamente este permiso en su nombre.
Para conceder permiso a otros usuarios de AWS para acceder a la función, puede definirlo en la política basada en recursos de la función exactamente del mismo modo que para otro Servicio de AWS o recurso. También puede utilizar una política basada en identidades que esté asociada al usuario.
Prácticas recomendadas para los permisos de Lambda
Cuando se establecen permisos mediante políticas de IAM, la práctica recomendada en materia de seguridad consiste en conceder únicamente los permisos necesarios para realizar una tarea. Esto se conoce como principio de privilegio mínimo. Para comenzar a conceder permisos para la función, puede optar por utilizar una política administrada por AWS. Las políticas administradas pueden ser la forma más rápida y sencilla de conceder permisos para realizar una tarea, pero es posible que también incluyan otros permisos que no sean necesarios. A medida que avance del desarrollo inicial a las pruebas y la producción, recomendamos que reduzca los permisos a únicamente aquellos que sean necesarios. Para ello, defina políticas administradas por el cliente propias.
El mismo principio se aplica cuando se conceden permisos para acceder a la función mediante una política basada en recursos. Por ejemplo, si desea conceder permiso a Amazon S3 para invocar la función, la práctica recomendada consiste en limitar el acceso a buckets individuales o buckets en Cuentas de AWS específicas, en lugar de conceder permisos generales al servicio de S3.