Saltar al contenido

Crear una función lambda en AWS desde un archivo zip

Es imprescindible comprender el código de forma correcta previamente a adaptarlo a tu proyecto si ttienes algo que aportar puedes compartirlo con nosotros.

Solución:

El nombre de su archivo debe coincidir con el nombre del módulo en el Manipulador configuración. En este caso, su controlador debe estar configurado para helloworld.handlerdonde helloworld es el archivo que sería requerido () y handler es la función exportada. Entonces debería funcionar con el mismo archivo zip.

Captura de pantalla de configuración de AWS Lambda

Asegúrese de que su index.js esté en la raíz del archivo zip y no en un subdirectorio.

En mi caso, tenía el nombre del módulo que coincidía con el nombre del archivo y el controlador exportado, el verdadero problema era macOS y el programa zip que básicamente crea una carpeta dentro del archivo zip, por lo que cuando se descomprime en el motor AWS Lambda, index.js termina en un subdirectorio.

Uso del buscador

No haga clic derecho y comprima el directorioen su lugar seleccione los archivos archivos individuales como índice.js, paquete.json y el node_modules directorio y haga clic con el botón derecho para comprimir, puede terminar con un archivo Archive.zip en el mismo directorio. El nombre del archivo zip no será elegante, pero al menos funcionará cuando lo envíe a AWS Lambda.

Usando la línea de comando

Podrías cometer el mismo error usando la línea de comando con zip -r function.zip function que básicamente crea un archivo zip con un directorio llamado function en él, en su lugar haz:

$ zip function.zip index.js package.json node_modules

adding: index.js (deflated 47%)
adding: package.json (deflated 36%)
adding: node_modules/ (stored 0%)

Cómo saber verificar su archivo zip

Utilizando descubridorsi hace doble clic en el archivo zip y se descomprime en un subdirectorio, Lambda no podrá ver el archivo ya que index.js vive en ese subdirectorio.

Utilizando el línea de comando y zipinfo:

$ zipinfo function.zip | grep index.js | more
-rw-r--rw-  2.1 unx     1428 bX defN 27-Jul-16 12:21 function/index.js

Observe cómo index.js terminó dentro del subdirectorio function, te equivocaste.

$ zipinfo function.zip | grep index.js | more
-rw-r--rw-  3.0 unx     1428 tx defN 27-Jul-16 12:21 index.js

Tenga en cuenta que index.js no está dentro de una subcarpeta, este archivo zip funcionará en AWS Lambda.

Aprovechando los comandos npm para comprimir la función

Así que agregué un script a mi paquete para comprimir los archivos del proyecto simplemente ejecutando npm run zip


  "name": "function",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": 
    "zip": "zip function.zip package.json *.js node_modules"
  ,
  "dependencies": 
    "aws-sdk": "^2.4.10"
  


$ npm run zip

> [email protected]
zip > zip function.zip package.json *.js node_modules adding: package.json (deflated 41%) adding: index.js (deflated 47%) adding: local.js (deflated 42%) adding: node_modules/ (stored 0%)

Aquí hay una forma avanzada con AWS CLI. Le ahorrará tiempo en el uso a largo plazo.

En primer lugar, debe instalar y configurar AWS CLI:

http://docs.aws.amazon.com/cli/latest/userguide/installing.html

1) Crear un archivo

$ zip -r lambda *

Creará para nosotros un archivo lambda.zip con todas las carpetas y archivos en nuestra ubicación actual.

2) Obtener el ARN del rol

$ aws iam list-roles | grep “tu_rol”

Nos devolverá el ARN que usaremos con nuestra lambda. Deberías crearlo con tus manos.

Ejemplo de lista de roles

3) Crea nuestra lambda

$ función de creación de aws lambda –nombre de la función “tu_nombre_lambda” –archivo zip archivob://lambda.zip –manipulador index.handler –tiempo de ejecución nodejs6.10 –se acabó el tiempo 15 –papel COPIA_AQUÍ_TU_ARN_DE_EL_PASO_2

¡Hemos terminado!

Reseñas y puntuaciones del artículo

Nos encantaría que puedieras recomendar este post si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *