📜

Amazon Lambda Layer (Python 3.11) に載せるzipを Mac ローカル環境のDockerコンテナ上で作成する

2024/11/08に公開

Amazon Lamber Layerを MacのDockerコンテナ上で作成する

概要

Lambda Layerは下記の資料等に書いてますが、Lambdaで利用できない外部パッケージをLambdaで利用できるようにするために使用します。今回は requests パッケージを使えるようにしたかったのが発端です。

ChatGPT:

Amazon Lambda Layer:
https://qiita.com/t_okkan/items/394a15577bd1aad46ec3

以下手順(順々に実行していけば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