How to install pymysql on AWS lambda

Question:

I’ve looked here and here as I’ve been trying to work out how to get pymysql running on AWS lambda. The examples I’ve looked at so far are extremely complex, and with the GitHub tutorial I got as far as IAM before I started running into permissions errors I didn’t know how to solve.

Literally, all I want to be able to do is call import pymysql within the prebuilt AWS lambda console template.

It seems like a simple problem, but I’m having a hard time finding a clear, step-by-step work through of how to get new dependencies to work for my lambda function. Ideally the example would not by via AWS CLI, since apparently there is a console option and this seems like it would take some of the headache out of the process.

Cheers,

Aaron

Asked By: aaron

||

Answers:

I was facing similar problem with Redis python library.
I follow the same documentation instructions which you mentioned in your second link.

here is example snippet for your reference :

Create new directory MyPythonLambda and put MyPythonLambda.py in the same.

Assume MyPythonLambda/MyPythonLambda.py is main lambda containing handler.

 cd MyPythonLambda/
 pip install redis -t .
 zip -r MyPythonLambda.zip *

Upload/import zip in lambda creation from S3 or your local file system.

I think you need to create zip file in similar way containing your python mysql library.

Answered By: PankajChandankar

TheYoungSoul has a fantastic YouTube example of how to do this step-by-step. Once I followed these instructions this was pretty easy to do.

Steps:

  1. Write a locally testable version of the routine I want to implement on lambda and call this function main.py. main.py has the function lambda_handler inside of it, which has the basic structure def lambda_handler(event, context): ...

  2. Use the script create_deployment.py, available on his repo, in conjunction with requirements.txt to create your deployment zip file. Note that if you’re on a Mac and this errors out on the first try may need to do this.

  3. Once you have a locally testable example running, create your lambda function on AWS and instead of writing function from scratch select the console menu option to upload a .zip file.

  4. Make sure to create a custom role that has access to RDS resources and be sure to place the DB that you want to connect with in the same VPC group. When setting up your function, specify that you want your lambda function to have VPC access.

Answered By: aaron

These are the steps that you need to follow:

  1. install the package like this
pip install --target ./python pymysql

this will install the package in the folder called python. After doing that zip this file.

  1. Then create a layer in AWS lambda and upload this zip file over there.

  2. After creating the layer go to layers and add a layer. After that just import the package in your lambda code and you should be able to use it

Answered By: karthik gangula