Skip to content

Instantly share code, notes, and snippets.

@bensie
Last active May 13, 2025 07:08
Show Gist options
  • Save bensie/56f51bc33d4a55e2fc9a to your computer and use it in GitHub Desktop.
Save bensie/56f51bc33d4a55e2fc9a to your computer and use it in GitHub Desktop.
ImageMagick Static Binaries for AWS Lambda
#!/usr/bin/env bash
# Must be run on an Amazon Linux AMI that matches AWS Lambda's runtime which can be found at:
# https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
#
# As of May 21, 2019, this is:
# Amazon Linux AMI 2018.03.0 (ami-0756fbca465a59a30)
#
# You need to prepend PATH with the folder containing these binaries in your Lambda function
# to ensure these newer binaries are used.
#
# In a NodeJS runtime, you would add something like the following to the top of
# your Lambda function file:
# process.env['PATH'] = process.env['LAMBDA_TASK_ROOT'] + '/imagemagick/bin:' + process.env['PATH']
#
# This works with both ImageMagick v6.x and v7.x
# version=6.9.10-23
version=7.0.8-45
sudo yum -y install libpng-devel libjpeg-devel libtiff-devel gcc
curl -O https://imagemagick.org/download/ImageMagick-$version.tar.gz
tar zxvf ImageMagick-$version.tar.gz
cd ImageMagick-$version
./configure --prefix=/var/task/imagemagick --enable-shared=no --enable-static=yes
make
sudo make install
tar zcvf ~/imagemagick.tgz /var/task/imagemagick/
@blackbinbinbinbin
Copy link

Thanks~ It's work for me !!! But I found a small problem while using it:
curl download url: curl -O https://imagemagick.org/download/ImageMagick-$version.tar.gz , it will return 404 http status...
the ture url is: https://download.imagemagick.org/archive/ImageMagick-$version.tar.xz

@siddhant-grover
Copy link

siddhant-grover commented May 12, 2025

@samkit-jain please can you help here , the layer you build is partially working for me as it doent have webp support , i need webp support so I followed the same steps but in docker container on linux , the difference is imagemagick is now updated to version 7 , there is no coders file at the same place as in 6 so i am also not sure what env vars to set in lmabda as well-
image

I am getting error on lambda ->

{
  "errorMessage": "Unable to import module 'lambda_function': MagickWand shared library not found.\nYou probably had not installed ImageMagick library.\nTry to install:\n  [https://docs.wand-py.org/en/latest/guide/install.html"](https://docs.wand-py.org/en/latest/guide/install.html%22),
  "errorType": "Runtime.ImportModuleError",
  "requestId": "",
  "stackTrace": []
}

this is my docker file ->

FROM amazonlinux:2 as builder
 
# Install development tools and libraries

RUN yum update -y && \

    yum install -y \

        gcc \

        gcc-c++ \

        make \

        autoconf \

        automake \

        libtool \

        git \

        wget \

        tar \

        gzip \

        zip \

        unzip \

        python3 \

        python3-devel \

        python3-pip \

        yum-utils
 
# Create directory structure for the Lambda layer

RUN mkdir -p /opt/python
 
# Install libwebp

WORKDIR /tmp

RUN wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.3.0.tar.gz && \

    tar xzf libwebp-1.3.0.tar.gz && \

    cd libwebp-1.3.0 && \

    ./configure --prefix=/opt && \

    make && \

    make install
 
# Install ImageMagick with WebP support

WORKDIR /tmp

RUN wget https://imagemagick.org/archive/ImageMagick.tar.gz && \

    tar xzf ImageMagick.tar.gz && \

    cd ImageMagick-* && \

    ./configure --prefix=/opt \

                --with-webp \

                --disable-static \

                --enable-shared \

                --without-perl \

                --without-x \

                --without-xml \

                --without-pango && \

    make && \

    make install
 
# Install Wand (Python binding for ImageMagick)

RUN pip3 install --target=/opt/python wand
 
# Create the layer structure as expected by Lambda

FROM amazonlinux:2
 
# Install zip in the second stage

RUN yum update -y && \

    yum install -y zip
 
# Copy built libraries and python packages from the builder

COPY --from=builder /opt /opt
 
# Set up a directory for the final zip

RUN mkdir -p /layer
 
# Create layer.zip with the right structure

RUN cd /opt && zip -r9 /layer/layer.zip .
 
WORKDIR /layer

CMD ["/bin/bash"]

 

My lambda is running on python3.10 , i also tried the above with FROM public.ecr.aws/lambda/python:3.10 as builder image but same error.

please can someone help here , Thanks in Advance

@blackbinbinbinbin
Copy link

blackbinbinbinbin commented May 12, 2025 via email

@samkit-jain
Copy link

@siddhant-grover I have not worked on this project for a long time so can't help with full debugging. However, it looks like the coders file for imagemagick-7 might be somewhere at ImageMagick-7.1.1/modules-Q16/coders or similar.

Also, AWS Lambda now has support for Docker images so you might be better off building a Docker and using that instead of adding a layer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment