├── .eslintignore ├── .github └── FUNDING.yml ├── .gitignore ├── LICENSE ├── README.md ├── base ├── base-2-arm64 │ ├── Dockerfile │ ├── amazonlinux2.txt │ ├── build.sh │ ├── dump-packages.sh │ ├── packages.txt │ └── publish.sh ├── base-2-x86_64 │ ├── Dockerfile │ ├── amazonlinux2.txt │ ├── build.sh │ ├── dump-packages.sh │ ├── packages.txt │ └── publish.sh ├── build-2-arm64 │ ├── Dockerfile │ ├── build.sh │ └── publish.sh ├── build-2-x86_64 │ ├── Dockerfile │ ├── build.sh │ └── publish.sh └── tar-find-layer │ └── build.sh ├── dump-fs ├── .gitignore ├── Makefile ├── dump-all.sh ├── dump-base-2 │ └── handler.js ├── dump-dotnet6 │ ├── Function.cs │ ├── dump-dotnet6.csproj │ └── global.json ├── dump-dotnetcore31 │ ├── Function.cs │ ├── dump-dotnetcore31.csproj │ └── global.json ├── dump-java11 │ ├── .gitignore │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── pl │ │ └── lupin │ │ └── lambda │ │ ├── DumpJava11.java │ │ ├── DumpJava11_arm64.java │ │ └── DumpJava11_x86_64.java ├── dump-java17 │ ├── .gitignore │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── pl │ │ └── lupin │ │ └── lambda │ │ ├── DumpJava17.java │ │ ├── DumpJava17_arm64.java │ │ └── DumpJava17_x86_64.java ├── dump-java8.al2 │ ├── .gitignore │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── pl │ │ └── lupin │ │ └── lambda │ │ ├── DumpJava8AL2.java │ │ ├── DumpJava8AL2_arm64.java │ │ └── DumpJava8AL2_x86_64.java ├── dump-nodejs12x │ └── handler.js ├── dump-nodejs14x │ └── handler.js ├── dump-nodejs16x │ └── handler.js ├── dump-nodejs18x │ └── handler.js ├── dump-provided.al2 │ ├── arm64 │ │ ├── go.mod │ │ ├── go.sum │ │ └── main.go │ └── x86_64 │ │ ├── go.mod │ │ ├── go.sum │ │ └── main.go ├── dump-python310 │ └── handler.py ├── dump-python311 │ └── handler.py ├── dump-python38 │ └── handler.py ├── dump-python39 │ └── handler.py ├── dump-ruby27 │ └── handler.rb ├── dump-ruby32 │ └── handler.rb ├── layer-tar-arm64.zip ├── layer-tar-x86_64.zip └── serverless.yml ├── examples ├── docker-file │ ├── Dockerfile │ ├── index.js │ └── package.json ├── dotnet6 │ ├── Function.cs │ ├── README.md │ ├── test.csproj │ └── test.sln ├── dotnetcore3.1 │ ├── Function.cs │ ├── README.md │ ├── test.csproj │ └── test.sln ├── go1.x │ ├── go.mod │ ├── go.sum │ └── handler.go ├── java │ ├── .classpath │ ├── .project │ ├── .settings │ │ ├── org.eclipse.buildship.core.prefs │ │ ├── org.eclipse.core.resources.prefs │ │ └── org.eclipse.jdt.core.prefs │ ├── README.md │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── pl │ │ └── lupin │ │ └── lambda │ │ └── ExampleHandler.java ├── nodejs-native-module │ ├── index.js │ ├── package-lock.json │ ├── package.json │ └── test.js ├── nodejs │ ├── index.js │ └── package.json ├── post.lua ├── provided.al2 │ ├── bootstrap.go │ ├── go.mod │ └── go.sum ├── python │ └── lambda_function.py ├── ruby │ └── lambda_function.rb ├── terminal.png └── test-all.sh ├── index.js ├── package.json ├── runtimes ├── build-all-images.sh ├── create-ghcr-images.sh ├── dotnet6-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── dotnet6-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── dotnetcore3.1-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── dotnetcore3.1-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── get-all-runtimes.sh ├── java11-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── java11-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── java17-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── java17-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── java8.al2-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── java8.al2-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── manifest-all-images.sh ├── nodejs12.x-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── nodejs12.x-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── nodejs14.x-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── nodejs14.x-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── nodejs16.x-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── nodejs16.x-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── nodejs18.x-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── nodejs18.x-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── provided.al2-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ ├── go.mod │ │ ├── go.sum │ │ ├── init.go │ │ └── publish.sh ├── provided.al2-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ ├── go.mod │ │ ├── go.sum │ │ ├── init.go │ │ └── publish.sh ├── pull-all-images.sh ├── python3.10-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── python3.10-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── python3.11-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── python3.11-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── python3.8-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── python3.8-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── python3.9-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── python3.9-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── ruby2.7-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── ruby2.7-x86_64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh ├── ruby3.2-arm64 │ ├── build │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh │ └── run │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── publish.sh └── ruby3.2-x86_64 │ ├── build │ ├── Dockerfile │ ├── build.sh │ └── publish.sh │ └── run │ ├── Dockerfile │ ├── build.sh │ └── publish.sh ├── test.js └── tests └── native-test.sh /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: mLupine 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | base/diff 3 | base/diff-2 4 | *.pyc 5 | *.vs 6 | *.userprefs 7 | .gradle 8 | base/tar-find-layer/layer.zip 9 | base/dump-java8/bin 10 | base/dump-java8/build 11 | base/dump-java8al2/bin 12 | base/dump-java8al2/build 13 | base/dump-java11/bin 14 | base/dump-java11/build 15 | base/dump-java17/bin 16 | base/dump-java17/build 17 | base/dump-dotnetcore20/bin 18 | base/dump-dotnetcore20/obj 19 | base/dump-dotnetcore21/bin 20 | base/dump-dotnetcore21/obj 21 | base/dump-dotnetcore31/bin 22 | base/dump-dotnetcore31/obj 23 | base/dump-providedal2/bootstrap 24 | base/dump-providedal2/bootstrap.zip 25 | dotnetcore2.0/run/MockBootstraps/bin 26 | dotnetcore2.0/run/MockBootstraps/obj 27 | dotnetcore2.1/run/MockBootstraps/bin 28 | dotnetcore2.1/run/MockBootstraps/obj 29 | java8/run/lambda-runtime-mock/target 30 | examples/dotnetcore2.0/bin 31 | examples/dotnetcore2.0/obj 32 | examples/dotnetcore2.0/pub 33 | examples/dotnetcore2.1/bin 34 | examples/dotnetcore2.1/obj 35 | examples/dotnetcore2.1/pub 36 | examples/dotnetcore3.1/bin 37 | examples/dotnetcore3.1/obj 38 | examples/dotnetcore3.1/pub 39 | examples/dotnet6/bin 40 | examples/dotnet6/obj 41 | examples/dotnet6/pub 42 | examples/java/bin 43 | examples/java/build 44 | examples/go1.x/handler 45 | examples/go1.x/handler 46 | examples/provided.al2/bootstrap 47 | package-lock.json 48 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2021 Maciej Wilczyński 2 | Copyright 2016 Michael Hart and LambCI contributors 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of 5 | this software and associated documentation files (the "Software"), to deal in 6 | the Software without restriction, including without limitation the rights to 7 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 8 | of the Software, and to permit persons to whom the Software is furnished to do 9 | so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | -------------------------------------------------------------------------------- /base/base-2-arm64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | # Docker doesn't support unpacking from remote URLs with ADD, 4 | # and we don't want to 'docker import' because we can't squash into a small layer 5 | # So this is expected to be downloaded from https://docker-lambda.s3.amazonaws.com/fs/base-2-arm64.tgz 6 | ADD ./base-2-arm64.tgz /opt/ 7 | 8 | RUN yum --installroot=/opt install -y glibc-2.26-63.amzn2.aarch64 glibc-common-2.26-63.amzn2.aarch64 openssl-libs-1.0.2k-24.amzn2.0.7.aarch64 libicu-50.2-4.amzn2.aarch64 && \ 9 | yum --installroot=/opt reinstall -y filesystem-3.2-25.amzn2.0.4.aarch64 setup-2.8.71-10.amzn2.0.1.noarch && \ 10 | yum --installroot=/opt clean all 11 | 12 | FROM scratch 13 | 14 | COPY --from=0 /opt / 15 | 16 | ENV PATH=/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin \ 17 | LD_LIBRARY_PATH=/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib \ 18 | LANG=en_US.UTF-8 \ 19 | TZ=:UTC \ 20 | LAMBDA_TASK_ROOT=/var/task \ 21 | LAMBDA_RUNTIME_DIR=/var/runtime \ 22 | _LAMBDA_CONTROL_SOCKET=14 \ 23 | _LAMBDA_SHARED_MEM_FD=11 \ 24 | _LAMBDA_LOG_FD=9 \ 25 | _LAMBDA_SB_ID=7 \ 26 | _LAMBDA_CONSOLE_SOCKET=16 \ 27 | _LAMBDA_RUNTIME_LOAD_TIME=1369872406543 \ 28 | _AWS_XRAY_DAEMON_ADDRESS=169.254.79.2 \ 29 | _AWS_XRAY_DAEMON_PORT=2000 \ 30 | AWS_XRAY_DAEMON_ADDRESS=169.254.79.2:2000 \ 31 | AWS_XRAY_CONTEXT_MISSING=LOG_ERROR \ 32 | _X_AMZN_TRACE_ID='Root=1-dc99d00f-c079a84d433534434534ef0d;Parent=91ed514f1e5c03b2;Sampled=1' 33 | 34 | RUN chown sbx_user1051:495 /tmp && \ 35 | chmod 700 /tmp 36 | 37 | WORKDIR /var/task 38 | -------------------------------------------------------------------------------- /base/base-2-arm64/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | curl -O https://docker-lambda.s3.amazonaws.com/fs/base-2-arm64.tgz 4 | 5 | set -euxo pipefail 6 | 7 | docker build --progress plain --no-cache --platform linux/arm64 --squash -t mlupin/lambda-base-2:arm64 . 8 | 9 | rm ./base-2-arm64.tgz 10 | -------------------------------------------------------------------------------- /base/base-2-arm64/dump-packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | curl https://docker-lambda.s3.amazonaws.com/fs/base-2-arm64.tgz | tar -xz --strip-components=2 -- var/lib/rpm 4 | 5 | docker pull arm64v8/amazonlinux:2 6 | docker run -v "$PWD/rpm":/rpm --rm arm64v8/amazonlinux:2 rpm -qa --dbpath /rpm | grep -v ^gpg-pubkey- | sort > packages.txt 7 | rm -rf rpm 8 | 9 | docker run --rm arm64v8/amazonlinux:2 bash -c 'yum upgrade -y > /dev/null && rpm -qa' | grep -v ^gpg-pubkey- | sort > amazonlinux2.txt 10 | 11 | if diff -w -d amazonlinux2.txt packages.txt | grep -q '>'; then 12 | echo 'Mismatching packages on images' 13 | diff -w -d amazonlinux2.txt packages.txt 14 | else 15 | diff -w -d amazonlinux2.txt packages.txt | grep '<' | awk '{print $2}' > diff.txt 16 | fi 17 | -------------------------------------------------------------------------------- /base/base-2-arm64/packages.txt: -------------------------------------------------------------------------------- 1 | basesystem-10.0-7.amzn2.0.1.noarch 2 | bash-4.2.46-34.amzn2.aarch64 3 | bzip2-libs-1.0.6-13.amzn2.0.3.aarch64 4 | ca-certificates-2021.2.50-72.amzn2.0.7.noarch 5 | chkconfig-1.7.4-1.amzn2.0.2.aarch64 6 | coreutils-8.22-24.amzn2.aarch64 7 | dejavu-fonts-common-2.33-6.amzn2.noarch 8 | dejavu-sans-fonts-2.33-6.amzn2.noarch 9 | expat-2.1.0-15.amzn2.0.2.aarch64 10 | filesystem-3.2-25.amzn2.0.4.aarch64 11 | fontconfig-2.13.0-4.3.amzn2.aarch64 12 | fontpackages-filesystem-1.44-8.amzn2.noarch 13 | freetype-2.8-14.amzn2.1.1.aarch64 14 | gawk-4.0.2-4.amzn2.1.2.aarch64 15 | glibc-2.26-63.amzn2.aarch64 16 | glibc-all-langpacks-2.26-63.amzn2.aarch64 17 | glibc-common-2.26-63.amzn2.aarch64 18 | glibc-minimal-langpack-2.26-63.amzn2.aarch64 19 | gmp-6.0.0-15.amzn2.0.2.aarch64 20 | grep-2.20-3.amzn2.0.2.aarch64 21 | info-5.1-5.amzn2.aarch64 22 | keyutils-libs-1.5.8-3.amzn2.0.2.aarch64 23 | krb5-libs-1.15.1-55.amzn2.2.5.aarch64 24 | libacl-2.2.51-14.amzn2.aarch64 25 | libattr-2.4.46-12.amzn2.0.2.aarch64 26 | libcap-2.54-1.amzn2.0.1.aarch64 27 | libcom_err-1.42.9-19.amzn2.0.1.aarch64 28 | libffi-3.0.13-18.amzn2.0.2.aarch64 29 | libgcc-7.3.1-15.amzn2.aarch64 30 | libicu-50.2-4.amzn2.aarch64 31 | libpng-1.5.13-8.amzn2.0.1.aarch64 32 | libselinux-2.5-12.amzn2.0.2.aarch64 33 | libsepol-2.5-8.1.amzn2.0.2.aarch64 34 | libstdc++-7.3.1-15.amzn2.aarch64 35 | libtasn1-4.10-1.amzn2.0.3.aarch64 36 | libuuid-2.30.2-2.amzn2.0.11.aarch64 37 | libverto-0.2.5-4.amzn2.0.2.aarch64 38 | ncurses-6.0-8.20170212.amzn2.1.4.aarch64 39 | ncurses-base-6.0-8.20170212.amzn2.1.4.noarch 40 | ncurses-libs-6.0-8.20170212.amzn2.1.4.aarch64 41 | nspr-4.34.0-3.1.amzn2.aarch64 42 | nss-softokn-freebl-3.79.0-4.amzn2.aarch64 43 | nss-util-3.79.0-1.amzn2.aarch64 44 | openssl-libs-1.0.2k-24.amzn2.0.7.aarch64 45 | p11-kit-0.23.22-1.amzn2.0.1.aarch64 46 | p11-kit-trust-0.23.22-1.amzn2.0.1.aarch64 47 | pcre-8.32-17.amzn2.0.3.aarch64 48 | popt-1.13-16.amzn2.0.2.aarch64 49 | sed-4.2.2-5.amzn2.0.2.aarch64 50 | setup-2.8.71-10.amzn2.0.1.noarch 51 | system-release-2-14.amzn2.aarch64 52 | tzdata-2023c-1.amzn2.0.1.noarch 53 | zlib-1.2.7-19.amzn2.0.2.aarch64 54 | -------------------------------------------------------------------------------- /base/base-2-arm64/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export BASE_IMAGE="mlupin/lambda-base-2:arm64" 7 | export CC_IMAGE="mlupin/docker-lambda:base-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker tag ${BASE_IMAGE} ${CC_IMAGE} 11 | docker tag ${BASE_IMAGE} ${CC_IMAGE}-${PUBLISH_DATE} 12 | docker push ${BASE_IMAGE} 13 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 14 | docker push ${CC_IMAGE} 15 | docker push ${CC_IMAGE}-${PUBLISH_DATE} 16 | -------------------------------------------------------------------------------- /base/base-2-x86_64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | # Docker doesn't support unpacking from remote URLs with ADD, 4 | # and we don't want to 'docker import' because we can't squash into a small layer 5 | # So this is expected to be downloaded from https://docker-lambda.s3.amazonaws.com/fs/base-2-x86_64.tgz 6 | ADD ./base-2-x86_64.tgz /opt/ 7 | 8 | RUN yum --installroot=/opt install -y glibc-2.26-63.amzn2.x86_64 glibc-common-2.26-63.amzn2.x86_64 openssl-libs-1.0.2k-24.amzn2.0.7.x86_64 libicu-50.2-4.amzn2.x86_64 && \ 9 | yum --installroot=/opt reinstall -y filesystem-3.2-25.amzn2.0.4.x86_64 setup-2.8.71-10.amzn2.0.1.noarch && \ 10 | yum --installroot=/opt clean all 11 | 12 | FROM scratch 13 | 14 | COPY --from=0 /opt / 15 | 16 | ENV PATH=/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin \ 17 | LD_LIBRARY_PATH=/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib \ 18 | LANG=en_US.UTF-8 \ 19 | TZ=:UTC \ 20 | LAMBDA_TASK_ROOT=/var/task \ 21 | LAMBDA_RUNTIME_DIR=/var/runtime \ 22 | _LAMBDA_CONTROL_SOCKET=14 \ 23 | _LAMBDA_SHARED_MEM_FD=11 \ 24 | _LAMBDA_LOG_FD=9 \ 25 | _LAMBDA_SB_ID=7 \ 26 | _LAMBDA_CONSOLE_SOCKET=16 \ 27 | _LAMBDA_RUNTIME_LOAD_TIME=1369872406543 \ 28 | _AWS_XRAY_DAEMON_ADDRESS=169.254.79.2 \ 29 | _AWS_XRAY_DAEMON_PORT=2000 \ 30 | AWS_XRAY_DAEMON_ADDRESS=169.254.79.2:2000 \ 31 | AWS_XRAY_CONTEXT_MISSING=LOG_ERROR \ 32 | _X_AMZN_TRACE_ID='Root=1-dc99d00f-c079a84d433534434534ef0d;Parent=91ed514f1e5c03b2;Sampled=1' 33 | 34 | RUN chown sbx_user1051:495 /tmp && \ 35 | chmod 700 /tmp 36 | 37 | WORKDIR /var/task 38 | -------------------------------------------------------------------------------- /base/base-2-x86_64/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | curl -O https://docker-lambda.s3.amazonaws.com/fs/base-2-x86_64.tgz 4 | 5 | set -euxo pipefail 6 | 7 | docker build --progress plain --no-cache --platform linux/amd64 --squash -t mlupin/lambda-base-2:x86_64 . 8 | 9 | rm ./base-2-x86_64.tgz 10 | -------------------------------------------------------------------------------- /base/base-2-x86_64/dump-packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | curl https://docker-lambda.s3.amazonaws.com/fs/base-2-x86_64.tgz | tar -xz --strip-components=2 -- var/lib/rpm 4 | 5 | docker pull amd64/amazonlinux:2 6 | docker run -v "$PWD/rpm":/rpm --rm amd64/amazonlinux:2 rpm -qa --dbpath /rpm | grep -v ^gpg-pubkey- | sort > packages.txt 7 | rm -rf rpm 8 | 9 | docker run --rm amd64/amazonlinux:2 bash -c 'yum upgrade -y > /dev/null && rpm -qa' | grep -v ^gpg-pubkey- | sort > amazonlinux2.txt 10 | 11 | if diff -w -d amazonlinux2.txt packages.txt | grep -q '>'; then 12 | echo 'Mismatching packages on images' 13 | diff -w -d amazonlinux2.txt packages.txt 14 | else 15 | diff -w -d amazonlinux2.txt packages.txt | grep '<' | awk '{print $2}' > diff.txt 16 | fi 17 | -------------------------------------------------------------------------------- /base/base-2-x86_64/packages.txt: -------------------------------------------------------------------------------- 1 | basesystem-10.0-7.amzn2.0.1.noarch 2 | bash-4.2.46-34.amzn2.x86_64 3 | ca-certificates-2021.2.50-72.amzn2.0.1.noarch 4 | chkconfig-1.7.4-1.amzn2.0.2.x86_64 5 | coreutils-8.22-24.amzn2.x86_64 6 | filesystem-3.2-25.amzn2.0.4.x86_64 7 | gawk-4.0.2-4.amzn2.1.2.x86_64 8 | glibc-2.26-48.amzn2.x86_64 9 | glibc-all-langpacks-2.26-48.amzn2.x86_64 10 | glibc-common-2.26-48.amzn2.x86_64 11 | glibc-minimal-langpack-2.26-48.amzn2.x86_64 12 | gmp-6.0.0-15.amzn2.0.2.x86_64 13 | grep-2.20-3.amzn2.0.2.x86_64 14 | info-5.1-5.amzn2.x86_64 15 | keyutils-libs-1.5.8-3.amzn2.0.2.x86_64 16 | krb5-libs-1.15.1-37.amzn2.2.2.x86_64 17 | libacl-2.2.51-14.amzn2.x86_64 18 | libattr-2.4.46-12.amzn2.0.2.x86_64 19 | libcap-2.22-9.amzn2.0.2.x86_64 20 | libcom_err-1.42.9-19.amzn2.x86_64 21 | libffi-3.0.13-18.amzn2.0.2.x86_64 22 | libgcc-7.3.1-13.amzn2.x86_64 23 | libicu-50.2-4.amzn2.x86_64 24 | libselinux-2.5-12.amzn2.0.2.x86_64 25 | libsepol-2.5-8.1.amzn2.0.2.x86_64 26 | libstdc++-7.3.1-13.amzn2.x86_64 27 | libtasn1-4.10-1.amzn2.0.2.x86_64 28 | libverto-0.2.5-4.amzn2.0.2.x86_64 29 | ncurses-6.0-8.20170212.amzn2.1.3.x86_64 30 | ncurses-base-6.0-8.20170212.amzn2.1.3.noarch 31 | ncurses-libs-6.0-8.20170212.amzn2.1.3.x86_64 32 | nspr-4.25.0-2.amzn2.x86_64 33 | nss-softokn-freebl-3.53.1-6.amzn2.x86_64 34 | nss-util-3.53.1-1.amzn2.x86_64 35 | openssl-libs-1.0.2k-19.amzn2.0.7.x86_64 36 | p11-kit-0.23.22-1.amzn2.0.1.x86_64 37 | p11-kit-trust-0.23.22-1.amzn2.0.1.x86_64 38 | pcre-8.32-17.amzn2.0.2.x86_64 39 | popt-1.13-16.amzn2.0.2.x86_64 40 | sed-4.2.2-5.amzn2.0.2.x86_64 41 | setup-2.8.71-10.amzn2.0.1.noarch 42 | system-release-2-13.amzn2.x86_64 43 | tzdata-2021a-1.amzn2.noarch 44 | zlib-1.2.7-18.amzn2.x86_64 45 | -------------------------------------------------------------------------------- /base/base-2-x86_64/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export BASE_IMAGE="mlupin/lambda-base-2:x86_64" 7 | export CC_IMAGE="mlupin/docker-lambda:base-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker tag ${BASE_IMAGE} ${CC_IMAGE} 11 | docker tag ${BASE_IMAGE} ${CC_IMAGE}-${PUBLISH_DATE} 12 | docker push ${BASE_IMAGE} 13 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 14 | docker push ${CC_IMAGE} 15 | docker push ${CC_IMAGE}-${PUBLISH_DATE} 16 | -------------------------------------------------------------------------------- /base/build-2-arm64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/lambda-base-2:arm64 2 | 3 | FROM arm64v8/amazonlinux:2 4 | 5 | COPY --from=0 / /opt/ 6 | 7 | RUN yum --installroot=/opt install -y yum yum-plugin-ovl yum-plugin-priorities 8 | 9 | FROM mlupin/lambda-base-2:arm64 10 | 11 | ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin \ 12 | PIPX_BIN_DIR=/usr/local/bin \ 13 | PIPX_HOME=/usr/local/pipx 14 | 15 | COPY --from=1 /opt / 16 | 17 | RUN chown root:root /tmp && \ 18 | chmod 1777 /tmp && \ 19 | yum install -y glibc-langpack-en && \ 20 | yum groupinstall -y development && \ 21 | yum install -y which clang cmake python-devel python3-devel amazon-linux-extras && \ 22 | amazon-linux-extras install -y docker && \ 23 | yum clean all && \ 24 | pip3 install -U pip setuptools wheel --no-cache-dir && \ 25 | pip3 install pipx --no-cache-dir 26 | -------------------------------------------------------------------------------- /base/build-2-arm64/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --platform linux/arm64 --no-cache --squash -t mlupin/lambda-base-2:build-arm64 . 6 | -------------------------------------------------------------------------------- /base/build-2-arm64/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export BASE_IMAGE="mlupin/lambda-base-2:build-arm64" 7 | export CC_IMAGE="mlupin/docker-lambda:build-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker tag ${BASE_IMAGE} ${CC_IMAGE} 11 | docker tag ${BASE_IMAGE} ${CC_IMAGE}-${PUBLISH_DATE} 12 | docker push ${BASE_IMAGE} 13 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 14 | docker push ${CC_IMAGE} 15 | docker push ${CC_IMAGE}-${PUBLISH_DATE} 16 | -------------------------------------------------------------------------------- /base/build-2-x86_64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/lambda-base-2:x86_64 2 | 3 | FROM amd64/amazonlinux:2 4 | 5 | COPY --from=0 / /opt/ 6 | 7 | RUN yum --installroot=/opt install -y yum yum-plugin-ovl yum-plugin-priorities 8 | 9 | FROM mlupin/lambda-base-2:x86_64 10 | 11 | ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin \ 12 | PIPX_BIN_DIR=/usr/local/bin \ 13 | PIPX_HOME=/usr/local/pipx 14 | 15 | COPY --from=1 /opt / 16 | 17 | RUN chown root:root /tmp && \ 18 | chmod 1777 /tmp && \ 19 | yum install -y glibc-langpack-en && \ 20 | yum groupinstall -y development && \ 21 | yum install -y which clang cmake python-devel python3-devel amazon-linux-extras && \ 22 | amazon-linux-extras install -y docker && \ 23 | yum clean all && \ 24 | pip3 install -U pip setuptools wheel --no-cache-dir && \ 25 | pip3 install pipx --no-cache-dir 26 | -------------------------------------------------------------------------------- /base/build-2-x86_64/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --platform linux/amd64 --no-cache --squash -t mlupin/lambda-base-2:build-x86_64 . 6 | -------------------------------------------------------------------------------- /base/build-2-x86_64/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export BASE_IMAGE="mlupin/lambda-base-2:build-x86_64" 7 | export CC_IMAGE="mlupin/docker-lambda:build-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker tag ${BASE_IMAGE} ${CC_IMAGE} 11 | docker tag ${BASE_IMAGE} ${CC_IMAGE}-${PUBLISH_DATE} 12 | docker push ${BASE_IMAGE} 13 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 14 | docker push ${CC_IMAGE} 15 | docker push ${CC_IMAGE}-${PUBLISH_DATE} 16 | -------------------------------------------------------------------------------- /base/tar-find-layer/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf layer layer.zip 4 | 5 | docker run --rm -v "$PWD":/tmp/layer amazonlinux:2 bash -c " 6 | mkdir -p /tmp/layer/layer/bin 7 | yum install -y wget tar xz gcc make automake zip 8 | cd ~ 9 | wget https://mirrors.kernel.org/gnu/findutils/findutils-4.8.0.tar.xz 10 | tar xJf findutils-*.tar.xz 11 | pushd findutils* 12 | ./configure 13 | make 14 | cp -a ./find/find /tmp/layer/layer/bin/ 15 | cp -a ./xargs/xargs /tmp/layer/layer/bin/ 16 | cp -a ./locate/updatedb /tmp/layer/layer/bin/ 17 | cp -a ./locate/locate /tmp/layer/layer/bin/ 18 | popd 19 | 20 | wget https://mirrors.kernel.org/gnu/gzip/gzip-1.9.tar.xz 21 | tar xJf gzip-*.tar.xz 22 | pushd gzip-* 23 | ./configure 24 | make 25 | cp -a {gzip,gzexe,gunzip,zcat,zdiff,zfgrep,zless,zmore,znew,zcmp} /tmp/layer/layer/bin/ 26 | popd 27 | 28 | wget https://mirrors.kernel.org/gnu/tar/tar-1.34.tar.xz 29 | tar xJf tar-*.tar.xz 30 | pushd tar-* 31 | FORCE_UNSAFE_CONFIGURE=1 ./configure 32 | make 33 | cp -a src/tar /tmp/layer/layer/bin/ 34 | popd 35 | 36 | pushd /tmp/layer/layer 37 | zip -yr /tmp/layer/layer.zip . 38 | popd 39 | # rm -rf /tmp/layer/layer 40 | " 41 | -------------------------------------------------------------------------------- /dump-fs/dump-all.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | echo "Dumping all Amazon Linux 2 lambda environments" 6 | sleep 1 7 | 8 | for lambda in $(serverless deploy list functions | grep 'dump-'); do 9 | echo "Invoking ${lambda}…" 10 | serverless invoke -f $lambda -l 11 | done 12 | 13 | echo "All done." 14 | -------------------------------------------------------------------------------- /dump-fs/dump-base-2/handler.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const { execSync } = require('child_process') 3 | const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3") 4 | const s3 = new S3Client({ region: 'eu-central-1' }); 5 | 6 | module.exports.handler_x86_64 = (async (e, c) => { return handler(e, c, "x86_64") }) 7 | module.exports.handler_arm64 = (async (e, c) => { return handler(e, c, "arm64") }) 8 | 9 | handler = async (event, context, arch) => { 10 | const execOpts = { stdio: 'inherit', maxBuffer: 16 * 1024 * 1024 } 11 | 12 | let filename = `base-2-${arch}.tgz` 13 | fs.closeSync(fs.openSync(`/tmp/${filename}`, 'w')) 14 | 15 | let cmd = 'tar -cpzf /tmp/' + filename + 16 | ' -C / --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp ' + 17 | '--exclude=/var/task/* --exclude=/var/runtime/* --exclude=/var/lang/* --exclude=/var/rapid/* --exclude=/opt/* ' + 18 | '--numeric-owner --ignore-failed-read /' 19 | 20 | execSync(event.cmd || cmd, execOpts) 21 | if (event.cmd) return 22 | 23 | console.log('Zipping done! Uploading...') 24 | 25 | let data = await s3.send(new PutObjectCommand({ 26 | Bucket: 'docker-lambda', 27 | Key: 'fs/' + filename, 28 | Body: fs.createReadStream('/tmp/' + filename), 29 | ACL: 'public-read', 30 | })) 31 | 32 | console.log('Uploading done!') 33 | 34 | console.log(process.execPath) 35 | console.log(process.execArgv) 36 | console.log(process.argv) 37 | console.log(process.cwd()) 38 | console.log(__filename) 39 | console.log(process.env) 40 | execSync('echo /proc/1/environ; xargs -n 1 -0 < /proc/1/environ', execOpts) 41 | execSync("bash -O extglob -c 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done'", execOpts) 42 | console.log(context) 43 | 44 | return data 45 | } 46 | -------------------------------------------------------------------------------- /dump-fs/dump-dotnet6/Function.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | 6 | using Amazon.Lambda.Core; 7 | using Amazon; 8 | using Amazon.S3; 9 | using Amazon.S3.Model; 10 | 11 | [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] 12 | 13 | namespace dump_dotnet6 14 | { 15 | public class Function 16 | { 17 | public async Task FunctionHandler_x86_64(object invokeEvent, ILambdaContext context) 18 | { 19 | return await FunctionHandler(invokeEvent, context, "x86_64"); 20 | } 21 | 22 | public async Task FunctionHandler_arm64(object invokeEvent, ILambdaContext context) 23 | { 24 | return await FunctionHandler(invokeEvent, context, "arm64"); 25 | } 26 | 27 | public async Task FunctionHandler(object invokeEvent, ILambdaContext context, string arch) 28 | { 29 | string filename = $"dotnet6-{arch}.tgz"; 30 | string cmd = $"touch /tmp/{filename} && tar -cpzf /tmp/{filename} --numeric-owner --ignore-failed-read /var/runtime /var/lang"; 31 | 32 | Console.WriteLine($"invokeEvent: {invokeEvent}"); 33 | Console.WriteLine($"context.RemainingTime: {context.RemainingTime}"); 34 | 35 | Console.WriteLine("Parent cmdline:"); 36 | Console.WriteLine(File.ReadAllText("/proc/1/cmdline").Replace("\0", " ")); 37 | 38 | Console.WriteLine("Parent env:"); 39 | RunShell("xargs --null --max-args=1 < /proc/1/environ"); 40 | 41 | Console.WriteLine("This cmdline:"); 42 | Console.WriteLine(File.ReadAllText($"/proc/{Process.GetCurrentProcess().Id}/cmdline").Replace("\0", " ")); 43 | 44 | Console.WriteLine("This env:"); 45 | RunShell($"xargs --null --max-args=1 < /proc/{Process.GetCurrentProcess().Id}/environ"); 46 | 47 | Console.WriteLine($"Current working directory: {Directory.GetCurrentDirectory()}"); 48 | 49 | RunShell(cmd); 50 | 51 | Console.WriteLine("Zipping done! Uploading..."); 52 | 53 | var s3Client = new AmazonS3Client(RegionEndpoint.EUCentral1); 54 | var response = await s3Client.PutObjectAsync(new Amazon.S3.Model.PutObjectRequest 55 | { 56 | BucketName = "docker-lambda", 57 | Key = $"fs/{filename}", 58 | FilePath = $"/tmp/{filename}", 59 | CannedACL = S3CannedACL.PublicRead, 60 | }); 61 | 62 | Console.WriteLine("Uploading done!"); 63 | 64 | return response.HttpStatusCode.ToString(); 65 | } 66 | 67 | private static Process RunShell(string cmd) 68 | { 69 | var escapedArgs = cmd.Replace("\"", "\\\""); 70 | var process = new Process 71 | { 72 | StartInfo = new ProcessStartInfo 73 | { 74 | FileName = "/bin/sh", 75 | Arguments = $"-c \"{escapedArgs}\"", 76 | UseShellExecute = false, 77 | CreateNoWindow = true, 78 | } 79 | }; 80 | process.Start(); 81 | process.WaitForExit(); 82 | return process; 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /dump-fs/dump-dotnet6/dump-dotnet6.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net6.0 5 | dump_dotnet6 6 | true 7 | dump_dotnet6 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /dump-fs/dump-dotnet6/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "6.0.201" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /dump-fs/dump-dotnetcore31/Function.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | 6 | using Amazon.Lambda.Core; 7 | using Amazon; 8 | using Amazon.S3; 9 | using Amazon.S3.Model; 10 | 11 | [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] 12 | 13 | namespace dump_dotnetcore31 14 | { 15 | public class Function 16 | { 17 | public async Task FunctionHandler_x86_64(object invokeEvent, ILambdaContext context) 18 | { 19 | return await FunctionHandler(invokeEvent, context, "x86_64"); 20 | } 21 | 22 | public async Task FunctionHandler_arm64(object invokeEvent, ILambdaContext context) 23 | { 24 | return await FunctionHandler(invokeEvent, context, "arm64"); 25 | } 26 | 27 | public async Task FunctionHandler(object invokeEvent, ILambdaContext context, string arch) 28 | { 29 | string filename = $"dotnetcore3.1-{arch}.tgz"; 30 | string cmd = $"touch /tmp/{filename} && tar -cpzf /tmp/{filename} --numeric-owner --ignore-failed-read /var/runtime /var/lang"; 31 | 32 | Console.WriteLine($"invokeEvent: {invokeEvent}"); 33 | Console.WriteLine($"context.RemainingTime: {context.RemainingTime}"); 34 | 35 | Console.WriteLine("Parent cmdline:"); 36 | Console.WriteLine(File.ReadAllText("/proc/1/cmdline").Replace("\0", " ")); 37 | 38 | Console.WriteLine("Parent env:"); 39 | RunShell("xargs --null --max-args=1 < /proc/1/environ"); 40 | 41 | Console.WriteLine("This cmdline:"); 42 | Console.WriteLine(File.ReadAllText($"/proc/{Process.GetCurrentProcess().Id}/cmdline").Replace("\0", " ")); 43 | 44 | Console.WriteLine("This env:"); 45 | RunShell($"xargs --null --max-args=1 < /proc/{Process.GetCurrentProcess().Id}/environ"); 46 | 47 | Console.WriteLine($"Current working directory: {Directory.GetCurrentDirectory()}"); 48 | 49 | RunShell(cmd); 50 | 51 | Console.WriteLine("Zipping done! Uploading..."); 52 | 53 | var s3Client = new AmazonS3Client(RegionEndpoint.EUCentral1); 54 | var response = await s3Client.PutObjectAsync(new Amazon.S3.Model.PutObjectRequest 55 | { 56 | BucketName = "docker-lambda", 57 | Key = $"fs/{filename}", 58 | FilePath = $"/tmp/{filename}", 59 | CannedACL = S3CannedACL.PublicRead, 60 | }); 61 | 62 | Console.WriteLine("Uploading done!"); 63 | 64 | return response.HttpStatusCode.ToString(); 65 | } 66 | 67 | private static Process RunShell(string cmd) 68 | { 69 | var escapedArgs = cmd.Replace("\"", "\\\""); 70 | var process = new Process 71 | { 72 | StartInfo = new ProcessStartInfo 73 | { 74 | FileName = "/bin/sh", 75 | Arguments = $"-c \"{escapedArgs}\"", 76 | UseShellExecute = false, 77 | CreateNoWindow = true, 78 | } 79 | }; 80 | process.Start(); 81 | process.WaitForExit(); 82 | return process; 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /dump-fs/dump-dotnetcore31/dump-dotnetcore31.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | dump_dotnetcore31 6 | true 7 | dump_dotnetcore31 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /dump-fs/dump-dotnetcore31/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "3.1" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /dump-fs/dump-java11/.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | .gradle 3 | /build/ 4 | /bin/ 5 | /.settings/ 6 | .project 7 | .classpath 8 | 9 | # Package Files 10 | *.jar 11 | *.war 12 | *.ear 13 | 14 | # Serverless directories 15 | .serverless 16 | 17 | !/gradle/wrapper/gradle-wrapper.jar 18 | -------------------------------------------------------------------------------- /dump-fs/dump-java11/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'java' 2 | 3 | sourceCompatibility = '11' 4 | targetCompatibility = '11' 5 | 6 | repositories { 7 | mavenCentral() 8 | } 9 | 10 | dependencies { 11 | implementation ( 12 | 'com.amazonaws:aws-lambda-java-core:1.2.0', 13 | 'com.amazonaws:aws-lambda-java-events:2.2.7', 14 | 'com.amazonaws:aws-java-sdk-s3:1.11.681' 15 | ) 16 | } 17 | 18 | task buildZip(type: Zip) { 19 | from compileJava 20 | from processResources 21 | into('lib') { 22 | from configurations.runtimeClasspath 23 | } 24 | } 25 | 26 | build.dependsOn buildZip 27 | -------------------------------------------------------------------------------- /dump-fs/dump-java11/src/main/java/pl/lupin/lambda/DumpJava11.java: -------------------------------------------------------------------------------- 1 | package pl.lupin.lambda; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.lang.InterruptedException; 6 | import java.lang.management.ManagementFactory; 7 | import java.nio.file.Files; 8 | import java.nio.file.Paths; 9 | import java.util.Map; 10 | import java.util.Scanner; 11 | 12 | import com.amazonaws.services.s3.AmazonS3; 13 | import com.amazonaws.services.s3.AmazonS3ClientBuilder; 14 | import com.amazonaws.services.s3.model.CannedAccessControlList; 15 | import com.amazonaws.services.s3.model.PutObjectRequest; 16 | import com.amazonaws.services.s3.model.PutObjectResult; 17 | import com.amazonaws.services.lambda.runtime.Context; 18 | 19 | public class DumpJava11 { 20 | public PutObjectResult handle(Object input, Context context, String arch) { 21 | String filename = "java11-" + arch + ".tgz"; 22 | String cmd = "touch /tmp/" + filename + " && tar -cpzf /tmp/" + filename + " --numeric-owner --ignore-failed-read /var/runtime /var/lang"; 23 | AmazonS3 s3client = AmazonS3ClientBuilder.standard().withRegion("eu-central-1").build(); 24 | 25 | System.out.println(ManagementFactory.getRuntimeMXBean().getInputArguments().toString()); 26 | System.out.println(System.getProperty("sun.java.command")); 27 | System.out.println(System.getProperty("java.home")); 28 | System.out.println(System.getProperty("java.library.path")); 29 | System.out.println(System.getProperty("java.class.path")); 30 | System.out.println(System.getProperty("user.dir")); 31 | System.out.println(System.getProperty("user.home")); 32 | System.out.println(System.getProperty("user.name")); 33 | System.out.println(new File(".").getAbsolutePath()); 34 | Map env = System.getenv(); 35 | for (String envName : env.keySet()) { 36 | System.out.println(envName + "=" + env.get(envName)); 37 | } 38 | 39 | try { 40 | int pid = Integer.parseInt(new File("/proc/self").getCanonicalFile().getName()); 41 | 42 | System.out.println("Parent cmdline:"); 43 | System.out.println(new String(Files.readAllBytes(Paths.get("/proc/1/cmdline"))).replace("\0", " ")); 44 | 45 | System.out.println("Parent env:"); 46 | runShell("xargs --null --max-args=1 < /proc/1/environ"); 47 | 48 | System.out.println("This cmdline:"); 49 | System.out.println(new String(Files.readAllBytes(Paths.get("/proc/" + pid + "/cmdline"))).replace("\0", " ")); 50 | 51 | System.out.println("This env:"); 52 | runShell("xargs --null --max-args=1 < /proc/" + pid + "/environ"); 53 | 54 | if (runShell(cmd) != 0) { 55 | return null; 56 | } 57 | 58 | System.out.println("Zipping done! Uploading..."); 59 | 60 | return s3client.putObject(new PutObjectRequest("docker-lambda", "fs/" + filename, new File("/tmp/" + filename)) 61 | .withCannedAcl(CannedAccessControlList.PublicRead)); 62 | } catch (Exception e) { 63 | throw new RuntimeException(e); 64 | } 65 | } 66 | 67 | public static int runShell(String cmd) throws IOException, InterruptedException { 68 | Process process = Runtime.getRuntime().exec(new String[] { "sh", "-c", cmd }); 69 | 70 | try (Scanner stdoutScanner = new Scanner(process.getInputStream()); 71 | Scanner stderrScanner = new Scanner(process.getErrorStream())) { 72 | // Echo all stdout first 73 | while (stdoutScanner.hasNextLine()) { 74 | System.out.println(stdoutScanner.nextLine()); 75 | } 76 | // Then echo stderr 77 | while (stderrScanner.hasNextLine()) { 78 | System.err.println(stderrScanner.nextLine()); 79 | } 80 | } 81 | 82 | process.waitFor(); 83 | return process.exitValue(); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /dump-fs/dump-java11/src/main/java/pl/lupin/lambda/DumpJava11_arm64.java: -------------------------------------------------------------------------------- 1 | package pl.lupin.lambda; 2 | 3 | import com.amazonaws.services.lambda.runtime.Context; 4 | import com.amazonaws.services.lambda.runtime.RequestHandler; 5 | import com.amazonaws.services.s3.model.PutObjectResult; 6 | 7 | import pl.lupin.lambda.DumpJava11; 8 | 9 | public class DumpJava11_arm64 implements RequestHandler { 10 | @Override 11 | public PutObjectResult handleRequest(Object input, Context context) { 12 | DumpJava11 dump = new DumpJava11(); 13 | return dump.handle(input, context, "arm64"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /dump-fs/dump-java11/src/main/java/pl/lupin/lambda/DumpJava11_x86_64.java: -------------------------------------------------------------------------------- 1 | package pl.lupin.lambda; 2 | 3 | import com.amazonaws.services.lambda.runtime.Context; 4 | import com.amazonaws.services.lambda.runtime.RequestHandler; 5 | import com.amazonaws.services.s3.model.PutObjectResult; 6 | 7 | import pl.lupin.lambda.DumpJava11; 8 | 9 | public class DumpJava11_x86_64 implements RequestHandler { 10 | @Override 11 | public PutObjectResult handleRequest(Object input, Context context) { 12 | DumpJava11 dump = new DumpJava11(); 13 | return dump.handle(input, context, "x86_64"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /dump-fs/dump-java17/.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | .gradle 3 | /build/ 4 | /bin/ 5 | /.settings/ 6 | .project 7 | .classpath 8 | 9 | # Package Files 10 | *.jar 11 | *.war 12 | *.ear 13 | 14 | # Serverless directories 15 | .serverless 16 | 17 | !/gradle/wrapper/gradle-wrapper.jar 18 | -------------------------------------------------------------------------------- /dump-fs/dump-java17/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'java' 2 | 3 | sourceCompatibility = '17' 4 | targetCompatibility = '17' 5 | 6 | repositories { 7 | mavenCentral() 8 | } 9 | 10 | dependencies { 11 | implementation ( 12 | 'com.amazonaws:aws-lambda-java-core:1.2.0', 13 | 'com.amazonaws:aws-lambda-java-events:2.2.7', 14 | 'com.amazonaws:aws-java-sdk-s3:1.11.681' 15 | ) 16 | } 17 | 18 | task buildZip(type: Zip) { 19 | from compileJava 20 | from processResources 21 | into('lib') { 22 | from configurations.runtimeClasspath 23 | } 24 | } 25 | 26 | build.dependsOn buildZip 27 | -------------------------------------------------------------------------------- /dump-fs/dump-java17/src/main/java/pl/lupin/lambda/DumpJava17_arm64.java: -------------------------------------------------------------------------------- 1 | package pl.lupin.lambda; 2 | 3 | import com.amazonaws.services.lambda.runtime.Context; 4 | import com.amazonaws.services.lambda.runtime.RequestHandler; 5 | import com.amazonaws.services.s3.model.PutObjectResult; 6 | 7 | import pl.lupin.lambda.DumpJava17; 8 | 9 | public class DumpJava17_arm64 implements RequestHandler { 10 | @Override 11 | public PutObjectResult handleRequest(Object input, Context context) { 12 | DumpJava17 dump = new DumpJava17(); 13 | return dump.handle(input, context, "arm64"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /dump-fs/dump-java17/src/main/java/pl/lupin/lambda/DumpJava17_x86_64.java: -------------------------------------------------------------------------------- 1 | package pl.lupin.lambda; 2 | 3 | import com.amazonaws.services.lambda.runtime.Context; 4 | import com.amazonaws.services.lambda.runtime.RequestHandler; 5 | import com.amazonaws.services.s3.model.PutObjectResult; 6 | 7 | import pl.lupin.lambda.DumpJava17; 8 | 9 | public class DumpJava17_x86_64 implements RequestHandler { 10 | @Override 11 | public PutObjectResult handleRequest(Object input, Context context) { 12 | DumpJava17 dump = new DumpJava17(); 13 | return dump.handle(input, context, "x86_64"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /dump-fs/dump-java8.al2/.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | .gradle 3 | /build/ 4 | /bin/ 5 | /.settings/ 6 | .project 7 | .classpath 8 | 9 | # Package Files 10 | *.jar 11 | *.war 12 | *.ear 13 | 14 | # Serverless directories 15 | .serverless 16 | 17 | !/gradle/wrapper/gradle-wrapper.jar 18 | -------------------------------------------------------------------------------- /dump-fs/dump-java8.al2/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'java' 2 | 3 | sourceCompatibility = '1.8' 4 | targetCompatibility = '1.8' 5 | 6 | repositories { 7 | mavenCentral() 8 | } 9 | 10 | dependencies { 11 | implementation ( 12 | 'com.amazonaws:aws-lambda-java-core:1.2.0', 13 | 'com.amazonaws:aws-lambda-java-events:2.2.7', 14 | 'com.amazonaws:aws-java-sdk-s3:1.11.681' 15 | ) 16 | } 17 | 18 | task buildZip(type: Zip) { 19 | from compileJava 20 | from processResources 21 | into('lib') { 22 | from configurations.runtimeClasspath 23 | } 24 | } 25 | 26 | build.dependsOn buildZip 27 | -------------------------------------------------------------------------------- /dump-fs/dump-java8.al2/src/main/java/pl/lupin/lambda/DumpJava8AL2_arm64.java: -------------------------------------------------------------------------------- 1 | package pl.lupin.lambda; 2 | 3 | import com.amazonaws.services.lambda.runtime.Context; 4 | import com.amazonaws.services.lambda.runtime.RequestHandler; 5 | import com.amazonaws.services.s3.model.PutObjectResult; 6 | 7 | import pl.lupin.lambda.DumpJava8AL2; 8 | 9 | public class DumpJava8AL2_arm64 implements RequestHandler { 10 | @Override 11 | public PutObjectResult handleRequest(Object input, Context context) { 12 | DumpJava8AL2 dump = new DumpJava8AL2(); 13 | return dump.handle(input, context, "arm64"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /dump-fs/dump-java8.al2/src/main/java/pl/lupin/lambda/DumpJava8AL2_x86_64.java: -------------------------------------------------------------------------------- 1 | package pl.lupin.lambda; 2 | 3 | import com.amazonaws.services.lambda.runtime.Context; 4 | import com.amazonaws.services.lambda.runtime.RequestHandler; 5 | import com.amazonaws.services.s3.model.PutObjectResult; 6 | 7 | import pl.lupin.lambda.DumpJava8AL2; 8 | 9 | public class DumpJava8AL2_x86_64 implements RequestHandler { 10 | @Override 11 | public PutObjectResult handleRequest(Object input, Context context) { 12 | DumpJava8AL2 dump = new DumpJava8AL2(); 13 | return dump.handle(input, context, "x86_64"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /dump-fs/dump-nodejs12x/handler.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const { execSync } = require('child_process') 3 | const AWS = require('aws-sdk') 4 | const s3 = new AWS.S3() 5 | 6 | module.exports.handler_x86_64 = (async (e, c) => { return handler(e, c, "x86_64") }) 7 | module.exports.handler_arm64 = (async (e, c) => { return handler(e, c, "arm64") }) 8 | 9 | handler = async (event, context, arch) => { 10 | const execOpts = { stdio: 'inherit', maxBuffer: 16 * 1024 * 1024 } 11 | 12 | let filename = `nodejs12.x-${arch}.tgz` 13 | fs.closeSync(fs.openSync(`/tmp/${filename}`, 'w')) 14 | 15 | let cmd = 'tar -cpzf /tmp/' + filename + 16 | ' --numeric-owner --ignore-failed-read /var/runtime /var/lang /var/rapid' 17 | 18 | execSync(cmd, execOpts) 19 | 20 | console.log('Zipping done! Uploading...') 21 | 22 | let data = await s3.upload({ 23 | Bucket: 'docker-lambda', 24 | Key: 'fs/' + filename, 25 | Body: fs.createReadStream('/tmp/' + filename), 26 | ACL: 'public-read', 27 | }).promise() 28 | 29 | console.log('Uploading done!') 30 | 31 | console.log(process.execPath) 32 | console.log(process.execArgv) 33 | console.log(process.argv) 34 | console.log(process.cwd()) 35 | console.log(__filename) 36 | console.log(process.env) 37 | execSync('echo /proc/1/environ; xargs -n 1 -0 < /proc/1/environ', execOpts) 38 | execSync("bash -O extglob -c 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done'", execOpts) 39 | console.log(context) 40 | 41 | return data 42 | } 43 | -------------------------------------------------------------------------------- /dump-fs/dump-nodejs14x/handler.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const { execSync } = require('child_process') 3 | const AWS = require('aws-sdk') 4 | const s3 = new AWS.S3() 5 | 6 | module.exports.handler_x86_64 = (async (e, c) => { return handler(e, c, "x86_64") }) 7 | module.exports.handler_arm64 = (async (e, c) => { return handler(e, c, "arm64") }) 8 | 9 | handler = async (event, context, arch) => { 10 | const execOpts = { stdio: 'inherit', maxBuffer: 16 * 1024 * 1024 } 11 | 12 | let filename = `nodejs14.x-${arch}.tgz` 13 | fs.closeSync(fs.openSync(`/tmp/${filename}`, 'w')) 14 | 15 | let cmd = 'tar -cpzf /tmp/' + filename + 16 | ' --numeric-owner --ignore-failed-read /var/runtime /var/lang /var/rapid' 17 | 18 | execSync(cmd, execOpts) 19 | 20 | console.log('Zipping done! Uploading...') 21 | 22 | let data = await s3.upload({ 23 | Bucket: 'docker-lambda', 24 | Key: 'fs/' + filename, 25 | Body: fs.createReadStream('/tmp/' + filename), 26 | ACL: 'public-read', 27 | }).promise() 28 | 29 | console.log('Uploading done!') 30 | 31 | console.log(process.execPath) 32 | console.log(process.execArgv) 33 | console.log(process.argv) 34 | console.log(process.cwd()) 35 | console.log(__filename) 36 | console.log(process.env) 37 | execSync('echo /proc/1/environ; xargs -n 1 -0 < /proc/1/environ', execOpts) 38 | execSync("bash -O extglob -c 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done'", execOpts) 39 | console.log(context) 40 | 41 | return data 42 | } 43 | -------------------------------------------------------------------------------- /dump-fs/dump-nodejs16x/handler.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const { execSync } = require('child_process') 3 | const AWS = require('aws-sdk') 4 | const s3 = new AWS.S3() 5 | 6 | module.exports.handler_x86_64 = (async (e, c) => { return handler(e, c, "x86_64") }) 7 | module.exports.handler_arm64 = (async (e, c) => { return handler(e, c, "arm64") }) 8 | 9 | handler = async (event, context, arch) => { 10 | const execOpts = { stdio: 'inherit', maxBuffer: 16 * 1024 * 1024 } 11 | 12 | let filename = `nodejs16.x-${arch}.tgz` 13 | fs.closeSync(fs.openSync(`/tmp/${filename}`, 'w')) 14 | 15 | let cmd = 'tar -cpzf /tmp/' + filename + 16 | ' --numeric-owner --ignore-failed-read /var/runtime /var/lang /var/rapid' 17 | 18 | execSync(cmd, execOpts) 19 | 20 | console.log('Zipping done! Uploading...') 21 | 22 | let data = await s3.upload({ 23 | Bucket: 'docker-lambda', 24 | Key: 'fs/' + filename, 25 | Body: fs.createReadStream('/tmp/' + filename), 26 | ACL: 'public-read', 27 | }).promise() 28 | 29 | console.log('Uploading done!') 30 | 31 | console.log(process.execPath) 32 | console.log(process.execArgv) 33 | console.log(process.argv) 34 | console.log(process.cwd()) 35 | console.log(__filename) 36 | console.log(process.env) 37 | execSync('echo /proc/1/environ; xargs -n 1 -0 < /proc/1/environ', execOpts) 38 | execSync("bash -O extglob -c 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done'", execOpts) 39 | console.log(context) 40 | 41 | return data 42 | } 43 | -------------------------------------------------------------------------------- /dump-fs/dump-nodejs18x/handler.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const { execSync } = require('child_process') 3 | const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3") 4 | const s3 = new S3Client({ region: 'eu-central-1' }); 5 | 6 | module.exports.handler_x86_64 = (async (e, c) => { return handler(e, c, "x86_64") }) 7 | module.exports.handler_arm64 = (async (e, c) => { return handler(e, c, "arm64") }) 8 | 9 | handler = async (event, context, arch) => { 10 | const execOpts = { stdio: 'inherit', maxBuffer: 16 * 1024 * 1024 } 11 | 12 | let filename = `nodejs18.x-${arch}.tgz` 13 | fs.closeSync(fs.openSync(`/tmp/${filename}`, 'w')) 14 | 15 | let cmd = 'tar -cpzf /tmp/' + filename + 16 | ' --numeric-owner --ignore-failed-read /var/runtime /var/lang /var/rapid' 17 | 18 | execSync(cmd, execOpts) 19 | 20 | console.log('Zipping done! Uploading...') 21 | 22 | let data = await s3.send(new PutObjectCommand({ 23 | Bucket: 'docker-lambda', 24 | Key: 'fs/' + filename, 25 | Body: fs.createReadStream('/tmp/' + filename), 26 | ACL: 'public-read', 27 | })) 28 | 29 | console.log('Uploading done!') 30 | 31 | console.log(process.execPath) 32 | console.log(process.execArgv) 33 | console.log(process.argv) 34 | console.log(process.cwd()) 35 | console.log(__filename) 36 | console.log(process.env) 37 | execSync('echo /proc/1/environ; xargs -n 1 -0 < /proc/1/environ', execOpts) 38 | execSync("bash -O extglob -c 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done'", execOpts) 39 | console.log(context) 40 | 41 | return data 42 | } 43 | -------------------------------------------------------------------------------- /dump-fs/dump-provided.al2/arm64/go.mod: -------------------------------------------------------------------------------- 1 | module bootstrap 2 | 3 | require ( 4 | github.com/aws/aws-lambda-go v1.19.0 5 | github.com/aws/aws-sdk-go-v2 v0.24.0 6 | ) 7 | 8 | go 1.16 9 | -------------------------------------------------------------------------------- /dump-fs/dump-provided.al2/arm64/main.go: -------------------------------------------------------------------------------- 1 | // docker run --rm -v "$PWD":/go/src/handler mlupin/docker-lambda:build-go1.x sh -c \ 2 | // 'go mod download && go build -tags lambda.norpc -ldflags="-s -w" bootstrap.go' && \ 3 | // zip bootstrap.zip bootstrap 4 | 5 | package main 6 | 7 | import ( 8 | "context" 9 | "fmt" 10 | "io/ioutil" 11 | "log" 12 | "os" 13 | "os/exec" 14 | "strings" 15 | 16 | "github.com/aws/aws-lambda-go/lambda" 17 | "github.com/aws/aws-sdk-go-v2/aws" 18 | "github.com/aws/aws-sdk-go-v2/aws/external" 19 | "github.com/aws/aws-sdk-go-v2/service/s3" 20 | ) 21 | 22 | func handleRequest(ctx context.Context, event interface{}) (*s3.PutObjectResponse, error) { 23 | filename := "provided.al2-arm64.tgz" 24 | 25 | runShell("touch /tmp/" + filename + " && tar -cpzf /tmp/" + filename + " --numeric-owner --ignore-failed-read /var/runtime /var/lang") 26 | 27 | fmt.Println("Zipping done! Uploading...") 28 | 29 | cfg, err := external.LoadDefaultAWSConfig() 30 | if err != nil { 31 | log.Fatal(err) 32 | } 33 | cfg.Region = "eu-central-1" 34 | 35 | file, err := os.Open("/tmp/" + filename) 36 | if err != nil { 37 | log.Fatal(err) 38 | } 39 | 40 | resp, err := s3.New(cfg).PutObjectRequest(&s3.PutObjectInput{ 41 | ACL: s3.ObjectCannedACLPublicRead, 42 | Body: file, 43 | Bucket: aws.String("docker-lambda"), 44 | Key: aws.String("fs/" + filename), 45 | }).Send(context.Background()) 46 | if err != nil { 47 | log.Fatal(err) 48 | } 49 | 50 | fmt.Println("Uploading done!") 51 | 52 | fmt.Println("Parent env:") 53 | runShell("xargs --null --max-args=1 < /proc/1/environ") 54 | 55 | fmt.Println("Parent cmdline:") 56 | content, err := ioutil.ReadFile("/proc/1/cmdline") 57 | fmt.Println(strings.ReplaceAll(string(content), "\x00", " ")) 58 | 59 | fmt.Println("os.Args:") 60 | for _, a := range os.Args { 61 | fmt.Println(a) 62 | } 63 | 64 | fmt.Println("os.Getwd:") 65 | pwd, _ := os.Getwd() 66 | fmt.Println(pwd) 67 | 68 | fmt.Println("os.Environ:") 69 | for _, e := range os.Environ() { 70 | fmt.Println(e) 71 | } 72 | 73 | fmt.Println("ctx:") 74 | fmt.Println(ctx) 75 | 76 | return resp, nil 77 | } 78 | 79 | func runShell(shellCmd string) { 80 | cmd := exec.Command("sh", "-c", shellCmd) 81 | cmd.Stdout = os.Stdout 82 | cmd.Stderr = os.Stderr 83 | cmd.Run() 84 | } 85 | 86 | func main() { 87 | lambda.Start(handleRequest) 88 | } 89 | -------------------------------------------------------------------------------- /dump-fs/dump-provided.al2/x86_64/go.mod: -------------------------------------------------------------------------------- 1 | module dump-provided_al2 2 | 3 | require ( 4 | github.com/aws/aws-lambda-go v1.19.0 5 | github.com/aws/aws-sdk-go-v2 v0.24.0 6 | ) 7 | 8 | go 1.16 9 | -------------------------------------------------------------------------------- /dump-fs/dump-provided.al2/x86_64/main.go: -------------------------------------------------------------------------------- 1 | // docker run --rm -v "$PWD":/go/src/handler mlupin/docker-lambda:build-go1.x sh -c \ 2 | // 'go mod download && go build -tags lambda.norpc -ldflags="-s -w" bootstrap.go' && \ 3 | // zip bootstrap.zip bootstrap 4 | 5 | package main 6 | 7 | import ( 8 | "context" 9 | "fmt" 10 | "io/ioutil" 11 | "log" 12 | "os" 13 | "os/exec" 14 | "strings" 15 | 16 | "github.com/aws/aws-lambda-go/lambda" 17 | "github.com/aws/aws-sdk-go-v2/aws" 18 | "github.com/aws/aws-sdk-go-v2/aws/external" 19 | "github.com/aws/aws-sdk-go-v2/service/s3" 20 | ) 21 | 22 | func handleRequest(ctx context.Context, event interface{}) (*s3.PutObjectResponse, error) { 23 | filename := "provided.al2-x86_64.tgz" 24 | 25 | runShell("touch /tmp/" + filename + " && tar -cpzf /tmp/" + filename + " --numeric-owner --ignore-failed-read /var/runtime /var/lang") 26 | 27 | fmt.Println("Zipping done! Uploading...") 28 | 29 | cfg, err := external.LoadDefaultAWSConfig() 30 | if err != nil { 31 | log.Fatal(err) 32 | } 33 | cfg.Region = "eu-central-1" 34 | 35 | file, err := os.Open("/tmp/" + filename) 36 | if err != nil { 37 | log.Fatal(err) 38 | } 39 | 40 | resp, err := s3.New(cfg).PutObjectRequest(&s3.PutObjectInput{ 41 | ACL: s3.ObjectCannedACLPublicRead, 42 | Body: file, 43 | Bucket: aws.String("docker-lambda"), 44 | Key: aws.String("fs/" + filename), 45 | }).Send(context.Background()) 46 | if err != nil { 47 | log.Fatal(err) 48 | } 49 | 50 | fmt.Println("Uploading done!") 51 | 52 | fmt.Println("Parent env:") 53 | runShell("xargs --null --max-args=1 < /proc/1/environ") 54 | 55 | fmt.Println("Parent cmdline:") 56 | content, err := ioutil.ReadFile("/proc/1/cmdline") 57 | fmt.Println(strings.ReplaceAll(string(content), "\x00", " ")) 58 | 59 | fmt.Println("os.Args:") 60 | for _, a := range os.Args { 61 | fmt.Println(a) 62 | } 63 | 64 | fmt.Println("os.Getwd:") 65 | pwd, _ := os.Getwd() 66 | fmt.Println(pwd) 67 | 68 | fmt.Println("os.Environ:") 69 | for _, e := range os.Environ() { 70 | fmt.Println(e) 71 | } 72 | 73 | fmt.Println("ctx:") 74 | fmt.Println(ctx) 75 | 76 | return resp, nil 77 | } 78 | 79 | func runShell(shellCmd string) { 80 | cmd := exec.Command("sh", "-c", shellCmd) 81 | cmd.Stdout = os.Stdout 82 | cmd.Stderr = os.Stderr 83 | cmd.Run() 84 | } 85 | 86 | func main() { 87 | lambda.Start(handleRequest) 88 | } 89 | -------------------------------------------------------------------------------- /dump-fs/dump-python310/handler.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | 3 | import os 4 | import sys 5 | import subprocess 6 | import json 7 | import boto3 8 | from boto3.s3.transfer import S3Transfer 9 | 10 | TRANSFER = S3Transfer(boto3.client('s3')) 11 | 12 | def lambda_handler_arm64(event, context): 13 | return lambda_handler(event, context, "arm64") 14 | 15 | def lambda_handler_x86_64(event, context): 16 | return lambda_handler(event, context, "x86_64") 17 | 18 | def lambda_handler(event, context, arch): 19 | if 'cmd' in event: 20 | return print(subprocess.check_output(['sh', '-c', event['cmd']]).decode('utf-8')) 21 | 22 | filename = f'python3.10-{arch}.tgz' 23 | 24 | subprocess.call(['touch', f'/tmp/{filename}']) 25 | 26 | subprocess.call(['sh', '-c', f'tar -cpzf /tmp/{filename} --numeric-owner --ignore-failed-read ' + 27 | '/var/runtime /var/lang /var/rapid']) 28 | 29 | print('Zipping done! Uploading...') 30 | 31 | TRANSFER.upload_file(f'/tmp/{filename}', 'docker-lambda', 32 | f'fs/{filename}', extra_args={'ACL': 'public-read'}) 33 | 34 | print('Uploading done!') 35 | 36 | info = {'sys.executable': sys.executable, 37 | 'sys.argv': sys.argv, 38 | 'sys.path': sys.path, 39 | 'os.getcwd': os.getcwd(), 40 | '__file__': __file__, 41 | 'os.environ': {k: str(v) for k, v in os.environ.items()}, 42 | 'context': {k: str(v) for k, v in context.__dict__.items()}, 43 | 'proc environ': subprocess.check_output( 44 | ['sh', '-c', 'echo /proc/1/environ; xargs -n 1 -0 < /proc/1/environ']).decode('utf-8').splitlines(), 45 | 'ps aux': subprocess.check_output( 46 | ['bash', '-O', 'extglob', '-c', 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done']).decode('utf-8').splitlines()} 47 | 48 | print(json.dumps(info, indent=2)) 49 | 50 | return info 51 | -------------------------------------------------------------------------------- /dump-fs/dump-python311/handler.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | 3 | import json 4 | import os 5 | import subprocess 6 | import sys 7 | 8 | import boto3 9 | from boto3.s3.transfer import S3Transfer 10 | 11 | TRANSFER = S3Transfer(boto3.client("s3")) 12 | 13 | 14 | def lambda_handler_arm64(event, context): 15 | return lambda_handler(event, context, "arm64") 16 | 17 | 18 | def lambda_handler_x86_64(event, context): 19 | return lambda_handler(event, context, "x86_64") 20 | 21 | 22 | def lambda_handler(event, context, arch): 23 | if "cmd" in event: 24 | return print(subprocess.check_output(["sh", "-c", event["cmd"]]).decode("utf-8")) 25 | 26 | filename = f"python3.11-{arch}.tgz" 27 | 28 | subprocess.call(["touch", f"/tmp/{filename}"]) 29 | 30 | subprocess.call( 31 | [ 32 | "sh", 33 | "-c", 34 | f"tar -cpzf /tmp/{filename} --numeric-owner --ignore-failed-read " + "/var/runtime /var/lang /var/rapid", 35 | ] 36 | ) 37 | 38 | print("Zipping done! Uploading...") 39 | 40 | TRANSFER.upload_file(f"/tmp/{filename}", "docker-lambda", f"fs/{filename}", extra_args={"ACL": "public-read"}) 41 | 42 | print("Uploading done!") 43 | 44 | info = { 45 | "sys.executable": sys.executable, 46 | "sys.argv": sys.argv, 47 | "sys.path": sys.path, 48 | "os.getcwd": os.getcwd(), 49 | "__file__": __file__, 50 | "os.environ": {k: str(v) for k, v in os.environ.items()}, 51 | "context": {k: str(v) for k, v in context.__dict__.items()}, 52 | "proc environ": subprocess.check_output(["sh", "-c", "echo /proc/1/environ; xargs -n 1 -0 < /proc/1/environ"]) 53 | .decode("utf-8") 54 | .splitlines(), 55 | "ps aux": subprocess.check_output( 56 | [ 57 | "bash", 58 | "-O", 59 | "extglob", 60 | "-c", 61 | "for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done", 62 | ] 63 | ) 64 | .decode("utf-8") 65 | .splitlines(), 66 | } 67 | 68 | print(json.dumps(info, indent=2)) 69 | 70 | return info 71 | -------------------------------------------------------------------------------- /dump-fs/dump-python38/handler.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | 3 | import os 4 | import sys 5 | import subprocess 6 | import json 7 | import boto3 8 | from boto3.s3.transfer import S3Transfer 9 | 10 | TRANSFER = S3Transfer(boto3.client('s3')) 11 | 12 | def lambda_handler_arm64(event, context): 13 | return lambda_handler(event, context, "arm64") 14 | 15 | def lambda_handler_x86_64(event, context): 16 | return lambda_handler(event, context, "x86_64") 17 | 18 | def lambda_handler(event, context, arch): 19 | if 'cmd' in event: 20 | return print(subprocess.check_output(['sh', '-c', event['cmd']]).decode('utf-8')) 21 | 22 | filename = f'python3.8-{arch}.tgz' 23 | 24 | subprocess.call(['touch', f'/tmp/{filename}']) 25 | 26 | subprocess.call(['sh', '-c', f'tar -cpzf /tmp/{filename} --numeric-owner --ignore-failed-read ' + 27 | '/var/runtime /var/lang /var/rapid']) 28 | 29 | print('Zipping done! Uploading...') 30 | 31 | TRANSFER.upload_file(f'/tmp/{filename}', 'docker-lambda', 32 | f'fs/{filename}', extra_args={'ACL': 'public-read'}) 33 | 34 | print('Uploading done!') 35 | 36 | info = {'sys.executable': sys.executable, 37 | 'sys.argv': sys.argv, 38 | 'sys.path': sys.path, 39 | 'os.getcwd': os.getcwd(), 40 | '__file__': __file__, 41 | 'os.environ': {k: str(v) for k, v in os.environ.items()}, 42 | 'context': {k: str(v) for k, v in context.__dict__.items()}, 43 | 'proc environ': subprocess.check_output( 44 | ['sh', '-c', 'echo /proc/1/environ; xargs -n 1 -0 < /proc/1/environ']).decode('utf-8').splitlines(), 45 | 'ps aux': subprocess.check_output( 46 | ['bash', '-O', 'extglob', '-c', 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done']).decode('utf-8').splitlines()} 47 | 48 | print(json.dumps(info, indent=2)) 49 | 50 | return info 51 | -------------------------------------------------------------------------------- /dump-fs/dump-python39/handler.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | 3 | import os 4 | import sys 5 | import subprocess 6 | import json 7 | import boto3 8 | from boto3.s3.transfer import S3Transfer 9 | 10 | TRANSFER = S3Transfer(boto3.client('s3')) 11 | 12 | def lambda_handler_arm64(event, context): 13 | return lambda_handler(event, context, "arm64") 14 | 15 | def lambda_handler_x86_64(event, context): 16 | return lambda_handler(event, context, "x86_64") 17 | 18 | def lambda_handler(event, context, arch): 19 | if 'cmd' in event: 20 | return print(subprocess.check_output(['sh', '-c', event['cmd']]).decode('utf-8')) 21 | 22 | filename = f'python3.9-{arch}.tgz' 23 | 24 | subprocess.call(['touch', f'/tmp/{filename}']) 25 | 26 | subprocess.call(['sh', '-c', f'tar -cpzf /tmp/{filename} --numeric-owner --ignore-failed-read ' + 27 | '/var/runtime /var/lang /var/rapid']) 28 | 29 | print('Zipping done! Uploading...') 30 | 31 | TRANSFER.upload_file(f'/tmp/{filename}', 'docker-lambda', 32 | f'fs/{filename}', extra_args={'ACL': 'public-read'}) 33 | 34 | print('Uploading done!') 35 | 36 | info = {'sys.executable': sys.executable, 37 | 'sys.argv': sys.argv, 38 | 'sys.path': sys.path, 39 | 'os.getcwd': os.getcwd(), 40 | '__file__': __file__, 41 | 'os.environ': {k: str(v) for k, v in os.environ.items()}, 42 | 'context': {k: str(v) for k, v in context.__dict__.items()}, 43 | 'proc environ': subprocess.check_output( 44 | ['sh', '-c', 'echo /proc/1/environ; xargs -n 1 -0 < /proc/1/environ']).decode('utf-8').splitlines(), 45 | 'ps aux': subprocess.check_output( 46 | ['bash', '-O', 'extglob', '-c', 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done']).decode('utf-8').splitlines()} 47 | 48 | print(json.dumps(info, indent=2)) 49 | 50 | return info 51 | -------------------------------------------------------------------------------- /dump-fs/dump-ruby27/handler.rb: -------------------------------------------------------------------------------- 1 | require 'json' 2 | require 'aws-sdk-s3' 3 | 4 | S3_CLIENT = Aws::S3::Client.new({region: "eu-central-1"}) 5 | 6 | def lambda_handler(event, context, arch) 7 | filename = "ruby2.7-#{arch}.tgz" 8 | 9 | puts `touch /tmp/#{filename}` 10 | puts `tar -cpzf /tmp/#{filename} --numeric-owner --ignore-failed-read /var/runtime /var/lang /var/rapid` 11 | 12 | File.open("/tmp/#{filename}", 'rb') do |file| 13 | S3_CLIENT.put_object({ 14 | body: file, 15 | bucket: 'docker-lambda', 16 | key: "fs/#{filename}", 17 | acl: 'public-read', 18 | }) 19 | end 20 | 21 | info = { 22 | 'ENV' => ENV.to_hash, 23 | 'context' => context.instance_variables.each_with_object({}) { |k, h| h[k] = context.instance_variable_get k }, 24 | 'ps aux' => `bash -O extglob -c 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done'`, 25 | 'proc environ' => `xargs -n 1 -0 < /proc/1/environ`, 26 | } 27 | 28 | print JSON.pretty_generate(info) 29 | 30 | return info 31 | end 32 | 33 | 34 | def lambda_handler_x86_64(event:, context:) 35 | return lambda_handler event, context, "x86_64" 36 | end 37 | 38 | def lambda_handler_arm64(event:, context:) 39 | return lambda_handler event, context, "arm64" 40 | end 41 | -------------------------------------------------------------------------------- /dump-fs/dump-ruby32/handler.rb: -------------------------------------------------------------------------------- 1 | require 'json' 2 | require 'aws-sdk-s3' 3 | 4 | S3_CLIENT = Aws::S3::Client.new({region: "eu-central-1"}) 5 | 6 | def lambda_handler(event, context, arch) 7 | filename = "ruby3.2-#{arch}.tgz" 8 | 9 | puts `touch /tmp/#{filename}` 10 | puts `tar -cpzf /tmp/#{filename} --numeric-owner --ignore-failed-read /var/runtime /var/lang /var/rapid` 11 | 12 | File.open("/tmp/#{filename}", 'rb') do |file| 13 | S3_CLIENT.put_object({ 14 | body: file, 15 | bucket: 'docker-lambda', 16 | key: "fs/#{filename}", 17 | acl: 'public-read', 18 | }) 19 | end 20 | 21 | info = { 22 | 'ENV' => ENV.to_hash, 23 | 'context' => context.instance_variables.each_with_object({}) { |k, h| h[k] = context.instance_variable_get k }, 24 | 'ps aux' => `bash -O extglob -c 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done'`, 25 | 'proc environ' => `xargs -n 1 -0 < /proc/1/environ`, 26 | } 27 | 28 | print JSON.pretty_generate(info) 29 | 30 | return info 31 | end 32 | 33 | 34 | def lambda_handler_x86_64(event:, context:) 35 | return lambda_handler event, context, "x86_64" 36 | end 37 | 38 | def lambda_handler_arm64(event:, context:) 39 | return lambda_handler event, context, "arm64" 40 | end 41 | -------------------------------------------------------------------------------- /dump-fs/layer-tar-arm64.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mLupine/docker-lambda/024d9875942d6ab8b7f539bf989023368b6b128a/dump-fs/layer-tar-arm64.zip -------------------------------------------------------------------------------- /dump-fs/layer-tar-x86_64.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mLupine/docker-lambda/024d9875942d6ab8b7f539bf989023368b6b128a/dump-fs/layer-tar-x86_64.zip -------------------------------------------------------------------------------- /examples/docker-file/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:nodejs8.10 2 | 3 | ENV AWS_LAMBDA_FUNCTION_NAME=docker-build \ 4 | AWS_LAMBDA_FUNCTION_VERSION=2 \ 5 | AWS_LAMBDA_FUNCTION_MEMORY_SIZE=384 \ 6 | AWS_LAMBDA_FUNCTION_TIMEOUT=60 \ 7 | AWS_REGION=us-east-1 8 | 9 | COPY . . 10 | 11 | # If we want to match permissions in /var/task exactly... 12 | USER root 13 | RUN chown -R slicer:497 . 14 | USER sbx_user1051 15 | -------------------------------------------------------------------------------- /examples/docker-file/index.js: -------------------------------------------------------------------------------- 1 | var execSync = require('child_process').execSync 2 | 3 | // Intended to show that a built image will have the correct permissions in /var/task 4 | // docker build -t build-test . && docker run --rm build-test 5 | 6 | exports.handler = function(event, context, cb) { 7 | 8 | console.log(process.execPath) 9 | console.log(process.execArgv) 10 | console.log(process.argv) 11 | console.log(process.cwd()) 12 | console.log(process.mainModule.filename) 13 | console.log(__filename) 14 | console.log(process.env) 15 | console.log(process.getuid()) 16 | console.log(process.getgid()) 17 | console.log(process.geteuid()) 18 | console.log(process.getegid()) 19 | console.log(process.getgroups()) 20 | console.log(process.umask()) 21 | 22 | console.log(event) 23 | 24 | console.log(context) 25 | 26 | context.callbackWaitsForEmptyEventLoop = false 27 | 28 | console.log(context.getRemainingTimeInMillis()) 29 | 30 | console.log(execSync('ls -l /var/task', {encoding: 'utf8'})) 31 | 32 | cb() 33 | } 34 | 35 | 36 | -------------------------------------------------------------------------------- /examples/docker-file/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docker-build", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "engines" : { 6 | "node" : ">=0.11.12" 7 | }, 8 | "scripts": { 9 | "test": "docker build -t build-test . && docker run --rm build-test" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /examples/dotnet6/Function.cs: -------------------------------------------------------------------------------- 1 | // Compile with: 2 | // docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:build-dotnet6 dotnet publish -c Release -o pub 3 | 4 | // Run with: 5 | // docker run --rm -v "$PWD"/pub:/var/task mlupin/docker-lambda:dotnet6 test::test.Function::FunctionHandler '{"some": "event"}' 6 | 7 | using System; 8 | using System.Collections; 9 | using Amazon.Lambda.Core; 10 | 11 | [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] 12 | 13 | namespace test 14 | { 15 | public class Function 16 | { 17 | public string FunctionHandler(object inputEvent, ILambdaContext context) 18 | { 19 | Console.WriteLine($"inputEvent: {inputEvent}"); 20 | Console.WriteLine($"RemainingTime: {context.RemainingTime}"); 21 | 22 | foreach (DictionaryEntry kv in Environment.GetEnvironmentVariables()) 23 | { 24 | Console.WriteLine($"{kv.Key}={kv.Value}"); 25 | } 26 | 27 | return "Hello World!"; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /examples/dotnet6/README.md: -------------------------------------------------------------------------------- 1 | # .NET 6.0 docker-lambda example 2 | 3 | ```sh 4 | # Will place the compiled code in `./pub` 5 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:build-dotnet6 dotnet publish -c Release -o pub 6 | 7 | # Then you can run using that as the task directory 8 | docker run --rm -v "$PWD"/pub:/var/task mlupin/docker-lambda:dotnet6 test::test.Function::FunctionHandler '{"some": "event"}' 9 | ``` 10 | -------------------------------------------------------------------------------- /examples/dotnet6/test.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net6.0 5 | true 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /examples/dotnet6/test.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "test", "test.csproj", "{0A83D120-2336-4F30-86F1-DC045C3C9B90}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Any CPU = Debug|Any CPU 9 | Release|Any CPU = Release|Any CPU 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {0A83D120-2336-4F30-86F1-DC045C3C9B90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 13 | {0A83D120-2336-4F30-86F1-DC045C3C9B90}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {0A83D120-2336-4F30-86F1-DC045C3C9B90}.Release|Any CPU.ActiveCfg = Release|Any CPU 15 | {0A83D120-2336-4F30-86F1-DC045C3C9B90}.Release|Any CPU.Build.0 = Release|Any CPU 16 | EndGlobalSection 17 | EndGlobal 18 | -------------------------------------------------------------------------------- /examples/dotnetcore3.1/Function.cs: -------------------------------------------------------------------------------- 1 | // Compile with: 2 | // docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:build-dotnetcore3.1 dotnet publish -c Release -o pub 3 | 4 | // Run with: 5 | // docker run --rm -v "$PWD"/pub:/var/task mlupin/docker-lambda:dotnetcore3.1 test::test.Function::FunctionHandler '{"some": "event"}' 6 | 7 | using System; 8 | using System.Collections; 9 | using Amazon.Lambda.Core; 10 | 11 | [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] 12 | 13 | namespace test 14 | { 15 | public class Function 16 | { 17 | public string FunctionHandler(object inputEvent, ILambdaContext context) 18 | { 19 | Console.WriteLine($"inputEvent: {inputEvent}"); 20 | Console.WriteLine($"RemainingTime: {context.RemainingTime}"); 21 | 22 | foreach (DictionaryEntry kv in Environment.GetEnvironmentVariables()) 23 | { 24 | Console.WriteLine($"{kv.Key}={kv.Value}"); 25 | } 26 | 27 | return "Hello World!"; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /examples/dotnetcore3.1/README.md: -------------------------------------------------------------------------------- 1 | # .NET Core 3.1 docker-lambda example 2 | 3 | ```sh 4 | # Will place the compiled code in `./pub` 5 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:build-dotnetcore3.1 dotnet publish -c Release -o pub 6 | 7 | # Then you can run using that as the task directory 8 | docker run --rm -v "$PWD"/pub:/var/task mlupin/docker-lambda:dotnetcore3.1 test::test.Function::FunctionHandler '{"some": "event"}' 9 | ``` 10 | -------------------------------------------------------------------------------- /examples/dotnetcore3.1/test.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | true 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /examples/dotnetcore3.1/test.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "test", "test.csproj", "{0A83D120-2336-4F30-86F1-DC045C3C9B90}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Any CPU = Debug|Any CPU 9 | Release|Any CPU = Release|Any CPU 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {0A83D120-2336-4F30-86F1-DC045C3C9B90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 13 | {0A83D120-2336-4F30-86F1-DC045C3C9B90}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {0A83D120-2336-4F30-86F1-DC045C3C9B90}.Release|Any CPU.ActiveCfg = Release|Any CPU 15 | {0A83D120-2336-4F30-86F1-DC045C3C9B90}.Release|Any CPU.Build.0 = Release|Any CPU 16 | EndGlobalSection 17 | EndGlobal 18 | -------------------------------------------------------------------------------- /examples/go1.x/go.mod: -------------------------------------------------------------------------------- 1 | module handler 2 | 3 | require github.com/aws/aws-lambda-go v1.13.3 4 | 5 | go 1.15 6 | -------------------------------------------------------------------------------- /examples/go1.x/go.sum: -------------------------------------------------------------------------------- 1 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 2 | github.com/aws/aws-lambda-go v1.13.3 h1:SuCy7H3NLyp+1Mrfp+m80jcbi9KYWAs9/BXwppwRDzY= 3 | github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= 4 | github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= 5 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 6 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 7 | github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 8 | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= 9 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 10 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 11 | github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= 12 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 13 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 14 | -------------------------------------------------------------------------------- /examples/go1.x/handler.go: -------------------------------------------------------------------------------- 1 | // Compile with: 2 | // docker run --rm -v "$PWD":/go/src/handler mlupin/docker-lambda:build-go1.x sh -c 'go mod download && go build handler.go' 3 | 4 | // Run with: 5 | // docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:go1.x handler '{"Records": []}' 6 | 7 | package main 8 | 9 | import ( 10 | "context" 11 | "fmt" 12 | 13 | "github.com/aws/aws-lambda-go/events" 14 | "github.com/aws/aws-lambda-go/lambda" 15 | ) 16 | 17 | func handleRequest(ctx context.Context, event events.S3Event) (string, error) { 18 | fmt.Println(ctx) 19 | 20 | fmt.Println(event) 21 | 22 | return "Hello World!", nil 23 | } 24 | 25 | func main() { 26 | lambda.Start(handleRequest) 27 | } 28 | -------------------------------------------------------------------------------- /examples/java/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /examples/java/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | example-handler 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.buildship.core.gradleprojectbuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.buildship.core.gradleprojectnature 22 | 23 | 24 | 25 | 1599680497045 26 | 27 | 30 28 | 29 | org.eclipse.core.resources.regexFilterMatcher 30 | node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /examples/java/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | arguments= 2 | auto.sync=false 3 | build.scans.enabled=false 4 | connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(6.3)) 5 | connection.project.dir= 6 | eclipse.preferences.version=1 7 | gradle.user.home= 8 | java.home= 9 | jvm.arguments= 10 | offline.mode=false 11 | override.workspace.settings=true 12 | show.console.view=true 13 | show.executions.view=true 14 | -------------------------------------------------------------------------------- /examples/java/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//src/main/java=UTF-8 3 | -------------------------------------------------------------------------------- /examples/java/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 3 | org.eclipse.jdt.core.compiler.compliance=1.8 4 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled 5 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 6 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore 7 | org.eclipse.jdt.core.compiler.release=disabled 8 | org.eclipse.jdt.core.compiler.source=1.8 9 | -------------------------------------------------------------------------------- /examples/java/README.md: -------------------------------------------------------------------------------- 1 | # Java 8 docker-lambda example 2 | 3 | Run with: 4 | 5 | ```sh 6 | # Will place the compiled code in `./build/docker` 7 | docker run --rm -v "$PWD":/app -w /app gradle:6.0 gradle build 8 | 9 | # Then you can run using that directory as the task directory 10 | docker run --rm -v "$PWD/build/docker":/var/task mlupin/docker-lambda:java8.al2 pl.lupin.lambda.ExampleHandler '{"some": "event"}' 11 | 12 | # OR 13 | docker run --rm -v "$PWD/build/docker":/var/task mlupin/docker-lambda:java11 pl.lupin.lambda.ExampleHandler '{"some": "event"}' 14 | ``` 15 | -------------------------------------------------------------------------------- /examples/java/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'java' 2 | 3 | sourceCompatibility = '1.8' 4 | targetCompatibility = '1.8' 5 | 6 | repositories { 7 | mavenCentral() 8 | } 9 | 10 | dependencies { 11 | implementation ( 12 | 'com.amazonaws:aws-lambda-java-core:1.2.0', 13 | 'com.amazonaws:aws-lambda-java-events:2.2.7' 14 | ) 15 | } 16 | 17 | task buildZip(type: Zip) { 18 | from compileJava 19 | from processResources 20 | into('lib') { 21 | from configurations.runtimeClasspath 22 | } 23 | } 24 | 25 | task buildDocker(type: Copy) { 26 | from compileJava 27 | from processResources 28 | into('lib') { 29 | from configurations.runtimeClasspath 30 | } 31 | into 'build/docker' 32 | } 33 | 34 | build.dependsOn buildDocker 35 | -------------------------------------------------------------------------------- /examples/java/src/main/java/pl/lupin/lambda/ExampleHandler.java: -------------------------------------------------------------------------------- 1 | // Run with: 2 | // docker run --rm -v "$PWD/build/docker":/var/task mlupin/docker-lambda:java8 pl.lupin.lambda.ExampleHandler 3 | 4 | package pl.lupin.lambda; 5 | 6 | import java.io.File; 7 | import java.lang.management.ManagementFactory; 8 | import java.util.Map; 9 | 10 | import com.amazonaws.services.lambda.runtime.Context; 11 | import com.amazonaws.services.lambda.runtime.LambdaLogger; 12 | import com.amazonaws.services.lambda.runtime.RequestHandler; 13 | 14 | public class ExampleHandler implements RequestHandler { 15 | 16 | @Override 17 | public String handleRequest(Object input, Context context) { 18 | // throw new RuntimeException("whatever"); 19 | LambdaLogger logger = context.getLogger(); 20 | logger.log(ManagementFactory.getRuntimeMXBean().getInputArguments().toString() + "\n"); 21 | logger.log(System.getProperty("sun.java.command") + "\n"); 22 | logger.log(System.getProperty("java.home") + "\n"); 23 | logger.log(System.getProperty("java.library.path") + "\n"); 24 | logger.log(System.getProperty("java.class.path") + "\n"); 25 | logger.log(System.getProperty("user.dir") + "\n"); 26 | logger.log(System.getProperty("user.home") + "\n"); 27 | logger.log(System.getProperty("user.name") + "\n"); 28 | logger.log(new File(".").getAbsolutePath() + "\n"); 29 | Map env = System.getenv(); 30 | for (String envName : env.keySet()) { 31 | logger.log(envName + "=" + env.get(envName) + "\n"); 32 | } 33 | logger.log(context.getAwsRequestId() + "\n"); 34 | logger.log(context.getFunctionName() + "\n"); 35 | logger.log(context.getFunctionVersion() + "\n"); 36 | logger.log(context.getInvokedFunctionArn() + "\n"); 37 | logger.log(context.getLogGroupName() + "\n"); 38 | logger.log(context.getLogStreamName() + "\n"); 39 | if (context.getIdentity() != null) { 40 | logger.log(context.getIdentity().getIdentityId() + "\n"); 41 | logger.log(context.getIdentity().getIdentityPoolId() + "\n"); 42 | } 43 | logger.log(context.getClientContext() + "\n"); 44 | logger.log(context.getMemoryLimitInMB() + "\n"); 45 | logger.log(context.getRemainingTimeInMillis() + "\n"); 46 | logger.log(input + "\n"); 47 | return "Hello World!"; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /examples/nodejs-native-module/index.js: -------------------------------------------------------------------------------- 1 | var bcrypt = require('bcrypt') 2 | 3 | // Hashed password for "lamda-docker" 4 | var HASHED_PASS = '$2a$10$w9.BRCsnWXv5f.eUGD2fieT.wfLV9.rSJFC/2bzz3sahJdCLaYs0K' 5 | 6 | exports.handler = function(event, context, cb) { 7 | console.log('hello?') 8 | bcrypt.compare(event.password, HASHED_PASS, function(err, res) { 9 | cb(err, res ? 'Matches!' : 'NopeNopeNope') 10 | }) 11 | } 12 | 13 | // Just to test this locally: 14 | if (require.main === module) { 15 | exports.handler({password: 'lambda-docker'}, {}, console.log) 16 | exports.handler({password: 'lambda-mocker'}, {}, console.log) 17 | } 18 | -------------------------------------------------------------------------------- /examples/nodejs-native-module/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "module-native", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "build": "docker run --rm -v \"$PWD\":/var/task mlupin/docker-lambda:nodejs12.x-build npm rebuild --unsafe-perm --build-from-source", 7 | "test": "node test.js" 8 | }, 9 | "dependencies": { 10 | "bcrypt": "^5.0.0" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/nodejs-native-module/test.js: -------------------------------------------------------------------------------- 1 | var dockerLambda = require('../..') 2 | 3 | var match = dockerLambda({ event: { password: 'lambda-docker' }, dockerImage: 'mlupin/docker-lambda:nodejs12.x' }) 4 | 5 | console.log(match === 'Matches!' ? 'Match Passed' : 'Match Failed: ' + match) 6 | 7 | var nonMatch = dockerLambda({ event: { password: 'lambda-mocker' }, dockerImage: 'mlupin/docker-lambda:nodejs12.x' }) 8 | 9 | console.log(nonMatch === 'NopeNopeNope' ? 'Non-Match Passed' : 'Non-Match Failed: ' + nonMatch) 10 | -------------------------------------------------------------------------------- /examples/nodejs/index.js: -------------------------------------------------------------------------------- 1 | // Just a test lambda, run with: 2 | // docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:nodejs8.10 3 | 4 | exports.handler = async (event, context) => { 5 | console.log(process.execPath) 6 | console.log(process.execArgv) 7 | console.log(process.argv) 8 | console.log(process.cwd()) 9 | console.log(process.mainModule.filename) 10 | console.log(__filename) 11 | console.log(process.env) 12 | console.log(process.getuid()) 13 | console.log(process.getgid()) 14 | console.log(process.geteuid()) 15 | console.log(process.getegid()) 16 | console.log(process.getgroups()) 17 | console.log(process.umask()) 18 | 19 | console.log(event) 20 | 21 | console.log(context) 22 | 23 | context.callbackWaitsForEmptyEventLoop = false 24 | 25 | console.log(context.getRemainingTimeInMillis()) 26 | } 27 | -------------------------------------------------------------------------------- /examples/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docker-run", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "test": "docker run --rm -v \"$PWD\":/var/task mlupin/docker-lambda:nodejs8.10 index.handler '{\"some\": \"event\"}'" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /examples/post.lua: -------------------------------------------------------------------------------- 1 | -- Run with: 2 | -- wrk -s post.lua 'http://localhost:9001/2015-03-31/functions/myfunction/invocations' 3 | wrk.method = "POST" 4 | wrk.body = "{}" 5 | wrk.headers["Content-Type"] = "application/json" 6 | -------------------------------------------------------------------------------- /examples/provided.al2/bootstrap.go: -------------------------------------------------------------------------------- 1 | // Compile with: 2 | // docker run --rm -v "$PWD":/go/src/handler mlupin/docker-lambda:build-go1.x sh -c 'go mod download && go build -tags lambda.norpc bootstrap.go' 3 | 4 | // Run with: 5 | // docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:provided.al2 handler '{"Records": []}' 6 | 7 | package main 8 | 9 | import ( 10 | "context" 11 | "fmt" 12 | 13 | "github.com/aws/aws-lambda-go/events" 14 | "github.com/aws/aws-lambda-go/lambda" 15 | ) 16 | 17 | func handleRequest(ctx context.Context, event events.S3Event) (string, error) { 18 | fmt.Println(ctx) 19 | 20 | fmt.Println(event) 21 | 22 | return "Hello World!", nil 23 | } 24 | 25 | func main() { 26 | lambda.Start(handleRequest) 27 | } 28 | -------------------------------------------------------------------------------- /examples/provided.al2/go.mod: -------------------------------------------------------------------------------- 1 | module bootstrap 2 | 3 | require ( 4 | github.com/aws/aws-lambda-go v1.19.0 5 | github.com/aws/aws-sdk-go-v2 v0.24.0 6 | ) 7 | 8 | go 1.15 9 | -------------------------------------------------------------------------------- /examples/provided.al2/go.sum: -------------------------------------------------------------------------------- 1 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 2 | github.com/aws/aws-lambda-go v1.19.0 h1:Cn28zA8Mic4NpR7p4IlaEW2srI+U3+I7tRqjFMpt/fs= 3 | github.com/aws/aws-lambda-go v1.19.0/go.mod h1:jJmlefzPfGnckuHdXX7/80O3BvUUi12XOkbv4w9SGLU= 4 | github.com/aws/aws-sdk-go-v2 v0.24.0/go.mod h1:2LhT7UgHOXK3UXONKI5OMgIyoQL6zTAw/jwIeX6yqzw= 5 | github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= 6 | github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= 7 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 8 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 9 | github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= 10 | github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 11 | github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= 12 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 13 | github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 14 | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= 15 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 16 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 17 | github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 18 | github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= 19 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 20 | golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 21 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 22 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 23 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 24 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 25 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 26 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 27 | gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 28 | -------------------------------------------------------------------------------- /examples/python/lambda_function.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import os 3 | import sys 4 | import subprocess 5 | 6 | # Just a test lambda, run with: 7 | # docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:python2.7 8 | # OR 9 | # docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:python3.6 10 | # OR 11 | # docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:python3.7 lambda_function.lambda_handler 12 | 13 | def lambda_handler(event, context): 14 | context.log('Hello!') 15 | context.log('Hmmm, does not add newlines in 3.7?') 16 | context.log('\n') 17 | 18 | print(sys.executable) 19 | print(sys.argv) 20 | print(os.getcwd()) 21 | print(__file__) 22 | print(os.environ) 23 | print(context.__dict__) 24 | 25 | return { 26 | "executable": str(sys.executable), 27 | "sys.argv": str(sys.argv), 28 | "os.getcwd": str(os.getcwd()), 29 | "__file__": str(__file__), 30 | "os.environ": str(os.environ), 31 | "context.__dict__": str(context.__dict__), 32 | "event": event 33 | } 34 | -------------------------------------------------------------------------------- /examples/ruby/lambda_function.rb: -------------------------------------------------------------------------------- 1 | require 'pp' 2 | 3 | # docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:ruby2.5 lambda_function.lambda_handler 4 | # docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:ruby2.7 lambda_function.lambda_handler 5 | 6 | def lambda_handler(event:, context:) 7 | info = { 8 | 'event' => event, 9 | 'ENV' => ENV.to_hash, 10 | 'context' => context.instance_variables.each_with_object({}) { |k, h| h[k] = context.instance_variable_get k }, 11 | 'ps aux' => `bash -O extglob -c 'for cmd in /proc/+([0-9])/cmdline; do echo $cmd; xargs -n 1 -0 < $cmd; done'`, 12 | 'proc environ' => `xargs -n 1 -0 < /proc/1/environ`, 13 | } 14 | 15 | pp info 16 | 17 | return info 18 | end 19 | -------------------------------------------------------------------------------- /examples/terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mLupine/docker-lambda/024d9875942d6ab8b7f539bf989023368b6b128a/examples/terminal.png -------------------------------------------------------------------------------- /examples/test-all.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export EXAMPLES_DIR=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 6 | 7 | cd ${EXAMPLES_DIR}/nodejs 8 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:nodejs12.x index.handler 9 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:nodejs14.x index.handler 10 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:nodejs16.x index.handler 11 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:nodejs18.x index.handler 12 | 13 | cd ${EXAMPLES_DIR}/nodejs-native-module 14 | npm install 15 | npm run build 16 | npm test 17 | 18 | cd ${EXAMPLES_DIR}/python 19 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:python3.8 lambda_function.lambda_handler 20 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:python3.9 lambda_function.lambda_handler 21 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:python3.10 lambda_function.lambda_handler 22 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:python3.11 lambda_function.lambda_handler 23 | 24 | cd ${EXAMPLES_DIR}/python 25 | docker run --rm -it mlupin/docker-lambda:python3.8-build pip install marisa-trie 26 | docker run --rm -it mlupin/docker-lambda:python3.9-build pip install marisa-trie 27 | docker run --rm -it mlupin/docker-lambda:python3.10-build pip install marisa-trie 28 | 29 | cd ${EXAMPLES_DIR}/ruby 30 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:ruby2.7 lambda_function.lambda_handler 31 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:ruby3.2 lambda_function.lambda_handler 32 | 33 | cd ${EXAMPLES_DIR}/java 34 | docker run --rm -v "$PWD":/app -w /app mlupin/docker-lambda:java8.al2-build gradle build 35 | docker run --rm -v "$PWD/build/docker":/var/task mlupin/docker-lambda:java8.al2 pl.lupin.lambda.ExampleHandler '{"some": "event"}' 36 | docker run --rm -v "$PWD/build/docker":/var/task mlupin/docker-lambda:java11 pl.lupin.lambda.ExampleHandler '{"some": "event"}' 37 | docker run --rm -v "$PWD/build/docker":/var/task mlupin/docker-lambda:java17 pl.lupin.lambda.ExampleHandler '{"some": "event"}' 38 | 39 | cd ${EXAMPLES_DIR}/dotnetcore3.1 40 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:dotnetcore3.1-build dotnet publish -c Release -o pub 41 | docker run --rm -v "$PWD"/pub:/var/task mlupin/docker-lambda:dotnetcore3.1 test::test.Function::FunctionHandler '{"some": "event"}' 42 | 43 | cd ${EXAMPLES_DIR}/dotnet6 44 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:dotnet6-build dotnet publish -c Release -o pub 45 | docker run --rm -v "$PWD"/pub:/var/task mlupin/docker-lambda:dotnet6 test::test.Function::FunctionHandler '{"some": "event"}' 46 | 47 | cd ${EXAMPLES_DIR}/provided.al2 48 | docker run --rm -v "$PWD":/go -w /go golang:1 sh -c 'unset GOPATH && go mod download && go build -tags lambda.norpc bootstrap.go' 49 | docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:provided.al2 handler '{"Records": []}' 50 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var spawnSync = require('child_process').spawnSync 2 | 3 | var ENV_VARS = [ 4 | 'AWS_REGION', 5 | 'AWS_DEFAULT_REGION', 6 | 'AWS_ACCOUNT_ID', 7 | 'AWS_ACCESS_KEY_ID', 8 | 'AWS_SECRET_ACCESS_KEY', 9 | 'AWS_SESSION_TOKEN', 10 | 'AWS_LAMBDA_FUNCTION_NAME', 11 | 'AWS_LAMBDA_FUNCTION_VERSION', 12 | 'AWS_LAMBDA_FUNCTION_MEMORY_SIZE', 13 | 'AWS_LAMBDA_FUNCTION_TIMEOUT', 14 | 'AWS_LAMBDA_FUNCTION_HANDLER', 15 | 'AWS_LAMBDA_EVENT_BODY', 16 | 'DOCKER_LAMBDA_USE_STDIN', 17 | ] 18 | var ENV_ARGS = [].concat.apply([], ENV_VARS.map(function (x) { return ['-e', x] })) 19 | 20 | // Will spawn `docker run` synchronously and return stdout 21 | module.exports = function runSync(options) { 22 | options = options || {} 23 | var dockerImage = options.dockerImage || 'mlupin/docker-lambda:nodejs14x' 24 | var handler = options.handler || 'index.handler' 25 | var event = options.event || {} 26 | var taskDir = options.taskDir == null ? process.cwd() : options.taskDir 27 | var cleanUp = options.cleanUp == null ? true : options.cleanUp 28 | var addEnvVars = options.addEnvVars || false 29 | var dockerArgs = options.dockerArgs || [] 30 | var spawnOptions = options.spawnOptions || { encoding: 'utf8' } 31 | var returnSpawnResult = options.returnSpawnResult || false 32 | 33 | var args = ['run'] 34 | .concat(taskDir ? ['-v', taskDir + ':/var/task'] : []) 35 | .concat(cleanUp ? ['--rm'] : []) 36 | .concat(addEnvVars ? ENV_ARGS : []) 37 | .concat(dockerArgs) 38 | .concat([dockerImage, handler, JSON.stringify(event)]) 39 | 40 | var spawnResult = spawnSync('docker', args, spawnOptions) 41 | 42 | if (returnSpawnResult) { 43 | return spawnResult 44 | } 45 | 46 | if (spawnResult.error || spawnResult.status !== 0) { 47 | var err = spawnResult.error 48 | if (!err) { 49 | err = new Error(spawnResult.stdout || spawnResult.stderr) 50 | err.code = spawnResult.status 51 | err.stdout = spawnResult.stdout 52 | err.stderr = spawnResult.stderr 53 | } 54 | throw err 55 | } 56 | 57 | // If stdio is inherited, stdout/stderr will be null 58 | if (spawnResult.stdout == null) return null 59 | 60 | var stdout = spawnResult.stdout.trim().split('\n') 61 | try { 62 | return JSON.parse(stdout[stdout.length - 1]) 63 | } catch (err) { 64 | // This should return undefined and not null to indicate that either the 65 | // Lambda function had not output or the output could not be parsed. Both 66 | // cases should be rare and are most likely the result of an issue with the 67 | // Lambda function. 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docker-lambda", 3 | "version": "0.15.3", 4 | "description": "A Docker image and test runner that (very closely) mimics the live AWS Lambda environment", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node test.js" 8 | }, 9 | "directories": { 10 | "example": "examples" 11 | }, 12 | "repository": "mlupine/docker-lambda", 13 | "author": "Maciej Wilczyński ", 14 | "license": "MIT", 15 | "engines": { 16 | "node": ">=0.11.12" 17 | }, 18 | "devDependencies": { 19 | "should": "^8.4.0" 20 | }, 21 | "dependencies": { 22 | "serverless": "^3.33.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /runtimes/build-all-images.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | export DIR=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 5 | 6 | export ARCH="${1-}" 7 | 8 | if [[ "$ARCH" != "x86_64" && "$ARCH" != "arm64" ]]; then 9 | echo "Usage: ./build-all-images.sh x86_64|arm64" 10 | exit 1 11 | fi 12 | 13 | for runtime in $($DIR/get-all-runtimes.sh | grep provided && $DIR/get-all-runtimes.sh | grep -v provided); do 14 | pushd "${DIR}/${runtime}-${ARCH}" 2>&1 >/dev/null 15 | for subdir in run build; do 16 | pushd "$subdir" 2>&1 >/dev/null 17 | echo "Starting ${runtime}-${ARCH}/${subdir}" 18 | echo "Building…" 19 | ./build.sh 20 | echo "Publishing…" 21 | ./publish.sh 22 | popd 2>&1 >/dev/null 23 | done 24 | popd 2>&1 >/dev/null 25 | done 26 | 27 | echo "All done!" 28 | -------------------------------------------------------------------------------- /runtimes/create-ghcr-images.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | export DIR=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 5 | 6 | for runtime in $($DIR/get-all-runtimes.sh); do 7 | image="mlupin/docker-lambda:${runtime}" 8 | ghcr_image="ghcr.io/mlupine/docker-lambda:${runtime}" 9 | 10 | for arch in x86_64 arm64; do 11 | docker tag ${image}-${arch} ${ghcr_image}-${arch} 12 | docker tag ${image}-build-${arch} ${ghcr_image}-build-${arch} 13 | docker push ${ghcr_image}-${arch} 14 | docker push ${ghcr_image}-build-${arch} 15 | done 16 | 17 | docker manifest rm $ghcr_image || true 18 | docker manifest create --insecure $ghcr_image \ 19 | --amend ${ghcr_image}-x86_64 \ 20 | --amend ${ghcr_image}-arm64 21 | 22 | docker manifest rm ${ghcr_image}-build || true 23 | docker manifest create --insecure ${ghcr_image}-build \ 24 | --amend ${ghcr_image}-build-x86_64 \ 25 | --amend ${ghcr_image}-build-arm64 26 | 27 | docker manifest push --insecure ${ghcr_image} 28 | docker manifest push --insecure ${ghcr_image}-build 29 | done 30 | -------------------------------------------------------------------------------- /runtimes/dotnet6-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:dotnet6-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | # Run: docker run --rm --entrypoint dotnet mlupin/docker-lambda:dotnet6 --info 6 | # Check https://dotnet.microsoft.com/download/dotnet-core/6.0 for versions 7 | ENV DOTNET_ROOT=/var/lang/bin 8 | ENV PATH=/root/.dotnet/tools:$DOTNET_ROOT:$PATH \ 9 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 10 | AWS_EXECUTION_ENV=AWS_Lambda_dotnet6 \ 11 | AWS_EXECUTION_ARCH=arm64 \ 12 | DOTNET_SDK_VERSION=6.0.201 \ 13 | DOTNET_CLI_TELEMETRY_OPTOUT=1 \ 14 | NUGET_XMLDOC_MODE=skip 15 | 16 | COPY --from=0 /var/runtime /var/runtime 17 | COPY --from=0 /var/lang /var/lang 18 | COPY --from=0 /var/rapid /var/rapid 19 | 20 | RUN curl -L https://dot.net/v1/dotnet-install.sh | bash -s -- -v $DOTNET_SDK_VERSION -i $DOTNET_ROOT && \ 21 | mkdir /tmp/warmup && \ 22 | cd /tmp/warmup && \ 23 | dotnet new && \ 24 | cd / && \ 25 | rm -rf /tmp/warmup /tmp/NuGetScratch /tmp/.dotnet 26 | 27 | # Add these as a separate layer as they get updated frequently 28 | RUN pipx install awscli==1.* && \ 29 | pipx install aws-lambda-builders==1.2.0 && \ 30 | pipx install aws-sam-cli==1.15.0 && \ 31 | dotnet tool install --global Amazon.Lambda.Tools --version 5.3.0 32 | 33 | CMD ["dotnet", "build"] 34 | -------------------------------------------------------------------------------- /runtimes/dotnet6-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:dotnet6-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/dotnet6-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:dotnet6-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/dotnet6-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/dotnet6-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_dotnet6\ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/dotnet6-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:dotnet6-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/dotnet6-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:dotnet6" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/dotnet6-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:dotnet6-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | # Run: docker run --rm --entrypoint dotnet mlupin/docker-lambda:dotnet6 --info 6 | # Check https://dotnet.microsoft.com/download/dotnet-core/6.0 for versions 7 | ENV DOTNET_ROOT=/var/lang/bin 8 | ENV PATH=/root/.dotnet/tools:$DOTNET_ROOT:$PATH \ 9 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 10 | AWS_EXECUTION_ENV=AWS_Lambda_dotnet6 \ 11 | AWS_EXECUTION_ARCH=x86_64 \ 12 | DOTNET_SDK_VERSION=6.0.201 \ 13 | DOTNET_CLI_TELEMETRY_OPTOUT=1 \ 14 | NUGET_XMLDOC_MODE=skip 15 | 16 | COPY --from=0 /var/runtime /var/runtime 17 | COPY --from=0 /var/lang /var/lang 18 | COPY --from=0 /var/rapid /var/rapid 19 | 20 | RUN curl -L https://dot.net/v1/dotnet-install.sh | bash -s -- -v $DOTNET_SDK_VERSION -i $DOTNET_ROOT && \ 21 | mkdir /tmp/warmup && \ 22 | cd /tmp/warmup && \ 23 | dotnet new && \ 24 | cd / && \ 25 | rm -rf /tmp/warmup /tmp/NuGetScratch /tmp/.dotnet 26 | 27 | # Add these as a separate layer as they get updated frequently 28 | RUN pipx install awscli==1.* && \ 29 | pipx install aws-lambda-builders==1.2.0 && \ 30 | pipx install aws-sam-cli==1.15.0 && \ 31 | dotnet tool install --global Amazon.Lambda.Tools --version 5.3.0 32 | 33 | CMD ["dotnet", "build"] 34 | -------------------------------------------------------------------------------- /runtimes/dotnet6-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:dotnet6-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/dotnet6-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:dotnet6-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/dotnet6-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/dotnet6-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_dotnet6\ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/dotnet6-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:dotnet6-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/dotnet6-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:dotnet6" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:dotnetcore3.1-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | # Run: docker run --rm --entrypoint dotnet mlupin/docker-lambda:dotnetcore3.1 --info 6 | # Check https://dotnet.microsoft.com/download/dotnet-core/3.1 for versions 7 | ENV DOTNET_ROOT=/var/lang/bin 8 | ENV PATH=/root/.dotnet/tools:$DOTNET_ROOT:$PATH \ 9 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 10 | AWS_EXECUTION_ENV=AWS_Lambda_dotnetcore3.1 \ 11 | AWS_EXECUTION_ARCH=arm64 \ 12 | DOTNET_SDK_VERSION=3.1.405 \ 13 | DOTNET_CLI_TELEMETRY_OPTOUT=1 \ 14 | NUGET_XMLDOC_MODE=skip 15 | 16 | COPY --from=0 /var/runtime /var/runtime 17 | COPY --from=0 /var/lang /var/lang 18 | COPY --from=0 /var/rapid /var/rapid 19 | 20 | RUN curl -L https://dot.net/v1/dotnet-install.sh | bash -s -- -v $DOTNET_SDK_VERSION -i $DOTNET_ROOT && \ 21 | mkdir /tmp/warmup && \ 22 | cd /tmp/warmup && \ 23 | dotnet new && \ 24 | cd / && \ 25 | rm -rf /tmp/warmup /tmp/NuGetScratch /tmp/.dotnet 26 | 27 | # Add these as a separate layer as they get updated frequently 28 | RUN pipx install awscli==1.* && \ 29 | pipx install aws-lambda-builders==1.2.0 && \ 30 | pipx install aws-sam-cli==1.15.0 && \ 31 | dotnet tool install --global Amazon.Lambda.Tools --version 4.0.0 32 | 33 | CMD ["dotnet", "build"] 34 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:dotnetcore3.1-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:dotnetcore3.1-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/dotnetcore3.1-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_dotnetcore3.1\ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:dotnetcore3.1-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:dotnetcore3.1" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:dotnetcore3.1-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | # Run: docker run --rm --entrypoint dotnet mlupin/docker-lambda:dotnetcore3.1 --info 6 | # Check https://dotnet.microsoft.com/download/dotnet-core/3.1 for versions 7 | ENV DOTNET_ROOT=/var/lang/bin 8 | ENV PATH=/root/.dotnet/tools:$DOTNET_ROOT:$PATH \ 9 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 10 | AWS_EXECUTION_ENV=AWS_Lambda_dotnetcore3.1 \ 11 | AWS_EXECUTION_ARCH=x86_64 \ 12 | DOTNET_SDK_VERSION=3.1.405 \ 13 | DOTNET_CLI_TELEMETRY_OPTOUT=1 \ 14 | NUGET_XMLDOC_MODE=skip 15 | 16 | COPY --from=0 /var/runtime /var/runtime 17 | COPY --from=0 /var/lang /var/lang 18 | COPY --from=0 /var/rapid /var/rapid 19 | 20 | RUN curl -L https://dot.net/v1/dotnet-install.sh | bash -s -- -v $DOTNET_SDK_VERSION -i $DOTNET_ROOT && \ 21 | mkdir /tmp/warmup && \ 22 | cd /tmp/warmup && \ 23 | dotnet new && \ 24 | cd / && \ 25 | rm -rf /tmp/warmup /tmp/NuGetScratch /tmp/.dotnet 26 | 27 | # Add these as a separate layer as they get updated frequently 28 | RUN pipx install awscli==1.* && \ 29 | pipx install aws-lambda-builders==1.2.0 && \ 30 | pipx install aws-sam-cli==1.15.0 && \ 31 | dotnet tool install --global Amazon.Lambda.Tools --version 4.0.0 32 | 33 | CMD ["dotnet", "build"] 34 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:dotnetcore3.1-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:dotnetcore3.1-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/dotnetcore3.1-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_dotnetcore3.1\ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:dotnetcore3.1-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/dotnetcore3.1-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:dotnetcore3.1" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/get-all-runtimes.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | export DIR=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 5 | 6 | find $DIR -mindepth 1 -maxdepth 1 -type d | rev | cut -d'/' -f1 | cut -d'-' -f2- | rev | sort -u 7 | -------------------------------------------------------------------------------- /runtimes/java11-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:java11-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_java11 \ 8 | AWS_EXECUTION_ARCH=arm64 9 | 10 | COPY --from=0 /var/runtime /var/runtime 11 | COPY --from=0 /var/lang /var/lang 12 | COPY --from=0 /var/rapid /var/rapid 13 | 14 | RUN mkdir /usr/local/gradle && curl -L -o gradle.zip https://services.gradle.org/distributions/gradle-6.8.1-bin.zip && \ 15 | unzip -qd /usr/local/gradle gradle.zip && rm gradle.zip && mkdir /usr/local/maven && \ 16 | curl -L https://dlcdn.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz | \ 17 | tar -zx -C /usr/local/maven 18 | 19 | ENV PATH="/usr/local/gradle/gradle-6.8.1/bin:/usr/local/maven/apache-maven-3.6.3/bin:${PATH}" 20 | 21 | # Add these as a separate layer as they get updated frequently 22 | RUN pipx install awscli==1.* && \ 23 | pipx install aws-lambda-builders==1.2.0 && \ 24 | pipx install aws-sam-cli==1.15.0 25 | -------------------------------------------------------------------------------- /runtimes/java11-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java11-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/java11-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java11-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java11-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/java11-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_java11 \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/java11-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java11-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/java11-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java11" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java11-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:java11-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_java11 \ 8 | AWS_EXECUTION_ARCH=x86_64 9 | 10 | COPY --from=0 /var/runtime /var/runtime 11 | COPY --from=0 /var/lang /var/lang 12 | COPY --from=0 /var/rapid /var/rapid 13 | 14 | RUN mkdir /usr/local/gradle && curl -L -o gradle.zip https://services.gradle.org/distributions/gradle-6.8.1-bin.zip && \ 15 | unzip -qd /usr/local/gradle gradle.zip && rm gradle.zip && mkdir /usr/local/maven && \ 16 | curl -L https://dlcdn.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz | \ 17 | tar -zx -C /usr/local/maven 18 | 19 | ENV PATH="/usr/local/gradle/gradle-6.8.1/bin:/usr/local/maven/apache-maven-3.6.3/bin:${PATH}" 20 | 21 | # Add these as a separate layer as they get updated frequently 22 | RUN pipx install awscli==1.* && \ 23 | pipx install aws-lambda-builders==1.2.0 && \ 24 | pipx install aws-sam-cli==1.15.0 25 | -------------------------------------------------------------------------------- /runtimes/java11-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java11-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/java11-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java11-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java11-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/java11-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_java11 \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/java11-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java11-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/java11-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java11" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java17-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:java17-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_java17 \ 8 | AWS_EXECUTION_ARCH=arm64 9 | 10 | COPY --from=0 /var/runtime /var/runtime 11 | COPY --from=0 /var/lang /var/lang 12 | COPY --from=0 /var/rapid /var/rapid 13 | 14 | RUN mkdir /usr/local/gradle && curl -L -o gradle.zip https://services.gradle.org/distributions/gradle-8.2.1-bin.zip && \ 15 | unzip -qd /usr/local/gradle gradle.zip && rm gradle.zip && mkdir /usr/local/maven && \ 16 | curl -L https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz | \ 17 | tar -zx -C /usr/local/maven 18 | 19 | ENV PATH="/usr/local/gradle/gradle-8.2.1/bin:/usr/local/maven/apache-maven-3.9.3/bin:${PATH}" 20 | 21 | # Add these as a separate layer as they get updated frequently 22 | RUN pipx install awscli==1.* && \ 23 | pipx install aws-lambda-builders==1.2.0 && \ 24 | pipx install aws-sam-cli==1.15.0 25 | -------------------------------------------------------------------------------- /runtimes/java17-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java17-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/java17-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java17-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java17-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/java17-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_java17 \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/java17-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java17-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/java17-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java17" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java17-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:java17-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_java17 \ 8 | AWS_EXECUTION_ARCH=x86_64 9 | 10 | COPY --from=0 /var/runtime /var/runtime 11 | COPY --from=0 /var/lang /var/lang 12 | COPY --from=0 /var/rapid /var/rapid 13 | 14 | RUN mkdir /usr/local/gradle && curl -L -o gradle.zip https://services.gradle.org/distributions/gradle-8.2.1-bin.zip && \ 15 | unzip -qd /usr/local/gradle gradle.zip && rm gradle.zip && mkdir /usr/local/maven && \ 16 | curl -L https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz | \ 17 | tar -zx -C /usr/local/maven 18 | 19 | ENV PATH="/usr/local/gradle/gradle-8.2.1/bin:/usr/local/maven/apache-maven-3.9.3/bin:${PATH}" 20 | 21 | # Add these as a separate layer as they get updated frequently 22 | RUN pipx install awscli==1.* && \ 23 | pipx install aws-lambda-builders==1.2.0 && \ 24 | pipx install aws-sam-cli==1.15.0 25 | -------------------------------------------------------------------------------- /runtimes/java17-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java17-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/java17-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java17-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java17-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/java17-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_java17 \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/java17-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java17-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/java17-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java17" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java8.al2-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:java8.al2-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_rapid \ 8 | AWS_EXECUTION_ARCH=arm64 9 | 10 | COPY --from=0 /var/runtime /var/runtime 11 | COPY --from=0 /var/lang /var/lang 12 | COPY --from=0 /var/rapid /var/rapid 13 | 14 | RUN rm -rf /var/lang/* && \ 15 | curl -sSL https://corretto.aws/downloads/resources/8.265.01.1/amazon-corretto-8.265.01.1-linux-aarch64.tar.gz | tar -xz --strip-components=1 -C /var/lang && \ 16 | rm -rf /var/lang/*.zip && \ 17 | mkdir /usr/local/gradle && curl -L -o gradle.zip https://services.gradle.org/distributions/gradle-6.8.1-bin.zip && \ 18 | unzip -qd /usr/local/gradle gradle.zip && rm gradle.zip && mkdir /usr/local/maven && \ 19 | curl -L https://dlcdn.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz | \ 20 | tar -zx -C /usr/local/maven 21 | 22 | ENV PATH="/usr/local/gradle/gradle-6.8.1/bin:/usr/local/maven/apache-maven-3.6.3/bin:${PATH}" 23 | 24 | # Add these as a separate layer as they get updated frequently 25 | RUN pipx install awscli==1.* && \ 26 | pipx install aws-lambda-builders==1.2.0 && \ 27 | pipx install aws-sam-cli==1.15.0 28 | -------------------------------------------------------------------------------- /runtimes/java8.al2-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java8.al2-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/java8.al2-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java8.al2-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java8.al2-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/java8.al2-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_rapid \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/java8.al2-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java8.al2-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/java8.al2-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java8.al2" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java8.al2-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:java8.al2-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_rapid \ 8 | AWS_EXECUTION_ARCH=x86_64 9 | 10 | COPY --from=0 /var/runtime /var/runtime 11 | COPY --from=0 /var/lang /var/lang 12 | COPY --from=0 /var/rapid /var/rapid 13 | 14 | RUN rm -rf /var/lang/* && \ 15 | curl -sSL https://corretto.aws/downloads/resources/8.265.01.1/amazon-corretto-8.265.01.1-linux-x64.tar.gz | tar -xz --strip-components=1 -C /var/lang && \ 16 | rm -rf /var/lang/*.zip && \ 17 | mkdir /usr/local/gradle && curl -L -o gradle.zip https://services.gradle.org/distributions/gradle-6.8.1-bin.zip && \ 18 | unzip -qd /usr/local/gradle gradle.zip && rm gradle.zip && mkdir /usr/local/maven && \ 19 | curl -L https://dlcdn.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz | \ 20 | tar -zx -C /usr/local/maven 21 | 22 | ENV PATH="/usr/local/gradle/gradle-6.8.1/bin:/usr/local/maven/apache-maven-3.6.3/bin:${PATH}" 23 | 24 | # Add these as a separate layer as they get updated frequently 25 | RUN pipx install awscli==1.* && \ 26 | pipx install aws-lambda-builders==1.2.0 && \ 27 | pipx install aws-sam-cli==1.15.0 28 | -------------------------------------------------------------------------------- /runtimes/java8.al2-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java8.al2-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/java8.al2-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java8.al2-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/java8.al2-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/java8.al2-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_rapid \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/java8.al2-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:java8.al2-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/java8.al2-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:java8.al2" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/manifest-all-images.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | export DIR=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 5 | 6 | for runtime in $($DIR/get-all-runtimes.sh); do 7 | image="mlupin/docker-lambda:${runtime}" 8 | 9 | docker manifest rm $image || true 10 | docker manifest create $image \ 11 | --amend ${image}-x86_64 \ 12 | --amend ${image}-arm64 13 | 14 | docker manifest rm ${image}-build || true 15 | docker manifest create ${image}-build \ 16 | --amend ${image}-build-x86_64 \ 17 | --amend ${image}-build-arm64 18 | 19 | docker manifest push ${image} 20 | docker manifest push ${image}-build 21 | done 22 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:nodejs12.x-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs12.x \ 8 | AWS_EXECUTION_ARCH=arm64 \ 9 | NODE_PATH=/opt/nodejs/node12/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules 10 | 11 | COPY --from=0 /var/runtime /var/runtime 12 | COPY --from=0 /var/lang /var/lang 13 | COPY --from=0 /var/rapid /var/rapid 14 | 15 | # Add these as a separate layer as they get updated frequently 16 | RUN pipx install awscli==1.* && \ 17 | pipx install aws-lambda-builders==1.2.0 && \ 18 | pipx install aws-sam-cli==1.15.0 19 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs12.x-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs12.x-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/nodejs12.x-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs12.x \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs12.x-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs12.x" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:nodejs12.x-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs12.x \ 8 | AWS_EXECUTION_ARCH=x86_64 \ 9 | NODE_PATH=/opt/nodejs/node12/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules 10 | 11 | COPY --from=0 /var/runtime /var/runtime 12 | COPY --from=0 /var/lang /var/lang 13 | COPY --from=0 /var/rapid /var/rapid 14 | 15 | # Add these as a separate layer as they get updated frequently 16 | RUN pipx install awscli==1.* && \ 17 | pipx install aws-lambda-builders==1.2.0 && \ 18 | pipx install aws-sam-cli==1.15.0 19 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs12.x-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs12.x-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/nodejs12.x-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs12.x \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs12.x-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs12.x-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs12.x" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:nodejs14.x-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs14.x \ 8 | AWS_EXECUTION_ARCH=arm64 \ 9 | NODE_PATH=/opt/nodejs/node14/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules 10 | 11 | COPY --from=0 /var/runtime /var/runtime 12 | COPY --from=0 /var/lang /var/lang 13 | COPY --from=0 /var/rapid /var/rapid 14 | 15 | # Add these as a separate layer as they get updated frequently 16 | RUN pipx install awscli==1.* && \ 17 | pipx install aws-lambda-builders==1.2.0 && \ 18 | pipx install aws-sam-cli==1.15.0 19 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs14.x-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs14.x-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/nodejs14.x-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs14.x \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs14.x-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs14.x" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:nodejs14.x-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs14.x \ 8 | AWS_EXECUTION_ARCH=x86_64 \ 9 | NODE_PATH=/opt/nodejs/node14/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules 10 | 11 | COPY --from=0 /var/runtime /var/runtime 12 | COPY --from=0 /var/lang /var/lang 13 | COPY --from=0 /var/rapid /var/rapid 14 | 15 | # Add these as a separate layer as they get updated frequently 16 | RUN pipx install awscli==1.* && \ 17 | pipx install aws-lambda-builders==1.2.0 && \ 18 | pipx install aws-sam-cli==1.15.0 19 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs14.x-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs14.x-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/nodejs14.x-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs14.x \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs14.x-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs14.x-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs14.x" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:nodejs16.x-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs16.x \ 8 | AWS_EXECUTION_ARCH=arm64 \ 9 | NODE_PATH=/opt/nodejs/node16/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules 10 | 11 | COPY --from=0 /var/runtime /var/runtime 12 | COPY --from=0 /var/lang /var/lang 13 | COPY --from=0 /var/rapid /var/rapid 14 | 15 | # Add these as a separate layer as they get updated frequently 16 | RUN pipx install awscli==1.* && \ 17 | pipx install aws-lambda-builders==1.2.0 && \ 18 | pipx install aws-sam-cli==1.15.0 19 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs16.x-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs16.x-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/nodejs16.x-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs16.x \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs16.x-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs16.x" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:nodejs16.x-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs16.x \ 8 | AWS_EXECUTION_ARCH=x86_64 \ 9 | NODE_PATH=/opt/nodejs/node16/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules 10 | 11 | COPY --from=0 /var/runtime /var/runtime 12 | COPY --from=0 /var/lang /var/lang 13 | COPY --from=0 /var/rapid /var/rapid 14 | 15 | # Add these as a separate layer as they get updated frequently 16 | RUN pipx install awscli==1.* && \ 17 | pipx install aws-lambda-builders==1.2.0 && \ 18 | pipx install aws-sam-cli==1.15.0 19 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs16.x-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs16.x-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/nodejs16.x-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs16.x \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs16.x-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs16.x-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs16.x" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:nodejs18.x-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs18.x \ 8 | AWS_EXECUTION_ARCH=arm64 \ 9 | NODE_PATH=/opt/nodejs/node18/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules 10 | 11 | COPY --from=0 /var/runtime /var/runtime 12 | COPY --from=0 /var/lang /var/lang 13 | COPY --from=0 /var/rapid /var/rapid 14 | 15 | # Add these as a separate layer as they get updated frequently 16 | RUN pipx install awscli==1.* && \ 17 | pipx install aws-lambda-builders==1.23.1 && \ 18 | pipx install aws-sam-cli==1.66.0 19 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs18.x-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs18.x-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/nodejs18.x-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs18.x \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs18.x-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs18.x" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:nodejs18.x-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs18.x \ 8 | AWS_EXECUTION_ARCH=x86_64 \ 9 | NODE_PATH=/opt/nodejs/node18/node_modules:/opt/nodejs/node_modules:/var/runtime/node_modules 10 | 11 | COPY --from=0 /var/runtime /var/runtime 12 | COPY --from=0 /var/lang /var/lang 13 | COPY --from=0 /var/rapid /var/rapid 14 | 15 | # Add these as a separate layer as they get updated frequently 16 | RUN pipx install awscli==1.* && \ 17 | pipx install aws-lambda-builders==1.23.1 && \ 18 | pipx install aws-sam-cli==1.66.0 19 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs18.x-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs18.x-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/nodejs18.x-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_nodejs18.x \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:nodejs18.x-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/nodejs18.x-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:nodejs18.x" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/provided.al2-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:provided.al2-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | COPY --from=0 /var/runtime /var/runtime 6 | COPY --from=0 /var/lang /var/lang 7 | COPY --from=0 /var/rapid /var/rapid 8 | 9 | # Add these as a separate layer as they get updated frequently 10 | RUN pipx install awscli==1.* && \ 11 | pipx install aws-lambda-builders==1.2.0 && \ 12 | pipx install aws-sam-cli==1.15.0 13 | -------------------------------------------------------------------------------- /runtimes/provided.al2-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:provided.al2-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/provided.al2-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:provided.al2-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/provided.al2-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1 2 | 3 | WORKDIR /app 4 | 5 | ENV CGO_ENABLED=0 6 | 7 | COPY go.mod go.sum ./ 8 | RUN go mod download 9 | 10 | COPY init.go ./ 11 | RUN GOARCH=arm64 GOOS=linux go build init.go 12 | 13 | FROM mlupin/docker-lambda:base-arm64 14 | 15 | ENV PATH=/var/lang/bin:$PATH \ 16 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH 17 | 18 | COPY --from=0 /app/init /var/runtime/init 19 | 20 | USER sbx_user1051 21 | 22 | ENTRYPOINT ["/var/runtime/init"] 23 | -------------------------------------------------------------------------------- /runtimes/provided.al2-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --no-cache --squash -t mlupin/docker-lambda:provided.al2-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/provided.al2-arm64/run/go.mod: -------------------------------------------------------------------------------- 1 | module init 2 | 3 | require ( 4 | github.com/go-chi/chi v4.0.2+incompatible 5 | github.com/go-chi/render v1.0.1 6 | github.com/rjeczalik/notify v0.9.2 7 | ) 8 | 9 | go 1.15 10 | -------------------------------------------------------------------------------- /runtimes/provided.al2-arm64/run/go.sum: -------------------------------------------------------------------------------- 1 | github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs= 2 | github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= 3 | github.com/go-chi/render v1.0.1 h1:4/5tis2cKaNdnv9zFLfXzcquC9HbeZgCnxGnKrltBS8= 4 | github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns= 5 | github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= 6 | github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= 7 | golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7 h1:bit1t3mgdR35yN0cX0G8orgLtOuyL9Wqxa1mccLB0ig= 8 | golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 9 | -------------------------------------------------------------------------------- /runtimes/provided.al2-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:provided.al2" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/provided.al2-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:provided.al2-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | COPY --from=0 /var/runtime /var/runtime 6 | COPY --from=0 /var/lang /var/lang 7 | COPY --from=0 /var/rapid /var/rapid 8 | 9 | # Add these as a separate layer as they get updated frequently 10 | RUN pipx install awscli==1.* && \ 11 | pipx install aws-lambda-builders==1.2.0 && \ 12 | pipx install aws-sam-cli==1.15.0 13 | -------------------------------------------------------------------------------- /runtimes/provided.al2-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:provided.al2-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/provided.al2-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:provided.al2-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/provided.al2-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1 2 | 3 | WORKDIR /app 4 | 5 | ENV CGO_ENABLED=0 6 | 7 | COPY go.mod go.sum ./ 8 | RUN go mod download 9 | 10 | COPY init.go ./ 11 | RUN GOARCH=amd64 GOOS=linux go build init.go 12 | 13 | FROM mlupin/docker-lambda:base-x86_64 14 | 15 | ENV PATH=/var/lang/bin:$PATH \ 16 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH 17 | 18 | COPY --from=0 /app/init /var/runtime/init 19 | 20 | USER sbx_user1051 21 | 22 | ENTRYPOINT ["/var/runtime/init"] 23 | -------------------------------------------------------------------------------- /runtimes/provided.al2-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --no-cache --squash -t mlupin/docker-lambda:provided.al2-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/provided.al2-x86_64/run/go.mod: -------------------------------------------------------------------------------- 1 | module init 2 | 3 | require ( 4 | github.com/go-chi/chi v4.0.2+incompatible 5 | github.com/go-chi/render v1.0.1 6 | github.com/rjeczalik/notify v0.9.2 7 | ) 8 | 9 | go 1.15 10 | -------------------------------------------------------------------------------- /runtimes/provided.al2-x86_64/run/go.sum: -------------------------------------------------------------------------------- 1 | github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs= 2 | github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= 3 | github.com/go-chi/render v1.0.1 h1:4/5tis2cKaNdnv9zFLfXzcquC9HbeZgCnxGnKrltBS8= 4 | github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns= 5 | github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= 6 | github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= 7 | golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7 h1:bit1t3mgdR35yN0cX0G8orgLtOuyL9Wqxa1mccLB0ig= 8 | golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 9 | -------------------------------------------------------------------------------- /runtimes/provided.al2-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:provided.al2" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/pull-all-images.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | export DIR=$(realpath "$(dirname "${BASH_SOURCE[0]}")") 5 | 6 | for runtime in $($DIR/get-all-runtimes.sh); do 7 | docker pull mlupin/docker-lambda:${runtime}-x86_64 8 | docker pull mlupin/docker-lambda:${runtime}-arm64 9 | docker pull mlupin/docker-lambda:${runtime}-build-x86_64 10 | docker pull mlupin/docker-lambda:${runtime}-build-arm64 11 | done 12 | -------------------------------------------------------------------------------- /runtimes/python3.10-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:python3.10-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_python3.10 \ 8 | AWS_EXECUTION_ARCH=arm64 \ 9 | PKG_CONFIG_PATH=/var/lang/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig \ 10 | PIPX_BIN_DIR=/var/lang/bin \ 11 | PIPX_HOME=/var/lang/pipx 12 | 13 | COPY --from=0 /var/runtime /var/runtime 14 | COPY --from=0 /var/lang /var/lang 15 | COPY --from=0 /var/rapid /var/rapid 16 | 17 | # Add these as a separate layer as they get updated frequently 18 | RUN pip install -U pip setuptools wheel --no-cache-dir && \ 19 | pip install pipx --no-cache-dir && \ 20 | pipx install virtualenv && \ 21 | pipx install pipenv && \ 22 | pipx install poetry && \ 23 | pipx install awscli && \ 24 | pipx install aws-lambda-builders && \ 25 | pipx install aws-sam-cli 26 | -------------------------------------------------------------------------------- /runtimes/python3.10-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.10-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.10-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.10-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.10-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/python3.10-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_python3.10 \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/python3.10-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.10-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.10-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.10" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.10-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:python3.10-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_python3.10 \ 8 | AWS_EXECUTION_ARCH=x86_64 \ 9 | PKG_CONFIG_PATH=/var/lang/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig \ 10 | PIPX_BIN_DIR=/var/lang/bin \ 11 | PIPX_HOME=/var/lang/pipx 12 | 13 | COPY --from=0 /var/runtime /var/runtime 14 | COPY --from=0 /var/lang /var/lang 15 | COPY --from=0 /var/rapid /var/rapid 16 | 17 | # Add these as a separate layer as they get updated frequently 18 | RUN pip install -U pip setuptools wheel --no-cache-dir && \ 19 | pip install pipx --no-cache-dir && \ 20 | pipx install virtualenv && \ 21 | pipx install pipenv && \ 22 | pipx install poetry && \ 23 | pipx install awscli && \ 24 | pipx install aws-lambda-builders && \ 25 | pipx install aws-sam-cli 26 | -------------------------------------------------------------------------------- /runtimes/python3.10-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.10-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.10-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.10-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.10-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/python3.10-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_python3.10 \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/python3.10-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.10-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.10-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.10" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.11-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:python3.11-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_python3.11 \ 8 | AWS_EXECUTION_ARCH=arm64 \ 9 | PKG_CONFIG_PATH=/var/lang/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig \ 10 | PIPX_BIN_DIR=/var/lang/bin \ 11 | PIPX_HOME=/var/lang/pipx 12 | 13 | COPY --from=0 /var/runtime /var/runtime 14 | COPY --from=0 /var/lang /var/lang 15 | COPY --from=0 /var/rapid /var/rapid 16 | 17 | # Add these as a separate layer as they get updated frequently 18 | RUN pip install -U pip setuptools wheel --no-cache-dir && \ 19 | pip install pipx --no-cache-dir && \ 20 | pipx install virtualenv && \ 21 | pipx install pipenv && \ 22 | pipx install poetry && \ 23 | pipx install awscli && \ 24 | pipx install aws-lambda-builders && \ 25 | pipx install aws-sam-cli 26 | -------------------------------------------------------------------------------- /runtimes/python3.11-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.11-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.11-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.11-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.11-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/python3.11-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_python3.11 \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/python3.11-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --no-cache --squash -t mlupin/docker-lambda:python3.11-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.11-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.11" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.11-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:python3.11-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_python3.11 \ 8 | AWS_EXECUTION_ARCH=x86_64 \ 9 | PKG_CONFIG_PATH=/var/lang/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig \ 10 | PIPX_BIN_DIR=/var/lang/bin \ 11 | PIPX_HOME=/var/lang/pipx 12 | 13 | COPY --from=0 /var/runtime /var/runtime 14 | COPY --from=0 /var/lang /var/lang 15 | COPY --from=0 /var/rapid /var/rapid 16 | 17 | # Add these as a separate layer as they get updated frequently 18 | RUN pip install -U pip setuptools wheel --no-cache-dir && \ 19 | pip install pipx --no-cache-dir && \ 20 | pipx install virtualenv && \ 21 | pipx install pipenv && \ 22 | pipx install poetry && \ 23 | pipx install awscli && \ 24 | pipx install aws-lambda-builders && \ 25 | pipx install aws-sam-cli 26 | -------------------------------------------------------------------------------- /runtimes/python3.11-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.11-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.11-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.11-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.11-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/python3.11-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_python3.11 \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/python3.11-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.11-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.11-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.11" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.8-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:python3.8-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_python3.8 \ 8 | AWS_EXECUTION_ARCH=arm64 \ 9 | PKG_CONFIG_PATH=/var/lang/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig \ 10 | PIPX_BIN_DIR=/var/lang/bin \ 11 | PIPX_HOME=/var/lang/pipx 12 | 13 | COPY --from=0 /var/runtime /var/runtime 14 | COPY --from=0 /var/lang /var/lang 15 | COPY --from=0 /var/rapid /var/rapid 16 | 17 | # Add these as a separate layer as they get updated frequently 18 | RUN pip install -U pip setuptools wheel --no-cache-dir && \ 19 | pip install pipx --no-cache-dir && \ 20 | pipx install virtualenv && \ 21 | pipx install pipenv && \ 22 | pipx install poetry && \ 23 | pipx install awscli && \ 24 | pipx install aws-lambda-builders && \ 25 | pipx install aws-sam-cli 26 | -------------------------------------------------------------------------------- /runtimes/python3.8-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.8-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.8-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.8-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.8-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/python3.8-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_python3.8 \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/python3.8-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.8-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.8-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.8" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.8-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:python3.8-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_python3.8 \ 8 | AWS_EXECUTION_ARCH=x86_64 \ 9 | PKG_CONFIG_PATH=/var/lang/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig \ 10 | PIPX_BIN_DIR=/var/lang/bin \ 11 | PIPX_HOME=/var/lang/pipx 12 | 13 | COPY --from=0 /var/runtime /var/runtime 14 | COPY --from=0 /var/lang /var/lang 15 | COPY --from=0 /var/rapid /var/rapid 16 | 17 | # Add these as a separate layer as they get updated frequently 18 | RUN pip install -U pip setuptools wheel --no-cache-dir && \ 19 | pip install pipx --no-cache-dir && \ 20 | pipx install virtualenv && \ 21 | pipx install pipenv && \ 22 | pipx install poetry && \ 23 | pipx install awscli && \ 24 | pipx install aws-lambda-builders && \ 25 | pipx install aws-sam-cli 26 | -------------------------------------------------------------------------------- /runtimes/python3.8-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.8-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.8-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.8-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.8-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/python3.8-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_python3.8 \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/python3.8-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.8-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.8-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.8" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.9-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:python3.9-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_python3.9 \ 8 | AWS_EXECUTION_ARCH=arm64 \ 9 | PKG_CONFIG_PATH=/var/lang/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig \ 10 | PIPX_BIN_DIR=/var/lang/bin \ 11 | PIPX_HOME=/var/lang/pipx 12 | 13 | COPY --from=0 /var/runtime /var/runtime 14 | COPY --from=0 /var/lang /var/lang 15 | COPY --from=0 /var/rapid /var/rapid 16 | 17 | # Add these as a separate layer as they get updated frequently 18 | RUN pip install -U pip setuptools wheel --no-cache-dir && \ 19 | pip install pipx --no-cache-dir && \ 20 | pipx install virtualenv && \ 21 | pipx install pipenv && \ 22 | pipx install poetry && \ 23 | pipx install awscli && \ 24 | pipx install aws-lambda-builders && \ 25 | pipx install aws-sam-cli 26 | -------------------------------------------------------------------------------- /runtimes/python3.9-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.9-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.9-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.9-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.9-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/python3.9-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_python3.9 \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/python3.9-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.9-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.9-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.9" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.9-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:python3.9-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_python3.9 \ 8 | AWS_EXECUTION_ARCH=x86_64 \ 9 | PKG_CONFIG_PATH=/var/lang/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig \ 10 | PIPX_BIN_DIR=/var/lang/bin \ 11 | PIPX_HOME=/var/lang/pipx 12 | 13 | COPY --from=0 /var/runtime /var/runtime 14 | COPY --from=0 /var/lang /var/lang 15 | COPY --from=0 /var/rapid /var/rapid 16 | 17 | # Add these as a separate layer as they get updated frequently 18 | RUN pip install -U pip setuptools wheel --no-cache-dir && \ 19 | pip install pipx --no-cache-dir && \ 20 | pipx install virtualenv && \ 21 | pipx install pipenv && \ 22 | pipx install poetry && \ 23 | pipx install awscli && \ 24 | pipx install aws-lambda-builders && \ 25 | pipx install aws-sam-cli 26 | -------------------------------------------------------------------------------- /runtimes/python3.9-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.9-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.9-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.9-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/python3.9-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/python3.9-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_python3.9 \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/python3.9-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:python3.9-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/python3.9-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:python3.9" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:ruby2.7-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_ruby2.7 \ 8 | AWS_EXECUTION_ARCH=arm64 \ 9 | GEM_HOME=/var/runtime \ 10 | GEM_PATH=/var/task/vendor/bundle/ruby/2.7.0:/opt/ruby/gems/2.7.0:/var/lang/lib/ruby/gems/2.7.0 \ 11 | RUBYLIB=/var/task:/var/runtime/lib:/opt/ruby/lib \ 12 | BUNDLE_SILENCE_ROOT_WARNING=1 13 | 14 | COPY --from=0 /var/runtime /var/runtime 15 | COPY --from=0 /var/lang /var/lang 16 | COPY --from=0 /var/rapid /var/rapid 17 | 18 | # Add these as a separate layer as they get updated frequently 19 | RUN pipx install awscli==1.* && \ 20 | pipx install aws-lambda-builders==1.2.0 && \ 21 | pipx install aws-sam-cli==1.15.0 && \ 22 | gem update --system --no-document && \ 23 | gem install --no-document bundler -v '~> 2.1' 24 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:ruby2.7-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:ruby2.7-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/ruby2.7-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_ruby2.7 \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:ruby2.7-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:ruby2.7" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:ruby2.7-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_ruby2.7 \ 8 | AWS_EXECUTION_ARCH=x86_64 \ 9 | GEM_HOME=/var/runtime \ 10 | GEM_PATH=/var/task/vendor/bundle/ruby/2.7.0:/opt/ruby/gems/2.7.0:/var/lang/lib/ruby/gems/2.7.0 \ 11 | RUBYLIB=/var/task:/var/runtime/lib:/opt/ruby/lib \ 12 | BUNDLE_SILENCE_ROOT_WARNING=1 13 | 14 | COPY --from=0 /var/runtime /var/runtime 15 | COPY --from=0 /var/lang /var/lang 16 | COPY --from=0 /var/rapid /var/rapid 17 | 18 | # Add these as a separate layer as they get updated frequently 19 | RUN pipx install awscli==1.* && \ 20 | pipx install aws-lambda-builders==1.2.0 && \ 21 | pipx install aws-sam-cli==1.15.0 && \ 22 | gem update --system --no-document && \ 23 | gem install --no-document bundler -v '~> 2.1' 24 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:ruby2.7-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:ruby2.7-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/ruby2.7-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_ruby2.7 \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:ruby2.7-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/ruby2.7-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:ruby2.7" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-arm64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:ruby3.2-arm64 2 | 3 | FROM mlupin/docker-lambda:build-arm64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_ruby3.2 \ 8 | AWS_EXECUTION_ARCH=arm64 \ 9 | GEM_HOME=/var/runtime \ 10 | GEM_PATH=/var/task/vendor/bundle/ruby/3.2.0:/opt/ruby/gems/3.2.0:/var/lang/lib/ruby/gems/3.2.0 \ 11 | RUBYLIB=/var/task:/var/runtime/lib:/opt/ruby/lib \ 12 | BUNDLE_SILENCE_ROOT_WARNING=1 13 | 14 | COPY --from=0 /var/runtime /var/runtime 15 | COPY --from=0 /var/lang /var/lang 16 | COPY --from=0 /var/rapid /var/rapid 17 | 18 | # Add these as a separate layer as they get updated frequently 19 | RUN pipx install awscli==1.* && \ 20 | pipx install aws-lambda-builders==1.2.0 && \ 21 | pipx install aws-sam-cli==1.15.0 && \ 22 | gem update --system --no-document && \ 23 | gem install --no-document bundler -v '~> 2.1' 24 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-arm64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:ruby3.2-build-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-arm64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:ruby3.2-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-arm64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM arm64v8/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/ruby3.2-arm64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-arm64 8 | FROM mlupin/docker-lambda:base-arm64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_ruby3.2 \ 13 | AWS_EXECUTION_ARCH=arm64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-arm64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:ruby3.2-arm64 . 6 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-arm64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:ruby3.2" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-arm64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-x86_64/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mlupin/docker-lambda:ruby3.2-x86_64 2 | 3 | FROM mlupin/docker-lambda:build-x86_64 4 | 5 | ENV PATH=/var/lang/bin:$PATH \ 6 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 7 | AWS_EXECUTION_ENV=AWS_Lambda_ruby3.2 \ 8 | AWS_EXECUTION_ARCH=x86_64 \ 9 | GEM_HOME=/var/runtime \ 10 | GEM_PATH=/var/task/vendor/bundle/ruby/3.2.0:/opt/ruby/gems/3.2.0:/var/lang/lib/ruby/gems/3.2.0 \ 11 | RUBYLIB=/var/task:/var/runtime/lib:/opt/ruby/lib \ 12 | BUNDLE_SILENCE_ROOT_WARNING=1 13 | 14 | COPY --from=0 /var/runtime /var/runtime 15 | COPY --from=0 /var/lang /var/lang 16 | COPY --from=0 /var/rapid /var/rapid 17 | 18 | # Add these as a separate layer as they get updated frequently 19 | RUN pipx install awscli==1.* && \ 20 | pipx install aws-lambda-builders==1.2.0 && \ 21 | pipx install aws-sam-cli==1.15.0 && \ 22 | gem update --system --no-document && \ 23 | gem install --no-document bundler -v '~> 2.1' 24 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-x86_64/build/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:ruby3.2-build-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-x86_64/build/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:ruby3.2-build" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-x86_64/run/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM amd64/amazonlinux:2 2 | 3 | RUN yum install -y tar gzip 4 | 5 | RUN curl https://docker-lambda.s3.amazonaws.com/fs/ruby3.2-x86_64.tgz | tar -zx -C /opt 6 | 7 | FROM mlupin/docker-lambda:provided.al2-x86_64 8 | FROM mlupin/docker-lambda:base-x86_64 9 | 10 | ENV PATH=/var/lang/bin:$PATH \ 11 | LD_LIBRARY_PATH=/var/lang/lib:$LD_LIBRARY_PATH \ 12 | AWS_EXECUTION_ENV=AWS_Lambda_ruby3.2 \ 13 | AWS_EXECUTION_ARCH=x86_64 14 | 15 | COPY --from=0 /opt/* /var/ 16 | 17 | COPY --from=1 /var/runtime/init /var/rapid/init 18 | 19 | USER sbx_user1051 20 | 21 | ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"] 22 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-x86_64/run/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | docker build --progress plain --squash -t mlupin/docker-lambda:ruby3.2-x86_64 . 6 | -------------------------------------------------------------------------------- /runtimes/ruby3.2-x86_64/run/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | export PUBLISH_DATE=$(date "+%Y%m%d%H%M") 6 | export NO_ARCH_TAG="mlupin/docker-lambda:ruby3.2" 7 | export BASE_IMAGE="${NO_ARCH_TAG}-x86_64" 8 | 9 | docker tag ${BASE_IMAGE} ${BASE_IMAGE}-${PUBLISH_DATE} 10 | docker push ${BASE_IMAGE} 11 | docker push ${BASE_IMAGE}-${PUBLISH_DATE} 12 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | var should = require('should') 2 | require('child_process').spawnSync = mockSpawnSync 3 | 4 | var dockerLambda = require('.') 5 | 6 | var captured = {} 7 | var mockReturn 8 | function mockSpawnSync(cmd, args, options) { 9 | captured.cmd = cmd 10 | captured.args = args 11 | captured.options = options 12 | return mockReturn 13 | } 14 | function resetMock(returnVal) { 15 | mockReturn = returnVal || { status: 0, stdout: '{}' } 16 | } 17 | 18 | // Should return defaults if calling with no options 19 | resetMock() 20 | var result = dockerLambda() 21 | captured.cmd.should.equal('docker') 22 | captured.args.should.eql([ 23 | 'run', 24 | '-v', 25 | __dirname + ':/var/task', 26 | '--rm', 27 | 'mlupin/docker-lambda:nodejs14x', 28 | 'index.handler', 29 | '{}', 30 | ]) 31 | captured.options.should.eql({ encoding: 'utf8' }) 32 | result.should.eql({}) 33 | 34 | // Should use env vars if asked to 35 | resetMock() 36 | result = dockerLambda({ addEnvVars: true }) 37 | captured.cmd.should.equal('docker') 38 | captured.args.should.eql([ 39 | 'run', 40 | '-v', 41 | __dirname + ':/var/task', 42 | '--rm', 43 | '-e', 44 | 'AWS_REGION', 45 | '-e', 46 | 'AWS_DEFAULT_REGION', 47 | '-e', 48 | 'AWS_ACCOUNT_ID', 49 | '-e', 50 | 'AWS_ACCESS_KEY_ID', 51 | '-e', 52 | 'AWS_SECRET_ACCESS_KEY', 53 | '-e', 54 | 'AWS_SESSION_TOKEN', 55 | '-e', 56 | 'AWS_LAMBDA_FUNCTION_NAME', 57 | '-e', 58 | 'AWS_LAMBDA_FUNCTION_VERSION', 59 | '-e', 60 | 'AWS_LAMBDA_FUNCTION_MEMORY_SIZE', 61 | '-e', 62 | 'AWS_LAMBDA_FUNCTION_TIMEOUT', 63 | '-e', 64 | 'AWS_LAMBDA_FUNCTION_HANDLER', 65 | '-e', 66 | 'AWS_LAMBDA_EVENT_BODY', 67 | '-e', 68 | 'DOCKER_LAMBDA_USE_STDIN', 69 | 'mlupin/docker-lambda:nodejs14x', 70 | 'index.handler', 71 | '{}', 72 | ]) 73 | captured.options.should.eql({ encoding: 'utf8' }) 74 | result.should.eql({}) 75 | 76 | // Should return spawn result if asked to 77 | resetMock({ status: 0, stdout: 'null' }) 78 | result = dockerLambda({ returnSpawnResult: true }) 79 | result.should.eql({ status: 0, stdout: 'null' }) 80 | 81 | // Should not fail if stdout contains logging 82 | resetMock({ status: 0, stdout: 'Test\nResult\n{"success":true}' }) 83 | result = dockerLambda() 84 | result.should.eql({ success: true }) 85 | 86 | // Should not fail if stdout contains extra newlines 87 | resetMock({ status: 0, stdout: 'Test\nResult\n\n{"success":true}\n\n' }) 88 | result = dockerLambda() 89 | result.should.eql({ success: true }) 90 | 91 | // Should return undefined if last stdout entry cannot be parsed 92 | resetMock({ status: 0, stdout: 'Test\nResult\nsuccess' }) 93 | result = dockerLambda() 94 | should.not.exist(result) 95 | 96 | // Should return undefined when function was successful but there is no stdout 97 | resetMock({ status: 0, stdout: '' }) 98 | result = dockerLambda() 99 | should.not.exist(result) 100 | 101 | // Should throw error if spawn returns error 102 | resetMock({ error: new Error('Something went wrong') }) 103 | var err 104 | try { 105 | result = dockerLambda() 106 | } catch (e) { 107 | err = e 108 | } 109 | err.should.eql(new Error('Something went wrong')) 110 | 111 | // Should throw error if spawn process dies 112 | resetMock({ status: 1, stdout: 'wtf', stderr: 'ftw' }) 113 | try { 114 | result = dockerLambda() 115 | } catch (e) { 116 | err = e 117 | } 118 | var expectedErr = new Error('wtf') 119 | expectedErr.code = 1 120 | expectedErr.stdout = 'wtf' 121 | expectedErr.stderr = 'ftw' 122 | err.should.eql(expectedErr) 123 | 124 | console.log('All Passed!') 125 | -------------------------------------------------------------------------------- /tests/native-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CMD="BUILD_ONLY=true npm install --build-from-source \ 4 | bcrypt \ 5 | bignum \ 6 | grpc \ 7 | hiredis \ 8 | iconv \ 9 | kerberos \ 10 | leveldown \ 11 | murmurhash-native \ 12 | node-cmake \ 13 | serialport \ 14 | snappy \ 15 | sqlite3 \ 16 | unix-dgram \ 17 | v8-profiler \ 18 | websocket \ 19 | webworker-threads \ 20 | x509 \ 21 | node-sass 22 | " 23 | 24 | docker run --rm \ 25 | -e PATH=/var/lang/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin \ 26 | -e LD_LIBRARY_PATH=/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib \ 27 | -e AWS_EXECUTION_ENV=AWS_Lambda_nodejs12.x \ 28 | -e NODE_PATH=/var/runtime:/var/task:/var/runtime/node_modules \ 29 | -e npm_config_unsafe-perm=true \ 30 | mlupin/lambda-base:build-x86_64 sh -c "$CMD" && echo "Success!" 31 | --------------------------------------------------------------------------------