[小ネタ]AWS Lambda(Python)でYAMLのモジュールを使う

2024.04.30

こんにちは。
繁松です。

はじめに

Lambdaで「Unable to import module 'lambda_function': No module named 'yaml'」のようなエラーが発生したことはありませんか?
このエラーは、Lambda実行時に指定したライブラリが見つからないことが原因で発生します。
エラーを解決するには、必要なライブラリを含んだデプロイパッケージを作成する必要があります。

今回はCloudShellでYAMLモジュールを利用するのに必要なデプロイパッケージを作成してみたので紹介します。

やってみた

Lambda関数が作成済みであることを前提とします。

手順

  1. CloudShellを開き以下のコマンドでPyYAMLパッケージをインストールします。
    コマンド

    pip install pyyaml -t /tmp/lambda_function
  2. ディレクトリを移動します。
    cd /tmp/lambda_function
  3. lambda_function.pyファイルを作成します。(この例ではYAMLファイルを読み込んでその内容をレスポンスとして返す関数を定義しています。)
    例:

    lambda_function.py

    import yaml  
      
    def lambda_handler(event, context):  
        with open('example.yaml', 'r') as file:  
            data = yaml.safe_load(file)  
        return {  
            'statusCode': 200,  
            'body': str(data)  
        }
  4. YAMLファイルを作成し、読み込みたいYAMLデータを記述します。
    例:

    example.yaml

    name: Shigematsu  
    address:  
        city: Kumamoto  
        country: Japan
  5. 圧縮したLambda関数のデプロイパッケージを作成します。
    zip -r /tmp/lambda_function.zip .
  6. Lambda関数にzipファイルをアップロードします。
    aws lambda update-function-code --function-name Lambda関数名 --zip-file fileb:///tmp/lambda_function.zip
  7. 動作確認
    コンソールからテストを実行し、YAMLファイルが正しく読み込まれていることを確認できました。

さいごに

AWS LambdaでPythonの外部モジュールを使用する際は、デプロイパッケージを作成する必要があります。
今回はYAMLモジュールの例を紹介しましたが、同様の手順で他のモジュールも利用できます。