LambdaからOpenAIのAPIを使用できるようにする際に色々ハマったのでノウハウをまとめておきます。Lambdaのレイヤーの作り方も解説するので参考にして下さい。
Lambdaのレイヤーについて
Lambdaのレイヤーは、Lambda関数で使用するライブラリやカスタムランタイムを共通の場所に分離して管理できる機能です。これにより、複数のLambda関数で同じコードやライブラリを共有しやすくなり、デプロイパッケージのサイズを小さく保つことができます。
レイヤーの作り方
Lambdaのレイヤーを作成するには、まず、共通のコードやライブラリをZIPファイルにまとめます。このZIPファイルには、使用する依存関係やライブラリを含めます。ZIPファイルにまとめる際のディレクトリ構造が正しくないと動かないので注意が必要です。
以下のディレクトリ構造で格納する必要があります。
layer_content.zip └ python └ lib └ python[バージョン] └ site-packages └ requests
[バージョン]
の部分にはLambda関数のランタイムの値を入力します。このディレクトリが無いと以下のエラーが発生します。
Response
{
"errorMessage": "Unable to import module 'lambda_function': No module named 'openai'",
"errorType": "Runtime.ImportModuleError",
"requestId": "ab316351-2650-4c1e-831e-4f99cfbb8e79",
"stackTrace": []
}
OpenAIライブラリのレイヤーの作り方
OpenAIのLambdaレイヤーはLinux環境で作成して下さい。Windows環境で作成すると以下のエラーが発生して動きません。
Response
{
"errorMessage": "Unable to import module 'lambda_function': No module named 'pydantic_core._pydantic_core'",
"errorType": "Runtime.ImportModuleError",
"requestId": "6c607a10-d4c0-4dbb-b948-80a76d5888c8",
"stackTrace": []
}
ネットを検索するとこの問題を回避するためにFastAPI==0.99.0をインストールする方法が見つかります。しかし、これはpydantic_coreを使用しないpydantic v1にダウングレードすることで事象を回避しています。この方法だと不要なFastAPIをインストールしてしまいますし、pydantic_coreによる性能向上の恩恵を受けられません。どうしてもLinux環境が用意できない場合にのみ、デメリットを理解したうえで行ってください。
レイヤーの登録とLambda関数へのアタッチ
管理コンソールからレイヤーの登録と関数へのアタッチを行います。
レイヤーの登録
1.レイヤーメニューからレイヤーの作成をクリックします。
2.作成したZIPファイルを選択し必要情報を入力します。ランタイムは作成したZIPファイルのディレクトリ構成と合わせてください。
関数へのアタッチ
1.アタッチする関数を選択し、レイヤーの追加をクリックします。
2.登録したレイヤーとバージョンを選択して追加をクリックします。
APIキーの登録
OpenAIのAPIを動かすにはAPIキーの情報が必要です。Lambda関数でAPIキーを使用できるように設定します。
1.設定タブの環境変数から編集をクリックします。
2.キーにOPENAI_API_KEY
を入力し、値にOpenAIから取得したAPIキーを入力します。保存をクリックします。
まとめ
LambdaでOpenAIのAPIを使えるようにするための準備について解説しました。これでAWSのサーバレスアプリケーションからChatGPTの強力な機能を使用することができるようになります。