MENU

Knowledge Oasisは主にAIとAWSの知識を共有するブログです。その他ITに関する知識やまれに生活に役立つ知識も共有するかもしれません。

KOふみ
名前はKOふみ(こふみ)。独立系SIerで20年のキャリアを持ち、新人研修の講師から請負開発まで幅広く経験。現在はAIを駆使したソリューション開発に従事。資格は応用情報技術者、データベーススペシャリスト、プロジェクトマネージャー、PMP、簿記2級。AWS学習中で、将来はAWSアンバサダーを目指す。

Unable to import module ‘lambda_function’: No module named ‘openai’の対処法

Unable to import module 'lambda_function': No module named 'openai'の対処法
  • URLをコピーしました!

LambdaでOpenAIのAPIを呼び出しました。しかし、何も設定していなかったため、以下のエラーが発生しました。Lambdaで外部ライブラリを使用できるように設定していなかったので当然ですよね。今回はLambdaで外部ライブラリを使用できるようにする設定について解説します。

Response
{
  "errorMessage": "Unable to import module 'lambda_function': No module named 'openai'",
  "errorType": "Runtime.ImportModuleError",
  "requestId": "10aa9f3c-7038-4cfd-a76a-021ef2da6777",
  "stackTrace": []
}
目次

発生したエラー

エラーメッセージに「No module named」とある通り、Lambda関数から使用する外部ライブラリが読み込めていません。Lambda関数で外部ライブラリを使用するにはレイヤーを設定する必要があります。レイヤーが設定されていなければ発生しますし、レイヤーが正しく設定されていなくても発生します。

Lambdaのレイヤーとは

Lambda関数で外部ライブラリや共有モジュールをパッケージ化したものです。パッケージ化することでLambda関数間で共有することができ、Lambda関数内に外部ライブラリや共有モジュールを含める必要が無いので、Lambda関数自体が軽量になります。

レイヤーの作り方

言語によって決まったディレクトリ構成でzipに圧縮してアップロードすることでレイヤーとして登録することができます。言語ごとのディレクトリ構成は『各 Lambda ランタイムのレイヤーパス』で確認することができます。openaiのライブラリはPythonなので今回はPythonのディレクトリ構成で説明します。

Windows環境でランタイムがPython3.12の場合、以下のコマンドでopenaiのレイヤーを作成することができます。

py -m venv .python-openai-layer
cd .python-openai-layer
Scripts\activate
mkdir python\lib\python3.12\site-packages
pip install fastapi==0.99.0 -t python\lib\python3.12\site-packages
pip install openai -t python\lib\python3.12\site-packages
zip -r openai-layer.zip python

最後のzipコマンドはWindowsの標準環境では動きません。『Zip for Windows』などからダウンロードするか使っている圧縮ツールで圧縮してください。

注意点

以下のミスをすると同様に Unable to import module のエラーが発生します。

  • python3.12.0のようにランタイムのバージョン指定を間違える
    • Pythonの正式なバージョン表記ではなくLambda関数のランタイム指定に合わせる必要がありそうです
  • python\lib\site-packagesのようにランタイムのバージョン指定のディレクトリが無い
    • .shの手順をWindowsで真似るとバージョン指定のディレクトリが無い場合があるので注意しましょう

FastAPIについて

fastapi==0.99.0 をインストールしている理由については以下の記事を読んでください。

レイヤーの登録と関数へのアタッチ

作成したレイヤーはアップロードしてLambda関数にアタッチする必要があります。以下の手順で登録とアタッチを行ってください。

  • レイヤーの作成をクリックします。
    レイヤーの作成をクリックします。

まとめ

Lambda関数のレイヤーについて解説しました。私は今回初めてLambda関数のレイヤーを使いました。注意点に書いたポイントを2つともミスしてしまいレイヤーの作成に時間がかかってしまいました。この記事を読んで同様のミスをする人が減ると良いななと思います。

  • URLをコピーしました!

コメント

コメントする

目次