Uso de la función Lambda con Amazon S3
El servicio Amazon S3 se utiliza para el almacenamiento de archivos, donde puede cargar o eliminar archivos. Podemos activar AWS Lambda en S3 cuando se cargan archivos en los depósitos de S3. AWS Lambda tiene una función de controlador que actúa como punto de partida para la función de AWS Lambda. El manejador tiene los detalles de los eventos. En este capítulo, veamos cómo usar AWS S3 para activar la función AWS Lambda cuando cargamos archivos en el bucket de S3.
Pasos para usar la función AWS Lambda con Amazon S3
Para comenzar a usar AWS Lambda con Amazon S3, necesitamos lo siguiente:
- Crear segmento S3
- Crear rol que tenga permiso para trabajar con s3 y lambda
- Cree la función lambda y agregue s3 como disparador.
Ejemplo
Veamos estos pasos con la ayuda de un ejemplo que muestra la interacción básica entre Amazon S3 y AWS Lambda.
El usuario cargará un archivo en el depósito de Amazon S3
Una vez que se carga el archivo, activará la función AWS Lambda en segundo plano que mostrará una salida en forma de un mensaje de consola de que el archivo está cargado.
El usuario podrá ver el mensaje en los registros de Cloudwatch una vez que se cargue el archivo.
El diagrama de bloques que explica el flujo del ejemplo se muestra aquí:
Creación de un bucket de S3
Comencemos primero creando un bucket de s3 en la consola de AWS siguiendo los pasos que se indican a continuación:
Paso 1
Vaya a los servicios de Amazon y haga clic en S3 en la sección de almacenamiento como se destaca en la imagen que se muestra a continuación:
Paso 2
Haga clic en Almacenamiento S3 y Create bucket que almacenará los archivos cargados.
Paso 3
Una vez que haces clic Create bucket , puede ver una pantalla de la siguiente manera:
Paso 4
Ingrese los detalles Bucket name, Select the Region y haga clic en Createbotón en la parte inferior izquierda. Por lo tanto, hemos creado un cubo con el nombre:workingwithlambdaands3.
Paso 5
Ahora, haga clic en el nombre del depósito y le pedirá que cargue archivos como se muestra a continuación:
Por lo tanto, hemos terminado con la creación de cubos en S3.
Crear rol que funcione con S3 y Lambda
Para crear un rol que funcione con S3 y Lambda, siga los pasos que se indican a continuación:
Paso 1
Vaya a los servicios de AWS y seleccione IAM como se muestra a continuación:
Paso 2
Ahora, haga clic en IAM -> Roles como se muestra a continuación -
Paso 3
Ahora, haga clic en Create roley elija los servicios que utilizarán este rol. Seleccione Lambda y haga clic enPermission botón.
Paso 4
Agregue el permiso desde abajo y haga clic en Review.
Paso 5
Observe que hemos elegido los siguientes permisos:
Observe que las Políticas que hemos seleccionado son AmazonS3FullAccess, AWSLambdaFullAccess y CloudWatchFullAccess.
Paso 6
Ahora, ingrese el nombre del rol, la descripción del rol y haga clic en Create Role botón en la parte inferior.
Por lo tanto, nuestro rol llamado lambdawiths3service es creado.
Crear función Lambda y agregar disparador S3
En esta sección, veamos cómo crear una función Lambda y agregarle un disparador S3. Para ello, deberá seguir los pasos que se indican a continuación:
Paso 1
Vaya a Servicios de AWS y seleccione Lambda como se muestra a continuación:
Paso 2
Hacer clic Lambda y siga el proceso para agregar Name. Elegir elRuntime, Roleetc. y cree la función. La función Lambda que hemos creado se muestra en la siguiente captura de pantalla:
Paso 3
Ahora agreguemos el disparador S3.
Paso 4
Elija el disparador de arriba y agregue los detalles como se muestra a continuación:
Paso 5
Seleccione el depósito creado desde el menú desplegable de depósitos. El tipo de evento tiene los siguientes detalles:
Seleccione Object Created (All), ya que necesitamos el disparador AWS Lambda cuando el archivo se carga, elimina, etc.
Paso 6
Puede agregar el patrón de prefijo y archivo que se utilizan para filtrar los archivos agregados. Por ejemplo, para activar lambda solo para imágenes .jpg. Dejémoslo en blanco por ahora, ya que necesitamos activar Lambda para todos los archivos cargados. Hacer clicAdd botón para agregar el disparador.
Paso 7
Puede encontrar la pantalla de activación de la función Lambda como se muestra a continuación:
Agreguemos los detalles de la función lambda aws. Aquí, usaremos el editor en línea para agregar nuestro código y usaremos nodejs como entorno de ejecución.
Paso 8
Para activar S3 con AWS Lambda, tendremos que usar el evento S3 en el código como se muestra a continuación:
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
Tenga en cuenta que el parámetro de evento tiene los detalles del S3event. Hemos consolado el nombre del depósito y el nombre del archivo que se registrará cuando cargue la imagen en S3bucket.
Paso 9
Ahora, guardemos los cambios y probemos la función lambda con S3upload. Los siguientes son los detalles del código agregados en AWS Lambda:
Paso 10
Ahora, agreguemos el rol, la memoria y el tiempo de espera.
Paso 11
Ahora, guarde la función Lambda. Abra S3 de los servicios de Amazon y abra el depósito que creamos anteriormente, a saberworkingwithlambdaands3.
Sube la imagen como se muestra a continuación:
Paso 12
Hacer clic Upload botón para agregar archivos como se muestra -
Paso 13
Hacer clic Add filespara agregar archivos. También puede arrastrar y soltar los archivos. Ahora, haga clic enUpload botón.
Por lo tanto, hemos subido una imagen a nuestro depósito de S3.
Paso 14
Para ver los detalles del disparador, vaya al servicio de AWS y seleccione CloudWatch. Abra los registros de la función Lambda y use el siguiente código:
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
La salida que puede observar en Cloudwatch es como se muestra:
La función AWS Lambda se activa cuando el archivo se carga en el bucket de S3 y los detalles se registran en Cloudwatch como se muestra a continuación: