FROM public.ecr.aws/lambda/python:3.11 # Postgres host/port/database are baked into the image at build time from # the deploy workflow's --build-arg values (GitHub Actions DEV_DB_* secrets), # mirroring backend/postcode_splitter/handler/Dockerfile. They map onto the # POSTGRES_* names PostgresConfig.from_env reads. Username/password are NOT # baked in -- Terraform injects those as Lambda env vars from Secrets Manager. ARG DEV_DB_HOST ARG DEV_DB_PORT ARG DEV_DB_NAME ENV POSTGRES_HOST=${DEV_DB_HOST} ENV POSTGRES_PORT=${DEV_DB_PORT} ENV POSTGRES_DATABASE=${DEV_DB_NAME} WORKDIR /var/task COPY applications/postcode_splitter/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copy the layered source the handler imports from. The new splitter pulls # only DDD-shaped packages — no pandas, no legacy backend/. COPY domain/ domain/ COPY infrastructure/ infrastructure/ COPY orchestration/ orchestration/ COPY repositories/ repositories/ COPY utilities/ utilities/ COPY applications/ applications/ # Place the handler at the Lambda task root so the runtime can resolve # ``main.handler`` without an extra package prefix. COPY applications/postcode_splitter/handler.py /var/task/main.py CMD ["main.handler"]