LoginSignup
0
0

More than 3 years have passed since last update.

Lambda上でmysqlclientを動かす

Last updated at Posted at 2020-09-19

概要

LambdaにてPythonを使用時、MySQLクライアントとしてmysqlclientを使うもの(SQLAlchemy等)を利用する場合、いろいろ準備が必要。

  • mysqlclient1.4.6 を使う
  • AmazonLinux2から libmysqlclient.so.18 を拾ってくる
  • libmysqlclient.so.18 をLambdaへ上げた際に、Lambda上でライブラリ用パスへ配置する

mysqlclient1.4.6 を使う

pip install mysqlclient===1.4.6

細かい原理は不明だが 2.0.1 を使おうとすると、'_mysql'がないと怒られる。。

libmysqlclient.so.18を拾ってくる

AmazonLinux2用のlibmysqlclient.so.18が必要になるのでビルドする。

コンテナ起動

docker run -it amazonlinux:2 bash

コンテナ内

libmysqlclient.so.18を入れる。

yum update -y
yum install -y gcc mysql-devel mysql-libs # /lib64/mysql/libmysqlclient.so.18 が入る

ローカルPC

docker cp等でlibmysqlclient.so.18をローカルへコピーする。

docker cp container:/lib64/mysql/libmysqlclient.so.18.0.0 local_path

libmysqlclient.so.18をLambdaに配置する際の注意

Lambdaのコンテナ上のライブラリのパスが、↓になっているので、

LD_LIBRARY_PATH=/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib

libmysqlclient.so.18 がLambdaコンテナに配置された際に上記のパスに配置されるようにする必要がある。

例:レイヤーとしてアップした場合

レイヤーのファイルは /opt 内に展開されるが、/opt/lib の位置に .so が来る必要がある。

venv/lib/site-packages 内をレイヤーとして上げる場合、venv/lib/site-packages/lib.so を入れる。

例:Lambda用のソースに紛れ込ませる場合

/var/task に展開されるので、 libを作って、その中に .so を入れる。

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