Error del módulo de importación de AWS Lambda en python

Estoy creando un paquete de implementación de AWS Lambda python. Estoy usando una solicitud de dependencia externa. Instalé la dependencia externa utilizando la documentación de AWS http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html . A continuación se muestra mi código de python.

import requests print('Loading function') s3 = boto3.client('s3') def lambda_handler(event, context): #print("Received event: " + json.dumps(event, indent=2)) # Get the object from the event and show its content type bucket = event['Records'][0]['s3']['bucket']['name'] key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']).decode('utf8') try: response = s3.get_object(Bucket=bucket, Key=key) s3.download_file(bucket,key, '/tmp/data.txt') lines = [line.rstrip('\n') for line in open('/tmp/data.txt')] for line in lines: col=line.split(',') print(col[5],col[6]) print("CONTENT TYPE: " + response['ContentType']) return response['ContentType'] except Exception as e: print(e) print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket)) raise e 

Creó el Zip del contenido del directorio project-dir y lo subió a la lambda (Zip el contenido del directorio, no el directorio). Cuando ejecuto la función, obtengo el error mencionado a continuación.

 START RequestId: 9e64e2c7-d0c3-11e5-b34e-75c7fb49d058 Version: $LATEST **Unable to import module 'lambda_function': No module named lambda_function** END RequestId: 9e64e2c7-d0c3-11e5-b34e-75c7fb49d058 REPORT RequestId: 9e64e2c7-d0c3-11e5-b34e-75c7fb49d058 Duration: 19.63 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 9 MB 

Por favor ayúdame a depurar el error.

El error se debió al nombre de archivo de la función lambda. Mientras crea la función lambda, pedirá el controlador de la función Lambda. Debe nombrarlo como Python_File_Name.Method_Name . En este escenario lo nombré como lambda.lambda_handler (lambda.py es el nombre del archivo).

Por favor encuentre abajo la instantánea. introduzca la descripción de la imagen aquí

Si está cargando un archivo zip. Asegúrese de que está comprimiendo el contenido del directorio y no el directorio en sí mismo.

Otra fuente de este problema son los permisos en el archivo comprimido. DEBE ser al menos legible en todo el mundo. (min chmod 444 )

Ejecuté lo siguiente en el archivo de Python antes de comprimirlo y funcionó bien.

 chmod u=rwx,go=r 

La respuesta de Nithin me pareció muy útil. Aquí hay un recorrido específico:

Busque estos valores:

  1. El nombre de la función lambda_handler en su script de python. El nombre utilizado en los ejemplos de AWS es “lambda_handler”, que se parece a “def lambda_handler (evento, contexto)”. En este caso, el valor es “lambda_handler”.
  2. En el panel de control de Lambda, busque el nombre del controlador en el cuadro de texto “Controlador” en la sección “Configuración” en el panel de control lambda para la función (que se muestra en la captura de pantalla de Nithin). Mi nombre predeterminado era “lambda_function.lambda_handler”.
  3. El nombre de tu script en python. Digamos que es “cool.py”

Con estos valores, necesitaría cambiar el nombre del controlador (que se muestra en la captura de pantalla) a “cool.lambda_handler”. Esta es una forma de deshacerse del mensaje de error “No se puede importar el módulo ‘lambda_function'”. Si tuviera que cambiar el nombre del controlador en su secuencia de comandos de python a “sup”, entonces tendría que cambiar el nombre del controlador en el panel lambda a “cool.sup”

Hay tantos errores al crear paquetes de implementación para AWS Lambda (para Python). He pasado horas y horas en sesiones de depuración hasta que encontré una fórmula que rara vez falla.

He creado un script que automatiza todo el proceso y, por lo tanto, lo hace menos propenso a errores. También he escrito un tutorial que explica cómo funciona todo. Es posible que desee verlo:

Implementación de Python Lambda sin problemas [Tutorial + Script]

Encontré esta manera difícil después de probar todas las soluciones anteriores. Si está utilizando subdirectorios en el archivo zip, asegúrese de incluir el archivo __init__.py en cada uno de los subdirectorios y eso funcionó para mí.

Yo también tuve el error. Resulta que mi archivo zip incluye el código de la carpeta principal. Cuando unzip e inspecciono el archivo zip, el archivo lambda_function está en la carpeta principal ./lambda .

Use el comando zip , arregle el error:

 zip -r ../lambda.zip ./* 

Me encontré con el mismo problema, esto era un ejercicio como parte de un tutorial en lynda.com si no me equivoco. El error que cometí no fue seleccionar el tiempo de ejecución como Python 3.6, que es una opción en la consola de la función lamda.

No hay necesidad de hacer ese lío.

usar python-lambda

https://github.com/nficano/python-lambda

con el comando pylambda deploy automáticamente su función

Necesita comprimir todos los requisitos, use este script

 #!/usr/bin/env bash rm package.zip mkdir package pip install -r requirements.txt --target package cat $1 > package/lambda_function.py cd package zip -r9 "../package.zip" . cd .. rm -rf package 

usar con:

 package.sh  

@nithin, AWS lanzó el concepto de layers dentro de las funciones Lambda . Puede crear su capa y allí puede cargar tanto como bibliotecas y luego puede conectar la capa con las funciones lambda. Para más detalles: https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

en lambda_handler el formato debe ser lambda_filename.lambda_functionName suponga que si desea ejecutar la función lambda_handler y si está en lambda_fuction.py, su formato de controlador es “lambda_function.lambda_handler”. Otra razón para obtener el error es dependencias del módulo. su lambda_fuction.py debe estar en el directorio raíz de zip.