質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

1658閲覧

ECRからのTA-Lib実行時、"libta_lib.so.0: cannot open shared object file: No such file or directory" を解消したい

_whitecat_22

総合スコア1305

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/06/06 07:10

編集2021/06/06 21:39

ECRコンテナイメージを利用したLambda関数にて、TA-Libを用いることを試みています。
Dockerでのビルドまでは上手く行くのですが、その後、関数実行時に、"libta_lib.so.0: cannot open shared object file: No such file or directory" とエラーが発生してしまいます。

これの解消方法をいろいろと試し、現在、下記のようなDockerfile、docker-compose.ymlの構成となっていますが、一向に解決しません。
知見をお持ちの方、ぜひ解決方法をご教示願えませんでしょうか。

  • Dockerfile

Dockerfile

1FROM public.ecr.aws/lambda/python:3.8 2ENV AWS_DEFAULT_REGION ap-northeast-1 3 4RUN pip3 install --upgrade pip 5RUN yum update -y 6RUN yum groupinstall "Development Tools" -y 7RUN yum -y install wget 8RUN yum -y install tar 9RUN yum -y install gzip 10 11RUN export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH 12 13RUN wget --quiet http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -O ta-lib-0.4.0-src.tar.gz && \ 14 tar -zxvf ta-lib-0.4.0-src.tar.gz && \ 15 cd ta-lib/ && \ 16 ./configure --prefix=/usr && \ 17 make && \ 18 make install && \ 19 cd .. && \ 20 python3 -m pip install ta-lib && \ 21 rm -R ta-lib ta-lib-0.4.0-src.tar.gz 22 23RUN pip install pipenv 24WORKDIR /workspace 25CMD pipenv install && \ 26 pipenv run dev 27 28RUN pip3 install -t ./ Image 29 30ADD . . 31 32COPY handler.py ${LAMBDA_TASK_ROOT} 33 34RUN pip3 install -r requirements.txt -t /var/task && \ 35 zip -9 deploy_package.zip handler.py && \ 36 zip -r9 deploy_package.zip * 37 38CMD mkdir lib 39CMD cp -pa /lib64/libta_lib.so.0* ./lib/ 40CMD ls -l ./lib 41 42CMD sudo -s 43CMD echo "include /usr/local/lib" >> /etc/ld.so.conf 44CMD ldconfig 45CMD ln -s /usr/local/lib/ /usr/local/ 46 47CMD sudo find / -name libta_lib.so.0 48CMD sudo vi /etc/profile 49CMD export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib 50CMD :wq 51CMD source /etc/proflie 52 53CMD [ "handler.lambdahandler" ]
  • handler.py (+関連する.pyファイル)

本文中の字数制限に抵触するため、リンクを貼っておきます。

https://github.com/whitecat-22/stock_price_chart/blob/main/handler.py

  • ログ

Terminal

1{ 2 "errorMessage": "Unable to import module 'handler': libta_lib.so.0: cannot open shared object file: No such file or directory", 3 "errorType": "Runtime.ImportModuleError", 4 "stackTrace": [] 5}
START RequestId: eabdc8a8-a22f-4e07-88b4-dda1582b5bb6 Version: $LATEST Import Error - unzip_requirements OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k [WARNING] 2021-06-06T07:01:46.095Z Matplotlib created a temporary config/cache directory at /tmp/matplotlib-i7nui6jm because the default path (/home/sbx_user1051/.config/matplotlib) is not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing. [ERROR] Runtime.ImportModuleError: Unable to import module 'handler': libta_lib.so.0: cannot open shared object file: No such file or directory Traceback (most recent call last): END RequestId: eabdc8a8-a22f-4e07-88b4-dda1582b5bb6 REPORT RequestId: eabdc8a8-a22f-4e07-88b4-dda1582b5bb6 Duration: 4599.39 ms Billed Duration: 4600 ms Memory Size: 1024 MB Max Memory Used: 80 MB

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

  • RUN cp -pa /usr/local/lib/libta_lib.so.0* /var/task/ とすることで解決しました。

Dokerfile

1FROM public.ecr.aws/lambda/python:3.8 2ENV AWS_DEFAULT_REGION ap-northeast-1 3 4# install build libs 5RUN yum groupinstall -y "Development Tools" \ 6 && yum install -y which openssl 7 8RUN yum -y install wget 9RUN yum -y install tar 10RUN yum -y install gzip 11 12# install TA-Lib 13WORKDIR /tmp 14RUN wget --quiet http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -O ta-lib-0.4.0-src.tar.gz && \ 15 tar -zxvf ta-lib-0.4.0-src.tar.gz && \ 16 cd ta-lib/ && \ 17 ./configure --prefix=/usr/local/ && \ 18 make && \ 19 make check && \ 20 make install && \ 21 cd .. && \ 22 python3 -m pip install TA-Lib && \ 23 rm -R ta-lib ta-lib-0.4.0-src.tar.gz 24 25RUN export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH 26 27RUN cp -pa /usr/local/lib/libta_lib.so.0* /var/task/ 28 29RUN python3 -m pip install --upgrade TA-Lib --user --global-option='build_ext' --global-option="-I/usr/local/include" --global-option="-L/usr/local/lib" 30 31RUN python3 -m pip install numpy 32 33COPY ./requirements.txt /opt/ 34RUN python3 -m pip install --upgrade pip && \ 35 python3 -m pip install -r /opt/requirements.txt -t /var/task 36 37WORKDIR /var/task 38COPY handler.py . 39# COPY slack.py . 40# COPY twitter.py . 41 42CMD [ "handler.lambdahandler" ]

投稿2021/08/08 07:48

_whitecat_22

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ECRコンテナイメージを利用したLambda関数

これはLambda Layerに登録したコンテナイメージを利用しているのか、Lambda Functionとしてコンテナイメージをデプロイしているのかが紛らわしいのでわかるように記載いただければと思います。

書き方を見るに恐らく後者(Lambda Functionとしてコンテナイメージをデプロイ)だろうと推測して記載します
(handlerをコンテナイメージに含めているのが一応の根拠です)

Dockerfileの記載に複数の問題があります。

  • CMDを複数行記載している

CMDを複数行記載していますが、CMDは最後の一つ以外は実行されません
CMD
※日本語版を貼っていますが、日本語版はやや古いのでDockerのドキュメントはなるべくなら英語版を見ることをお勧めします。一応確認しましたが、下記引用部分は英語版も同じことを書いています。
つまるところCMD [ "handler.lambdahandler" ]以外は実行されません。
handler.pyを動かすのがここで定義しているDockerコンテナ上なので、Dockerコンテナ上に色々設定しておきましょう。

Dockerfile では CMD 命令を 1 つしか記述できません。 仮に複数の CMD を記述しても、最後の CMD 命令しか処理されません。

CMD 命令の主目的は、コンテナの実行時のデフォルト処理を設定することです。 この処理設定においては、実行モジュールを含める場合と、実行モジュールを省略する場合があります。 省略する場合は ENTRYPOINT 命令を合わせて指定する必要があります。

  • Dockerfile上でviを実行しようとしている

結果的には上記の通り実行されていないので問題になりませんでしたが、恐らくviで/etc/profileを編集しようとしている箇所はうまく行かないと思います。
viはテキストエディタで、当然インタラクティブに入力を受け取ってテキストを編集するツールです。
コマンドラインでファイルを編集したいのであればテキストエディタを呼び出すのではなくコマンドで追記や置換をしましょう
また、仮に書いてあるコマンドをそのまま手で打ったとしても、viは編集したい場合インサートモードにする必要があるので恐らく想定通りの編集結果にはならないと思います。
今回はLambdaを動かすときに必要な環境変数を定義したいだけなので、わざわざ/etc/profileを編集しなくてもENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/libで十分な気がします。
ENV

ちなみに、Lambda上でdocker-composeは使わないのでdocker-compose.ymlは関係ありません。
handler.pyは貼ったほうがいいとは思います。

また、コンテナ化したPythonプログラムをLambdaで動かすにあたっては、まずこのあたりをご参照ください。
コンテナイメージで Python Lambda 関数をデプロイする
Lambda関数をコンテナイメージで動かしてみた
AWS Lambda with Container Image で MeCab (NEologd) を動かしてみた

投稿2021/06/06 20:10

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_whitecat_22

2021/06/06 21:42

yu_1985様 ありがとうございます。 handler.pyについては、本文中の字数制限(~10,000字)から、リンクのみを貼り付けておきました。 リンク先をご参照いただければ幸いです。 >恐らく後者(Lambda Functionとしてコンテナイメージをデプロイ) ご推察の通り、functionとしてイメージをデプロイしています。 ご教示いただいた文献も確認してみますが、handler.py等を含めて、何かお気付きの点がございましたら、改めてご指摘いただけましたら大変助かります。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問