CPUアーキテクチャごとにLambda Layerを作成する方法まとめ

Lambda

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
スポンサーリンク
Lambda
Developer Note
タイトルとURLをコピーしました