見出し画像

AWS Lambdaでopenai apiを使用する際の詰まりどころ

AWS Lambdaでopenai apiを使用したかったのですが、色々とエラーが起こったので備忘録を残しておきます。自分用のメモですが一応。

他に何か思い出したら追記します。

参考サイト様ありがとうございます。何か問題や間違い等ございましたらお手数ですがご指摘ください。


①ランタイムのタイムアウトを3秒→1分程度にしておく

Lambdaは最初、タイムアウトまでの時間が3秒に設定されています。

openai apiを用いてリクエストを送った場合、結果が返ってくるまでに3秒以上の時間がかかる場合がほとんどです。(UI上でChatGPTに質問をした時も3秒以上かかることがほとんどですよね、そういうものです🙃)

そのため、「設定」→「一般設定」からタイムアウトまでの時間をある程度伸ばしておき、生成に時間がかかる場合に対応する必要があります。

3分は長すぎる気もする

②fast APIのバージョンを昔のものに変更しておく

参考サイト様


openaiのライブラリをlambda上で利用しようとすると、以下のようなエラーが起こることがあります。

Unable to import module 'lambda_function': No module named 'pydantic_core._pydantic_core

openaiと依存関係のあるfastapiのバージョンが新すぎる?ことが問題らしいです。
解決策としては、fastapiのバージョンを下げることみたいです。

mkdir python
pip install -t ./python fastapi==0.99.0
zip -r fastapi.zip ./python

上記のzipをレイヤーにしてください。

③(場合による)Lambdaと同じ環境下でpip installしたライブラリをレイヤーに追加する

参考サイト様


Lambda関数はAmazon Linux2で動いているため、その環境下でpip installしたopenaiのパッケージをレイヤーに登録しなければ、環境が異なる故のエラーが起きてしまいます。

Unable to import module 'なんとか': cannot import name 'かんとか' from 'うんとか' 

Docker Desktopを用いてLambdaに近い環境を作り、その中でpip installを行い、ライブラリのzipファイルを作成してレイヤーにすればいいかと思います。(それかCloud9等で行うか?)

④(場合による)urllibのバージョンをv1に戻し、requestsのエラーを防ぐ

参考サイト様


Lambdaでrequestsを使おうとした時、以下のようなエラーが生じる場合があります。

[ERROR] Runtime.ImportModuleError:
Unable to import module 'lambda_function':
cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_' (/var/task/urllib3/util/ssl_.py)
Traceback (most recent call last):

botocoreを使用した時に問題が生じる模様。
urllib3のバージョンをv2以降からv1以前のものに変更(ダウングレード?)すればいいらしい。

mkdir python
pip install -t ./python urllib3==1.26.16
zip -r fastapi.zip ./python

上記のzipをレイヤーにしてください。

その他

何かありましたらコメント等で教えてください。


この記事が気に入ったらサポートをしてみませんか?