'AWS lambda (python): Dockerfile to install psycopg2?

I'm trying to use this tutorial to upload a docker container to AWS ECR for Lambda. My problem is that my python script uses psycopg2, and I couldn't figure out how to install psycopg2 inside the Docker image. I know that I need postgres-devel for the libq library and gcc for compiling, but it still doesn't work.

My requirements.txt:

pandas==1.3.0
requests==2.25.1
psycopg2==2.9.1
pgcopy==1.5.0

Dockerfile:

FROM public.ecr.aws/lambda/python:3.8

WORKDIR /app

COPY my_script.py .
COPY some_file.csv .
COPY requirements.txt .

RUN yum install -y postgresql-devel gcc*
RUN pip install -r requirements.txt

CMD ["/app/my_script.handler"]

After building, running the image, and testing the lambda function locally, I get this error message:

psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above

So I think the container has the wrong version of postgres(-devel). But I'm not sure how to install the proper version? Any tips for deploying a psycopg2 script to docker for lambda usage?



Solution 1:[1]

This might be a little old and too late to answer but figure I post what worked for me.

FROM public.ecr.aws/lambda/python:3.8

COPY . ${LAMBDA_TASK_ROOT}

RUN yum install -y gcc python27 python27-devel postgresql-devel

RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

CMD [ "app.handler" ]

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Josh Smith