When I try to connect to AWS RDS (MySQL), most of the time I receive an InterfaceError. When I edit the Lambda code and re-run, it will work fine the first time, but then the same error occurs.
My code:
import sys import logging import pymysql import json import traceback rds_host = "*****.rds.amazonaws.com" name = "*****" password = "****" db_name = "myDB" logger = logging.getLogger() logger.setLevel(logging.INFO) try: conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5) except: logger.error("ERROR: Unexpected error: Could not connect to MySql instance.") sys.exit() logger.info("SUCCESS: Connection to RDS mysql instance succeeded") def handler(event, context): sub = event['sub'] username = event['username'] givenname = event['givenname'] isAdmin = event['isAdmin'] print (sub) print (username) print (givenname) print (isAdmin) data = {} cur = conn.cursor() try: cmd = "SELECT AuthState FROM UserInfo WHERE UserName=" + "\'" + username + "\'" rowCnt = cur.execute(cmd) print (cmd) except: print("ERROR: DB Query Execution failed.") traceback.print_exc() data['errorMessage'] = 'Internal server error' response = {} response['statusCode'] = 500 response['body'] = data return response if rowCnt <= 0: print (username) data['errorMessage'] = 'No User Name Found' response = {} response['statusCode'] = 400 response['body'] = data conn.close() return response for row in cur: print row[0] if int(row[0]) == 0:#NOT_AUTHORIZED ret = "NOT_AUTHORIZED" elif int(row[0]) == 1:#PENDING ret = "PENDING" elif int(row[0]) == 2:#AUTHORIZED ret = "AUTHORIZED" else:#BLOCKED ret = "BLOCKED" data['state'] = ret response = {} response['statusCode'] = 200 response['body'] = data conn.close() return response The stacktrace:
Traceback (most recent call last): File "/var/task/app.py", line 37, in handler File "/var/task/pymysql/connections.py", line 851, in query self._execute_command(COMMAND.COM_QUERY, sql) File "/var/task/pymysql/connections.py", line 1067, in _execute_command raise err.InterfaceError("(0, '')") InterfaceError: (0, '')