diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e39b7b..56e9c3e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,8 +15,8 @@ on: pull_request: env: - GDAL_VERSION: 3.8.3 - GDAL_VERSION_TAG: 3.8 + GDAL_VERSION: 3.9.3 # 3.10.2 + GDAL_VERSION_TAG: 3.9 jobs: build: @@ -121,7 +121,7 @@ jobs: - name: Build Runtime and Push Python <=3.11 with yum run: | - runtimes='3.9 3.10 3.11' + runtimes='3.10 3.11' for runtime in ${runtimes}; do docker build \ --platform=linux/amd64 \ diff --git a/CHANGES.md b/CHANGES.md index 95beea9..0a441ff 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,7 +3,10 @@ ## Unreleased - Add support for Python 3.12 and 3.13 +- Remove support for Python 3.9 - Update deploy.py script compatible runtimes list to currently-available runtimes +- update versions: + - GDAL: 3.10.2 "Gulf of Mexico" ## 2024-02-02.patch1 diff --git a/README.md b/README.md index b593389..075acd9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ - -

docker-lambda @@ -14,36 +12,47 @@

-# Docker Images +# Docker Lambda + +## Docker Images Based on `public.ecr.aws/lambda/provided:al2` (AmazonLinux 2) -- GDAL 3.8.3 - - **ghcr.io/lambgeo/lambda-gdal:3.8** (Fev 2024) +- GDAL 3.10.2 + - **ghcr.io/lambgeo/lambda-gdal:3.10.2** (Feb 2025) -Runtimes images: +### Current images - Python (based on `public.ecr.aws/lambda/python:{version}`) - - **ghcr.io/lambgeo/lambda-gdal:3.8-python3.9** - - **ghcr.io/lambgeo/lambda-gdal:3.8-python3.10** - - **ghcr.io/lambgeo/lambda-gdal:3.8-python3.11** - -**archived** - - **ghcr.io/lambgeo/lambda-gdal:3.6** - - **ghcr.io/lambgeo/lambda-gdal:3.6-python3.9** - - **ghcr.io/lambgeo/lambda-gdal:3.6-python3.10** - - **ghcr.io/lambgeo/lambda-gdal:3.6-python3.11** + - **ghcr.io/lambgeo/lambda-gdal:3.10-python3.9** + - **ghcr.io/lambgeo/lambda-gdal:3.10-python3.10** + - **ghcr.io/lambgeo/lambda-gdal:3.10-python3.11** + - **ghcr.io/lambgeo/lambda-gdal:3.10-python3.12** + - **ghcr.io/lambgeo/lambda-gdal:3.10-python3.13** + +## Archived images + +- **ghcr.io/lambgeo/lambda-gdal:3.8** +- **ghcr.io/lambgeo/lambda-gdal:3.8-python3.9** +- **ghcr.io/lambgeo/lambda-gdal:3.8-python3.10** +- **ghcr.io/lambgeo/lambda-gdal:3.8-python3.11** +- **ghcr.io/lambgeo/lambda-gdal:3.8-python3.12** +- **ghcr.io/lambgeo/lambda-gdal:3.8-python3.13** +- **ghcr.io/lambgeo/lambda-gdal:3.6** +- **ghcr.io/lambgeo/lambda-gdal:3.6-python3.9** +- **ghcr.io/lambgeo/lambda-gdal:3.6-python3.10** +- **ghcr.io/lambgeo/lambda-gdal:3.6-python3.11** see: -### Creating Lambda packages +## Creating Lambda packages ### Using #### 1. Create Dockerfile ```Dockerfile -FROM ghcr.io/lambgeo/lambda-gdal:3.8 AS gdal +FROM ghcr.io/lambgeo/lambda-gdal:3.10 AS gdal # We use the official AWS Lambda image FROM public.ecr.aws/lambda/{RUNTIME: python|node|go...}:{RUNTIME version} @@ -69,7 +78,7 @@ ENV \ RUN cd $PACKAGE_PREFIX && zip -r9q /tmp/package.zip * ``` -If you are working with **python3.9|3.10|3.11|3.12|3.13**, you can use lambgeo pre-build docker images: +If you are working with **python3.10|3.11|3.12|3.13**, you can use lambgeo pre-build docker images: ```Dockerfile FROM ghcr.io/lambgeo/lambda-gdal:3.8-python3.10 @@ -129,8 +138,7 @@ Other variables: Starting with gdal3.1 (PROJ 7.1), you can set `PROJ_NETWORK=ON` to use [remote grids](https://proj.org/usage/network.html). - -# AWS Lambda Layers +## AWS Lambda Layers | gdal | amazonlinux version | size (Mb) | unzipped size (Mb) | arn | | ---- | ------------------- | --------- | ------------------ | ----------------------------------------------------------- | @@ -138,7 +146,7 @@ Starting with gdal3.1 (PROJ 7.1), you can set `PROJ_NETWORK=ON` to use [remote g see [/layer.json](/layer.json) for the list of arns -### Find the arn version +### Find the ARN version ```bash cat layer.json| jq '.[] | select(.region == "us-west-2")' @@ -278,3 +286,13 @@ package.zip - **GDAL_DATA:** /opt/share/gdal - **PROJ_LIB:** /opt/share/proj - lambda handler: `handler.handler` + +## Building locally for testing + +To run the image build locally, execute the script `scripts/build.sh` with +three arguments of (1) the GDAL version, (2) the runtime platform, and (3) +the version of the runtime platform: + +```commandline +./scripts/build.sh 3.10.2 python 3.13 +``` diff --git a/dockerfiles/Dockerfile b/dockerfiles/Dockerfile index 5875f15..4381e5f 100644 --- a/dockerfiles/Dockerfile +++ b/dockerfiles/Dockerfile @@ -10,11 +10,11 @@ RUN yum update -y && \ yum clean all && \ rm -rf /var/cache/yum /var/lib/yum/history -ENV PREFIX /opt +ENV PREFIX=/opt WORKDIR /opt -ENV LD_LIBRARY_PATH $PREFIX/lib:$LD_LIBRARY_PATH +ENV LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH # pkg-config ENV PKGCONFIG_VERSION=0.29.2 @@ -404,7 +404,7 @@ RUN for i in $PREFIX/lib/*.so; do patchelf --force-rpath --set-rpath '$ORIGIN' $ # Build final image FROM public.ecr.aws/lambda/provided:al2 AS runner -ENV PREFIX /opt +ENV PREFIX=/opt COPY --from=builder /opt/lib/ $PREFIX/lib/ COPY --from=builder /opt/include/ $PREFIX/include/ COPY --from=builder /opt/share/ $PREFIX/share/ diff --git a/dockerfiles/runtimes/nodejs b/dockerfiles/runtimes/nodejs index 59fe4f0..51ece9c 100644 --- a/dockerfiles/runtimes/nodejs +++ b/dockerfiles/runtimes/nodejs @@ -16,7 +16,7 @@ ENV \ # When building rasterio, setup.py will get libs directoy from gdal-config # $ gdal-config --libs # -L/opt/lib -lgdal -ENV PREFIX /opt +ENV PREFIX=/opt COPY --from=gdal /opt/lib/ $PREFIX/lib/ COPY --from=gdal /opt/include/ $PREFIX/include/ diff --git a/scripts/build.sh b/scripts/build.sh index 55f9356..03fd3bc 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,4 +1,7 @@ -#!/bin/bash +#!/usr/bin/env bash + +set -Eeuo pipefail +# set -x # print each command before executing GDAL_VERSION=$1 GDAL_VERSION_TAG=${GDAL_VERSION%.*} diff --git a/scripts/deploy.py b/scripts/deploy.py index e12cf99..996ba64 100644 --- a/scripts/deploy.py +++ b/scripts/deploy.py @@ -33,7 +33,6 @@ "python3.12", "python3.11", "python3.10", - "python3.9", "java21", "java17", "java11",