AWS Lambda Python with MySQL
Question: I'm trying to connect to mysql from my AWS Lambda script.  
I did  
`pip install --allow-external mysql-connector-python mysql-connector-python -t
<dir>`  
to install mysql-connector-python in local directory.  
I zipped the file and uploaded it to AWS Lambda where my python files are
being executed.  
My scripts are executing correctly up to the point where I initialize a mysql
connection.  
I have this  

    
    
    log('about to set connection for db')
    connection = mysql.connector.connect(user=DB_USER, password=DB_PASSWORD, host=DB_HOST, database=DB_DATABASE)
    query = "SELECT * FROM customers WHERE customer_email LIKE '%s' LIMIT 1"
    log('set connection for DB')
    

'about to set connection for db' is being logged but 'set connection for DB'
is never logged and my program hits a timeout and stops executing.  
  
What might I be doing wrong?

EDIT: This is my class that I'm calling from lambda_function.py

    
    
    import mysql.connector
    import logging
    from mysql.connector import errorcode
    
    class MySql( object ):
    
        USER    =None
        PASSWORD=None
        HOST    =None
        DATABASE=None
    
    
        logger = logging.getLogger()
        logger.setLevel( logging.INFO )
    
        def __init__(self, user, password, host, database):
            global USER, PASSWORD, HOST, DATABASE
            USER        = user
            PASSWORD    = password
            HOST        = host
            DATABASE    = database
    
        def getId( self, customer_email ):
            email_exists = False
    
            connection = mysql.connector.connect(user=USER, password=PASSWORD, host=HOST, database=DATABASE)
            query = "SELECT * FROM customers WHERE customer_email LIKE '%s' LIMIT 1"
    
            cursor = connection.cursor()
            cursor.execute( query % customer_email )
            data = cursor.fetchall()
            id = None
            for row in data :
                id = row[1]
                break
    
            cursor.close()
            connection.close()
            return id
    
        def insertCustomer( self, customer_email, id ):
            log('about to set connection for db')
            connection = mysql.connector.connect(user=USER, password=PASSWORD, host=HOST, database=DATABASE)
            log('set connection for DB')
            cursor = connection.cursor()
            try:
                cursor.execute("INSERT INTO customers VALUES (%s,%s)",( customer_email, id ))
                connection.commit()
            except:
                connection.rollback()
                connection.close()
        def log( logStr):
            logger.info( logStr )
    
    def main():
        user = 'xxx'
        password = 'xxx'
        host = ' xxx'
        database = 'xxx'
    
        mysql = MySql( user, password, host, database )
    
        id = mysql.getId('testing')
        if id == None:
            mysql.insertCustomer('blah','blahblah')
        print id
    
    if __name__ == "__main__":
        main()
    

When I execute the MySql.py locally my code works fine.  
My database gets updated but nothing happens when I run it from AWS.


Answer: Is it a MySQL instance on AWS (RDS) or on premise DB? If RDS, check the NACL
inbound rules of the vpc associated with your DB instance. Inbound rules can
allow/deny from specific IP sources

