📜
Amazon Lambda Layer (Python 3.11) に載せるzipを Mac ローカル環境のDockerコンテナ上で作成する
Amazon Lamber Layerを MacのDockerコンテナ上で作成する
概要
Lambda Layerは下記の資料等に書いてますが、Lambdaで利用できない外部パッケージをLambdaで利用できるようにするために使用します。今回は requests
パッケージを使えるようにしたかったのが発端です。
ChatGPT:
Amazon Lambda Layer:
以下手順(順々に実行していけばLayerを作成できる)
このような構成になっています。
app-root-dir
├── Dockerfile
├── layer.zip
└── requirements.txt
1 directory, 3 files
必要なファイルの準備
- Dockerfile
- requirements.txt(必要なPythonパッケージを記載)
Dockerfileの構成
Bash
FROM amazonlinux:2023
# Python 3.11のインストール
RUN dnf install -y python3.11 python3.11-devel python3.11-pip zip
# 作業ディレクトリの作成
WORKDIR /layer
# requirements.txtをコピー
COPY requirements.txt .
# Pythonパッケージのインストール
RUN python3.11 -m pip install -r requirements.txt -t python/lib/python3.11/site-packages/
# レイヤーのパッケージング
RUN zip -r layer.zip python/
- Amazon Linux 2023をベースイメージとして使用
- Python 3.11と必要なツールをインストール
- requirements.txtからパッケージをインストール
- Pythonパッケージを適切なディレクトリ構造でインストール
- 最終的にzip形式でパッケージング
requirements.txt に必要なパッケージを記載
必要なパッケージを記載
requirements.txt
requests
1. Dockerイメージのビルド
Bash
docker build -t lambda-layer .
2. コンテナの作成と層のコピー
Bash
docker cp temp:/layer/layer.zip .
Bash
docker create --name temp lambda-layer # docker cp 用にコンテナを作成する
docker cp temp:/layer/layer.zip . # コンテナ内で作成したlayer.zipをローカルにコピーする
docker rm temp # コンテナは不要なので削除
3. AWS Lambda Layerの作成
Bash
aws lambda publish-layer-version \
--layer-name my-python-layer \
--description "Python dependencies layer" \
--zip-file fileb://layer.zip \
--compatible-runtimes python3.11
注意点:
- Lambda Layerのディレクトリ構造は重要で、
python/lib/python3.11/site-packages/
という形式を守る必要があります - パッケージのインストール先とzipファイルの構造が正しいことを確認してください
- AWS CLIがインストールされ、適切に設定されていることを確認してください
Discussion