简体   繁体   中英

Building lambda function to connect to Postgresql getting :Unable to import module 'lambda_function': No module named 'psycopg2'

I am testing my api gateway to call lambda function. i was successful in the test.

i was then trying to make a connection to postgresql through the same lambda

   import json
   import psycopg2
    
    db_host = "hostname"
    db_port = 5432
    db_name ="db name"
    db_user ="user"
    db_pass ="password"
    
    def connect():
        conn = None
        try :
            conn = psycopg2.connect("dbname={} user={} host={} password={}".format(db_name,db_user,db_host,db_pass))
    except :
        print("connetion error")
    return conn


print("Loading function")
def lambda_handler(event, context):
    # paring query from the string 
    name = event['queryStringParameters']['name']
    action = event['queryStringParameters']['action']

print('name = '+name )
print('action = '+action)

# body of the response object 

transactionResponse = {}
transactionResponse['name'] = name
transactionResponse['action'] = action
transactionResponse['message'] = 'Lambda called from api_gateway'

# construting Http response

responseObject = {}
responseObject['statusCode'] = 200
responseObject['headers'] {}
responseObject['headers']['Content-Type'] = 'application/json'
responseObject['body'] = json.dumps(transactionResponse)

#  return the response object 

return responseObject

when i tried to trigger it through the API endpoint i got

 Unable to import module 'lambda_function': No module named 'psycopg2'

then i went ahead and build my lambda function by downloading the required package and then uploaded a zip file.

when i try to call try the same to trigger the lambda i am getting

 Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'lambda_function'

don't know what lamda_function is.

Could any one suggest me out of this slump? or provide me a way to connect to RDS through lambda from API gateway trigger

This is my build Package 在此处输入图像描述

You should check the lambda handler name from the console. This is likely to be caused because the handler name is referring to lambda_function.foobar but the filename of the Lambda within the zip would be not be named lambda_function.py .

Ensure the name is in the format filename.function_name .

In this example if the file was named lambda_function then the handler value should be lambda_function.lambda_handler .

The directory structure does not currently include the psycopg2 module so this will still not be able to be loaded.

To solve this the following solutions are applicable:

  • Add the dependency via pip install, then zip up again deploy
  • Add a Lambda layer with this dependency already installed

the issue is no longer there. Get the psycopg2 build library from https://github.com/jkehler/awslambda-psycopg2 was built for python 3.6 and make sure you change the name to psycopg2 while uploading your code to AWS lambda, select Python Runtime environment as 3.6, and it should work.

Can you check the lambda_handler settings and ensure they are correctly set to represent your function:

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM