Reputation: 2181
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
Upvotes: 5
Views: 6089
Reputation: 2181
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.
Upvotes: 3
Reputation: 35238
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:
Upvotes: 0
Reputation: 238497
Can you check the lambda_handler settings and ensure they are correctly set to represent your function:
Upvotes: 0