Skip to content

Commit 108c14d

Browse files
authored
Add Python 3.10 runtime (#15)
1 parent af9a4a3 commit 108c14d

File tree

16 files changed

+248
-0
lines changed

16 files changed

+248
-0
lines changed

README.md

+19
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ the [AWS CLI](https://aws.amazon.com/cli/).
3434
- [nodejs18.x](#nodejs18x)
3535
- [python3.8](#python38)
3636
- [python3.9](#python39)
37+
- [python3.10](#python310)
3738
- [ruby2.7](#ruby27)
3839
- [java8.al2](#java8al2)
3940
- [java11](#java11)
@@ -166,6 +167,24 @@ Build images
166167
| x86_64 | `mlupin/docker-lambda:python3.9-build-x86_64` | `ghcr.io/mlupine/docker-lambda:python3.9-build-x86_64` |
167168
| arm64 | `mlupin/docker-lambda:python3.9-build-arm64` | `ghcr.io/mlupine/docker-lambda:python3.9-build-arm64` |
168169

170+
### python3.10
171+
172+
Runtime images
173+
174+
| Platform | Docker Hub | GitHub Container Registry |
175+
| --------- | ---------------------------------------- | ------------------------------------------------- |
176+
| Universal | `mlupin/docker-lambda:python3.10` | `ghcr.io/mlupine/docker-lambda:python3.10` |
177+
| x86_64 | `mlupin/docker-lambda:python3.10-x86_64` | `ghcr.io/mlupine/docker-lambda:python3.10-x86_64` |
178+
| arm64 | `mlupin/docker-lambda:python3.10-arm64` | `ghcr.io/mlupine/docker-lambda:python3.10-arm64` |
179+
180+
Build images
181+
182+
| Platform | Docker Hub | GitHub Container Registry |
183+
| --------- | ---------------------------------------------- | ------------------------------------------------------- |
184+
| Universal | `mlupin/docker-lambda:python3.10-build` | `ghcr.io/mlupine/docker-lambda:python3.10-build` |
185+
| x86_64 | `mlupin/docker-lambda:python3.10-build-x86_64` | `ghcr.io/mlupine/docker-lambda:python3.10-build-x86_64` |
186+
| arm64 | `mlupin/docker-lambda:python3.10-build-arm64` | `ghcr.io/mlupine/docker-lambda:python3.10-build-arm64` |
187+
169188
### ruby2.7
170189

171190
Runtime images

dump-fs/dump-python310/handler.py

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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

dump-fs/serverless.yml

+21
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,27 @@ functions:
9494
layers:
9595
- { Ref: TarARMLambdaLayer }
9696

97+
dump-python310-x86_64:
98+
handler: dump-python310/handler.lambda_handler_x86_64
99+
package:
100+
patterns:
101+
- "!**"
102+
- "dump-python310/**"
103+
runtime: python3.10
104+
architecture: x86_64
105+
layers:
106+
- { Ref: TarX86LambdaLayer }
107+
dump-python310-arm64:
108+
handler: dump-python310/handler.lambda_handler_arm64
109+
package:
110+
patterns:
111+
- "!**"
112+
- "dump-python310/**"
113+
runtime: python3.10
114+
architecture: arm64
115+
layers:
116+
- { Ref: TarARMLambdaLayer }
117+
97118
dump-ruby27-x86_64:
98119
handler: dump-ruby27/handler.lambda_handler_x86_64
99120
package:

examples/test-all.sh

+2
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ npm test
1818
cd ${EXAMPLES_DIR}/python
1919
docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:python3.8 lambda_function.lambda_handler
2020
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
2122

2223
cd ${EXAMPLES_DIR}/python
2324
docker run --rm -it mlupin/docker-lambda:python3.8-build pip install marisa-trie
2425
docker run --rm -it mlupin/docker-lambda:python3.9-build pip install marisa-trie
26+
docker run --rm -it mlupin/docker-lambda:python3.10-build pip install marisa-trie
2527

2628
cd ${EXAMPLES_DIR}/ruby
2729
docker run --rm -v "$PWD":/var/task mlupin/docker-lambda:ruby2.7 lambda_function.lambda_handler
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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==1.1.12 && \
23+
pipx install awscli==1.* && \
24+
pipx install aws-lambda-builders==1.2.0 && \
25+
pipx install aws-sam-cli==1.15.0
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
set -euxo pipefail
4+
5+
docker build --progress plain --squash -t mlupin/docker-lambda:python3.10-build-arm64 .
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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}
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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"]
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
set -euxo pipefail
4+
5+
docker build --progress plain --squash -t mlupin/docker-lambda:python3.10-arm64 .
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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==1.1.12 && \
23+
pipx install awscli==1.* && \
24+
pipx install aws-lambda-builders==1.2.0 && \
25+
pipx install aws-sam-cli==1.15.0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
set -euxo pipefail
4+
5+
docker build --progress plain --squash -t mlupin/docker-lambda:python3.10-build-x86_64 .
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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}
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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"]
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
set -euxo pipefail
4+
5+
docker build --progress plain --squash -t mlupin/docker-lambda:python3.10-x86_64 .
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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}

0 commit comments

Comments
 (0)