CPU アーキテクチャごとに Lambda Layer を用意するのは大変だと思います。
そこで arm64 版と x86_64 版の Lambda Layer を作成する方法をまとめましたので紹介します。
arm64 版の Lambda Layer を作成する
ランタイム
- Python 3.8
- arm64
Lambda Layer 作成
Amazon Linux 2 のコンテナを立てます。
FROM amazonlinux:2
ARG PYTHON_VERSION=3.8.7
RUN yum update -y && yum install -y tar gzip make gcc openssl-devel bzip2-devel libffi-devel \
&& curl https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz | tar xz \
&& cd Python-${PYTHON_VERSION} && ./configure && make && make install \
&& cd - && rm -rf Python-${PYTHON_VERSION}
ADD entrypoint.sh /
RUN yum install -y zip \
&& mkdir /python \
&& chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
pip install して zip で固めます。
#!/bin/bash -eu
SRC=/python
DIST=/dist/layer.zip
pip3 install -t ${SRC} $@
rm -f ${DIST}
zip -q -r ${DIST} ${SRC}
この例では pandas をバージョン固定で指定します。
pandas == 1.4.2
イメージをビルドして Lambda Layer を作成します。
# イメージビルド
$ docker build . -t bundle-pip-modules-for-aws-lambda-layers:python3.8
# Lambda Layer 作成
$ docker run --rm \
-v $(pwd)/requirements.txt:/requirements.txt \
-v $(pwd):/dist \
bundle-pip-modules-for-aws-lambda-layers:python3.8 \
-r requirements.txt
x86_64 版の Lambda Layer を作成する
Lambda Layer 作成
- 下記コマンドを実行し /python を zip に固めます。
- requirements.txt には適宜パッケージを追加してください。
# 公開されているイメージを利用
$ docker run --rm \
-v $(pwd):/var/task amazon/aws-sam-cli-build-image-python3.8:latest \
pip install -r requirements.txt -t python/lib/python3.8/site-packages/
# zip に固める
$ zip -r layer.zip python