# https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/ # libexec is missing from >=3.17 # Stage 1 - bundle base image + runtime FROM python:3.12-alpine3.19 AS python-alpine ARG ALPINE="v3.19" # Install GCC (Alpine uses musl but we compile and link dependencies with GCC) RUN echo "@kubezero https://cdn.zero-downtime.net/alpine/${ALPINE}/kubezero" >> /etc/apk/repositories && \ wget -q -O /etc/apk/keys/stefan@zero-downtime.net-61bb6bfb.rsa.pub https://cdn.zero-downtime.net/alpine/stefan@zero-downtime.net-61bb6bfb.rsa.pub RUN apk -U --no-cache upgrade && \ apk --no-cache add \ libstdc++ # Stage 2 - build function and dependencies FROM python-alpine AS build-image ARG TAG="latest" # Install aws-lambda-cpp build dependencies RUN apk --no-cache add \ build-base \ libtool \ autoconf \ automake \ make \ cmake \ libcurl \ libffi-dev \ openssl-dev \ libexecinfo-dev@kubezero # cargo # Install requirements COPY requirements.txt requirements.txt RUN export MAKEFLAGS="-j$(nproc)" && \ pip install -r requirements.txt --target /app # Install our app COPY app.py /app # Set internal __version__ to our own container TAG RUN sed -i -e "s/^__version__ =.*/__version__ = \"${TAG}\"/" /app/app.py # Stage 3 - final runtime image FROM python-alpine WORKDIR /app COPY --from=build-image /app /app ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ] CMD [ "app.handler" ] LABEL zero-downtime.net.image.maintainer="stefan@zero-downtime.net" \ zero-downtime.net.image.license="AGPLv3"