データアナリティクス事業本部の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を作成してみました。
参考になりましたら幸いです。