Tutorial: Uso de un desencadenador de Amazon S3 para invocar una función de Lambda
En este tutorial, se utiliza la consola a fin de crear una función de Lambda y configurar un desencadenador para un bucket de Amazon Simple Storage Service (Amazon S3). Cada vez que agrega un objeto al bucket de Amazon S3, la función se ejecuta y muestra el tipo de objeto en Registros de Amazon CloudWatch.
En este tutorial se muestra cómo:
-
Cree un bucket de Amazon S3.
-
Cree una función de Lambda que devuelva el tipo de objeto de los objetos en un bucket de Amazon S3.
-
Configure un desencadenador de Lambda que invoque su función cuando se carguen objetos en su bucket.
-
Pruebe su función, primero con un evento de prueba y, a continuación, con el desencadenador.
Al completar estos pasos, aprenderá a configurar una función de Lambda para que se ejecute siempre que se agreguen objetos a un bucket de Amazon S3 o se eliminen de él. Solo puede completar este tutorial mediante la AWS Management Console.
Requisitos previos
Si no dispone de una Cuenta de AWS, siga estos pasos para crear una.
Procedimiento para registrarse en Cuenta de AWS
Abra https://portal.aws.amazon.com/billing/signup
. Siga las instrucciones que se le indiquen.
Parte del procedimiento de registro consiste en recibir una llamada telefónica e indicar un código de verificación en el teclado del teléfono.
Al registrarse en una Cuenta de AWS, se crea un Usuario raíz de la cuenta de AWS. El usuario raíz tendrá acceso a todos los Servicios de AWS y recursos de esa cuenta. Como práctica recomendada de seguridad, asigne acceso administrativo a un usuario y utilice únicamente el usuario raíz para realizar tareas que requieren acceso de usuario raíz.
AWS le enviará un correo electrónico de confirmación cuando complete el proceso de registro. Puede ver la actividad de la cuenta y administrarla en cualquier momento entrando en https://aws.amazon.com/
Después de registrarse para obtener una Cuenta de AWS, proteja su Usuario raíz de la cuenta de AWS, habilite AWS IAM Identity Center y cree un usuario administrativo para no usar el usuario raíz en las tareas cotidianas.
Protección de Usuario raíz de la cuenta de AWS
-
Inicie sesión en AWS Management Console
como propietario de la cuenta; para ello, elija Usuario raíz e introduzca el correo electrónico de su Cuenta de AWS. En la siguiente página, escriba su contraseña. Para obtener ayuda para iniciar sesión con el usuario raíz, consulte Iniciar sesión como usuario raíz en la Guía del usuario de AWS Sign-In.
-
Active la autenticación multifactor (MFA) para el usuario raíz.
Para obtener instrucciones, consulte Habilitación de un dispositivo MFA virtual para su usuario raíz de la Cuenta de AWS (consola) en la Guía del usuario de IAM.
Creación de un usuario con acceso administrativo
-
Activar IAM Identity Center.
Consulte las instrucciones en Activar AWS IAM Identity Center en la Guía del usuario de AWS IAM Identity Center.
-
En IAM Identity Center, conceda acceso administrativo a un usuario.
Para ver un tutorial sobre cómo usar Directorio de IAM Identity Center como origen de identidad, consulte Configuración del acceso de los usuarios con el Directorio de IAM Identity Center predeterminado en la Guía del usuario de AWS IAM Identity Center.
Inicio de sesión como usuario con acceso de gestionador
-
Para iniciar sesión con el usuario de IAM Identity Center, use la URL de inicio de sesión que se envió a la dirección de correo electrónico cuando creó el usuario de IAM Identity Center.
Para obtener ayuda para iniciar sesión con un usuario de IAM Identity Center, consulte Inicio de sesión en el portal de acceso de AWS en la Guía del usuario de AWS Sign-In.
Concesión de acceso a usuarios adicionales
-
En IAM Identity Center, cree un conjunto de permisos que siga la práctica recomendada de aplicar permisos de privilegios mínimos.
Para conocer las instrucciones, consulte Create a permission set en la Guía del usuario de AWS IAM Identity Center.
-
Asigne usuarios a un grupo y, a continuación, asigne el acceso de inicio de sesión único al grupo.
Para conocer las instrucciones, consulte Add groups en la Guía del usuario de AWS IAM Identity Center.
Crear un bucket de Amazon S3
Creación de un bucket de Amazon S3
-
Abra la consola de Amazon S3
y seleccione la página Buckets. -
Elija Crear bucket.
-
En Configuración general, haga lo siguiente:
-
Para el nombre del bucket, ingrese un nombre único a nivel mundial que cumpla las reglas de nomenclatura de bucket de Amazon S3. Los nombres de bucket pueden contener únicamente de letras minúsculas, números, puntos (.) y guiones (-).
-
En AWS Región, seleccione una región. Más adelante en el tutorial, debe crear la función de Lambda en la misma región.
-
-
Deje el resto de las opciones con sus valores predeterminados y seleccione Crear bucket.
Cargar un objeto de prueba en un bucket
Para cargar un objeto de prueba
-
Abra la página Buckets
de la consola de Amazon S3 y elija el bucket que creó durante el paso anterior. -
Seleccione Cargar.
-
Elija Agregar archivos y seleccione el objeto que desea cargar. Puede seleccionar cualquier archivo (por ejemplo,
HappyFace.jpg
). -
Elija Abrir y, a continuación, Cargar.
Más adelante en el tutorial, probará la función de Lambda con este objeto.
Crear una política de permisos
Cree una política de permisos que le permita a Lambda obtener objetos de un bucket de Amazon S3 y escribir en los Registros de Amazon CloudWatch.
Para crear la política de
-
Abra la página de Policies (Políticas)
de la consola de IAM. -
Seleccione Crear política.
-
Elija la pestaña JSON y pegue la siguiente política personalizada en el editor JSON.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogGroup", "logs:CreateLogStream" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::*/*" } ] }
-
Elija Siguiente: Etiquetas.
-
Elija Siguiente: Revisar.
-
En Review policy (Revisar política), para el Name (Nombre) de la política, ingrese
s3-trigger-tutorial
. -
Seleccione Crear política.
Creación de un rol de ejecución
Un rol de ejecución es un rol de AWS Identity and Access Management (IAM) que concede a la función de Lambda permiso para acceder a recursos y Servicios de AWS. En este paso, creará un rol de ejecución mediante la política de permisos que creó en el paso anterior.
Para crear una función de ejecución y adjuntar su política de permisos personalizada
-
Abra la página Roles
en la consola de IAM. -
Elija Creación de rol.
-
Para el tipo de entidad de confianza, seleccione Servicio de AWS y, para el caso de uso, elija Lambda.
-
Elija Siguiente.
-
En el cuadro de búsqueda de políticas, escriba
s3-trigger-tutorial
. -
En los resultados de búsqueda, seleccione la política que ha creado (
s3-trigger-tutorial
), y luego Next (Siguiente). -
En Role details (Detalles del rol), introduzca
lambda-s3-trigger-role
en Role name (Nombre del rol) y, luego, elija Create role (Crear rol).
Crear la función de Lambda
Cree una función de Lambda en la consola con el tiempo de ejecución de Python 3.12.
Para crear la función de Lambda
-
Abra la página de Funciones
en la consola de Lambda. -
Asegúrese de trabajar en la misma Región de AWS en la que creó el bucket de Amazon S3. Puede cambiar la región mediante la lista desplegable de la parte superior de la pantalla.
-
Seleccione Creación de función.
-
Elija Crear desde cero.
-
Bajo Basic information (Información básica), haga lo siguiente:
-
En Nombre de la función, ingrese
s3-trigger-tutorial
. -
En Tiempo de ejecución, seleccione Python 3.12.
-
En Arquitectura, elija x86_64.
-
-
En la pestaña Cambiar rol de ejecución predeterminado, haga lo siguiente:
-
Amplíe la pestaña y, a continuación, elija Utilizar un rol existente.
-
Seleccione el
lambda-s3-trigger-role
que creó anteriormente.
-
-
Seleccione Creación de función.
Implementar el código de la función
En este tutorial, se utiliza el tiempo de ejecución de Python 3.12, pero también proporcionamos archivos de código de ejemplo para otros tiempos de ejecución. Puede seleccionar la pestaña del siguiente cuadro para ver el código del tiempo de ejecución que le interesa.
La función de Lambda recuperará el nombre de clave del objeto cargado y el nombre del bucket desde el parámetro event
que recibe de Amazon S3. A continuación, la función utiliza el método get_object
Para implementar el código de la función
-
Seleccione la pestaña Python en el siguiente cuadro y copie el código.
-
En el panel Código fuente de la consola de Lambda, pegue el siguiente código en el editor de código y sustituya el código creado por Lambda.
-
En la sección IMPLEMENTAR elija Implementar para actualizar el código de la función:
Cree un desencadenador de Amazon S3
Para crear el desencadenador de Amazon S3
-
En el panel Información general de la función, elija Agregar desencadenador.
-
Seleccione S3.
-
En Bucket, seleccione el bucket que creó anteriormente en el tutorial.
-
En Tipos de eventos, asegúrese de seleccionar Todos los eventos de creación de objetos.
-
En Invocación recursiva, marque la casilla de verificación para confirmar que no se recomienda utilizar el mismo bucket de Amazon S3 para la entrada y la salida.
-
Elija Añadir.
nota
Cuando crea un desencadenador de Amazon S3 para una función de Lambda mediante la consola de Lambda, Amazon S3 configura una notificación de eventos en el bucket que especifique. Antes de configurar esta notificación de evento, Amazon S3 realiza una serie de comprobaciones para confirmar que el destino del evento existe y tiene las políticas de IAM requeridas. Amazon S3 también realiza estas pruebas en cualquier otra notificación de eventos configurada para ese bucket.
Gracias a esta comprobación, si el bucket ha configurado previamente destinos de eventos para recursos que ya no existen o para recursos que no tienen las políticas de permisos requeridas, Amazon S3 no podrá crear la nueva notificación de evento. Verá el siguiente mensaje de error que indica que no se ha podido crear el desencadenador:
An error occurred when creating the trigger: Unable to validate the following destination configurations.
Puede ver este error si anteriormente configuró un desencadenador para otra función de Lambda con el mismo bucket y, desde entonces, ha eliminado la función o modificado sus políticas de permisos.
Probar la función de Lambda con un evento de prueba
Para probar la función de Lambda con un evento de prueba
-
En la página de la consola de Lambda para la función, seleccione la pestaña Prueba.
-
En Nombre del evento, escriba
MyTestEvent
. -
En el Evento JSON, pegue el siguiente evento de prueba. Asegúrese de reemplazar los siguientes valores:
-
Reemplace
us-east-1
por la región en la que creó el bucket de Amazon S3. -
Reemplace ambas instancias de
amzn-s3-demo-bucket
por el nombre de su bucket de Amazon S3. -
Reemplace
test%2FKey
por el nombre del objeto de prueba que cargó anteriormente al bucket (por ejemplo,HappyFace.jpg
).
{ "Records": [ { "eventVersion": "2.0", "eventSource": "aws:s3", "awsRegion": "
us-east-1
", "eventTime": "1970-01-01T00:00:00.000Z", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "EXAMPLE" }, "requestParameters": { "sourceIPAddress": "127.0.0.1" }, "responseElements": { "x-amz-request-id": "EXAMPLE123456789", "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH" }, "s3": { "s3SchemaVersion": "1.0", "configurationId": "testConfigRule", "bucket": { "name": "amzn-s3-demo-bucket
", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::amzn-s3-demo-bucket
" }, "object": { "key": "test%2Fkey
", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] } -
-
Seleccione Save (Guardar).
-
Seleccione Probar.
-
Si la función se ejecuta correctamente, verá un resultado similar al siguiente en la pestaña Resultados de ejecución.
Response "image/jpeg" Function Logs START RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 Version: $LATEST 2021-02-18T21:40:59.280Z 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 INFO INPUT BUCKET AND KEY: { Bucket: 'amzn-s3-demo-bucket', Key: 'HappyFace.jpg' } 2021-02-18T21:41:00.215Z 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 INFO CONTENT TYPE: image/jpeg END RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 REPORT RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 Duration: 976.25 ms Billed Duration: 977 ms Memory Size: 128 MB Max Memory Used: 90 MB Init Duration: 430.47 ms Request ID 12b3cae7-5f4e-415e-93e6-416b8f8b66e6
Probar la función de Lambda con el desencadenador de Amazon S3
Para probar la función con el desencadenador configurado, se carga un objeto al bucket de Amazon S3 mediante la consola. Para comprobar que la función de Lambda se ha ejecutado correctamente, utilice Registros de CloudWatch para ver la salida de la función.
Para cargar un objeto en un bucket de Amazon S3
-
Abra la página Buckets
de la consola de Amazon S3 y elija el nombre del bucket que creó anteriormente. -
Seleccione Cargar.
-
Elija Agregar archivos y utilice el selector de archivos para elegir el objeto que desee cargar. Este objeto puede ser cualquier archivo que elija.
-
Elija Abrir y, a continuación, Cargar.
Comprobación de la invocación de la función mediante Registros de CloudWatch
-
Abra la consola de CloudWatch
. -
Asegúrese de trabajar en la misma Región de AWS en la que creó la función de Lambda. Puede cambiar la región mediante la lista desplegable de la parte superior de la pantalla.
-
Elija Registros y, a continuación, Grupos de registro.
-
Elija el grupo de registro para la función (
/aws/lambda/s3-trigger-tutorial
). -
En Flujos de registro, elija el flujo de registro más reciente.
-
Si su función se ha invocado correctamente en respuesta a su desencadenador de Amazon S3, verá un resultado similar al siguiente. El
CONTENT TYPE
que vea depende del tipo de archivo que haya subido a su bucket.2022-05-09T23:17:28.702Z 0cae7f5a-b0af-4c73-8563-a3430333cc10 INFO CONTENT TYPE:
image/jpeg
Eliminación de sus recursos
A menos que desee conservar los recursos que creó para este tutorial, puede eliminarlos ahora. Si elimina los recursos de AWS que ya no utiliza, evitará gastos innecesarios en su Cuenta de AWS.
Cómo eliminar la función de Lambda
-
Abra la página de Funciones
en la consola de Lambda. -
Seleccione la función que ha creado.
-
Elija Acciones, Eliminar.
-
Escriba
delete
en el campo de entrada de texto y elija Delete(Eliminar).
Cómo eliminar el rol de ejecución
-
Abra la página Roles
en la consola de IAM. -
Seleccione el rol de ejecución que creó.
-
Elija Eliminar.
-
Si desea continuar, escriba el nombre del rol en el campo de entrada de texto y elija Delete (Eliminar).
Para eliminar el bucket de S3
-
Abra la consola de Amazon S3
. -
Seleccione el bucket que ha creado.
-
Elija Eliminar.
-
Introduzca el nombre del bucket en el campo de entrada de texto.
-
Elija Delete bucket (Eliminar bucket).
Pasos a seguir a continuación
En Tutorial: Uso de un desencadenador de Amazon S3 para crear imágenes en miniatura, el desencadenador de Amazon S3 invoca una función que crea una imagen en miniatura para cada archivo de imagen que se carga en el bucket. Este tutorial requiere un nivel moderado de conocimiento del dominio de AWS y Lambda. Demuestra cómo crear recursos usando la AWS Command Line Interface (AWS CLI) y cómo crear un paquete de implementación de archivo .zip para la función y sus dependencias.