AWS Lambdaで「No module named 'pytz'」エラーが発生したときの対処方法

2019.01.28

環境

  • AWS Lambda
  • Python 3.7
  • macOS Mojave 10.14.2

AWS Lambdaでサードパーティーモジュールを使えるようにする

AWS Lambdaでサードパーティーモジュールを使うためには、モジュールをAWS Lambdaにアップロードする必要がある。 モジュールのアップロードはZipファイルかAmazon S3のみ対応しているので、今回はZipファイルでアップロードしてみる。

なお、AWS Lambda上でコードを編集しつつ、任意のZipファイルを任意のタイミングでアップロードすることはできないようなので注意が必要。

方法としては以下の2通りがある。

  • 最初から全てローカルで開発して、最後にZipファイルに圧縮してAWS Lambdaにアップロードする
  • 最初にLambda関数で使うサードパーティーモジュールをアップロードして、そこにlambda_function.pyを追加してLambda関数を作っていく

後者の方法だと、最初にサードパーティーモジュールを追加した後に他のモジュールを追加したりすることはできない。 サードパーティーモジュールを利用するようなAWS Lambda関数は全てローカルで開発して最後にAWS Lambdaにアップロードするのが良さそう。

ローカルにAWS Lambdaにアップロードするコードを入れるディレクトリを作成する



# ディレクトリを作成
$ mkdir lambda_workspace

# ディレクトリに移動
$ cd lambda_workspace

# AWS Lambdaに呼び出されるハンドラを記述するファイルを作成
$ touch lambda_function.py

pytzのライブラリ本体を手に入れる



# -t:インストール先を指定してインストール
$ pip install pytz -t .

手に入れたディレクトリを先ほど作成したlambda_workspaceに入れる。

ディレクトリの中身をzip圧縮する

ディレクトリの中身だけを圧縮する必要があることに注意。



$ cd lambda_workspace
$ zip -r lambda_workspace.zip *

AWS LambdaにZipファイルをアップロードする

AWS Lambdaの関数編集画面の「関数コード」のエリアの「コード エントリ タイプ」を「.zip ファイルをアップロード」にして「アップロード」ボタンをクリックする。

AWS Lambdaで「No module named 'pytz'」エラーが発生したときの対処方法

先ほど作成したlambda_workspace.zipを選択して、「保存」をクリック。

AWS Lambdaで「No module named 'pytz'」エラーが発生したときの対処方法

関数一式がAWS Lambdaにアップロードできた。

テストしてみる

動作するかテスト。

AWS Lambdaで「No module named 'pytz'」エラーが発生したときの対処方法