0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C++拡張を含むPythonパッケージをLambdaレイヤー化する

Posted at

環境

  • Windows 11 Pro
  • Windows PowerShell 5.1
  • Python 3.13

概要

AWS Lambdaにカスタムレイヤーとして、
Pythonの"mojimoji"ライブラリを登録する際に行ったことを記載します。

事象

Windows環境下で"mojimoji"パッケージをzip化したものを
カスタムレイヤーに登録して実行したところ、動作しなかった。

原因としては"mojimoji"が、CythonとC++による拡張を含んでいるためである。
Windows環境下でビルドしているため、Lambdaの実行環境(Amazon Linux)では
互換性がなく実行できない状態でした。

対応策

Dockerを利用して、Amazon Linux上でパッケージzipを作成します。

利用するのは、Lambda関数の実行用として用意されたDockerイメージです。
想定される用途とは異なりますが、こちらを利用して作業を進めます。

PowerShellでの作業

ターミナルを利用し、任意のフォルダ配下に移動した後で
イメージをダウンロードし、環境を起動してコンテナ内へ移動します。

# 任意のディレクトリ配下に移動
cd working_dir
# Lambda実行環境のDockerイメージを取得
docker pull amazon/aws-lambda-python:3.13-x86_64
# 取得したイメージのコンテナに入る
docker run -v "$(pwd):/var/task" -it --rm --entrypoint /bin/bash amazon/aws-lambda-python:3.13-x86_64

コンテナ内に入る際、カレントディレクトリと/var/taskをマウントしています。
こうすることで、コンテナ内で作成したパッケージzipをホスト側で取得できます。

コンテナ内に入ってからの作業

C++コンパイラのインストールからはじめます。
その後は、"mojimoji"のパッケージを作ってからzip化します。

# c++のコンパイラをインストールする
dnf install gcc-c++ -y
# "mojimoji"を取得し、パッケージ化する
pip install mojimoji -t python/lib/python3.13/site-packages/
# パッケージをzip化する
zip -r layer.zip python
# コンテナ環境から抜ける
exit

途中の、python/lib/python3.x/site-packages/のパッケージ構造は
Lambda Layerの標準的な構造であり変更ができない部分となります。

カスタムレイヤーとしての登録

作成したパッケージzipを、Lambdaのカスタムレイヤーとして登録します。
実行したところ、Lambdaで正常に動作することも確認済みです。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?