1. ホーム
  2. python

AWS LambdaでRequests-Moduleを使用することができない

2023-09-27 17:43:18

質問

私は1日に1回実行されるpythonスクリプト内でrest-callを実行する必要があります。 AWS Lambdasを使用して、私のpython-packageに"requests"パッケージをパックすることができません。エラー: "Unable to import module 'lambda_function': lambda_functionという名前のモジュールはありません"。

hello_world の定義済みスクリプトに分解してみました。私はそれを zip にパックしてアップロードすることができます。すべてが動作します。ファイルに "import requests" を入れた途端、このエラーが発生しました。

以下は、私がすでに行ったことです。

  1. zip とプロジェクト フォルダ (サブフォルダを含む) のパーミッションは `chmod 777` に設定されています。ですから、パーミッションは問題ないはずです。
  2. スクリプト自体はルートフォルダ内にあります。ZIPファイルを開くと、直接見えます。
  3. プロジェクトのルートフォルダに、`sudo pip install requests -t PATH_TO_ROOT_FOLDER` を使って、requests パッケージをインストールしました。

全てのネーミングはこんな感じです。

  • zipファイル: lambda_function.zip
  • pyファイル: lambda_function.py
  • ハンドラメソッド: lambda_handler(event, context)
  • webconfigのハンドラ定義: lambda_function.lambda_handler

最後に実行させたいファイルはこんな感じです。

import requests
import json


def lambda_handler(event, context):
    url = 'xxx.elasticbeanstalk.com/users/login'
    headers = {"content-type": "application/json", "Authorization": "Basic Zxxxxxxxxx3NjxxZxxxxzcw==" }
    response = requests.put(url, headers=headers, verify=False)
    return 'hello lambda_handler'

私はどんな種類の助けでもうれしいです。私はすでにこの問題で何時間も使っています。

どのように解決するのですか?

私は最終的に問題を解決しました:私のZIPファイル内の構造が壊れていました。Python スクリプトとパックされた依存関係 (フォルダとして) が zip ファイルのルートにあることが重要なのです。これは私の問題を解決しました。

何時間も試して失敗した後に、このような簡単なエラーを見つけると、少し落ち込んでしまいます。