AWS CloudShellを利用して簡単にAWS Lambda (Python)のLambda Layerを作成する

2023.09.22

データアナリティクス事業本部のueharaです。

今回は、AWS CloudShellを利用して簡単にAWS Lambda (Python)のLambda Layerを作成してみたいと思います。

はじめに

今回はLambdaのランタイムはPython 3.9を想定することにします。

こちらのページに記載の通り、Python 3.9ランタイムは「Amazon Linux 2」上で動作しています。

したがって、基本的にはLambda Layer用のzipファイルについてもAmazon Linux 2上で作成した方が安全です。

Amazon LinuxはDockerイメージが公開されているため、当該イメージを用いてzipファイルを作成することもできますが、今回はAWS CloudShellを利用してLayerを作成する方法をご紹介します。

CloudShellを利用することで、ローカル環境にレイヤー作成用の環境を用意せずにLambda Layerを作成することが可能です。

AWS CloudShellについて

AWS CloudShellはWebブラウザ(AWSマネージメントコンソール)上からお手軽にシェルを実行出来るサービスです。

ローカルにあるファイルを画面上からアップロードすることもできます。

2023年9月現在、CloudShellのOSは「Amazon Linux 2」となっております。

使い方は非常に簡単で、マネジメントコンソールから「CloudShell」を検索し、サービスに移動するだけでシェルの利用を開始することができます。

念のため、OSを確認したところ、以下のようにAmazon Linux 2であることが確認できました。

CloudShellで実行

$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

ちなみに、アーキテクチャはx86_64となっていました。

CloudShellで実行

$ uname -m
x86_64

CloudShellを使ったLambda Layerの作成

CloudShellへのPython 3.9のインストール

まず、CloudShellへPython 3.9のインストールをします。

インストール方法については、以前以下の記事でご紹介しております。

上記でご紹介しているBashスクリプトの実行が完了すると、CloudShell上でPython 3.9が利用できるようになっています。

CloudShellで実行

$ which python3.9
~/.local/bin/python3.9

$ which pip3.9
~/.local/bin/pip3.9

Lambda Layer作成用のスクリプトの実行

まず、インストールしたいライブラリを記載したrequirements.txtを作成し、CloudShell上にアップロードします。

requirements.txt

numpy==1.23.0
pandas==1.4.3
python-dateutil==2.8.2
pytz==2022.1
pyarrow==8.0.0
six==1.16.0

次に、以下のLambda Layer作成用のスクリプトを作成し、こちらもCloudShell上にアップロードします。

make_lambda_layer.sh

#!/bin/bash -eu

BUCKETNAME=$1
LAYERNAME=$2
SRC=./python
DIST=./layer.zip

pip3.9 install -t ${SRC} -r requirements.txt
rm -f ${DIST}
zip -q -r ${DIST} ${SRC}

aws s3 cp ./layer.zip s3://$BUCKETNAME/layer/layer.zip
aws lambda publish-layer-version \
    --layer-name $LAYERNAME \
    --compatible-runtimes python3.9 \
    --content S3Bucket=$BUCKETNAME,S3Key=layer/layer.zip

この時点で、CloudShell上のファイルは次のようになっていると思います。

あとは、以下のコマンドでスクリプトを実行するだけでLambda Layerの作成ができます。
※S3のバケットは事前に作成済みであることを想定します

$ bash make_lambda_layer.sh <zipファイルを保存するS3のバケット名> <Lambda Layer名>
# 例: bash make_lambda_layer.sh test-uehara-bucket test-uehara-layer

実行が完了すると、以下の通りLambda Layerが作成できていることを確認できます。

最後に

今回は、今回は、AWS CloudShellを利用して簡単にAWS Lambda (Python)のLambda Layerを作成してみました。

参考になりましたら幸いです。

参考文献