1日に1回実行されるpythonスクリプト内で再呼び出しを行う必要があります。 AWS Lambdasを使用して「リクエスト」パッケージをpython-packageにパックできません。 「モジュール 'lambda_function'をインポートできません:lambda_functionというモジュールがありません」というエラーが表示されます
事前定義されたhello_worldスクリプトに分解しました。 Zipにパックしてアップロードできます。すべてが機能します。 「インポート要求」をファイルに入れるとすぐに、このエラーが発生します。
私がすでにやったことは次のとおりです。
すべての名前は次のようになります。
最後に実行したいファイルは次のようになります。
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ファイルのルートにあることが重要です。これで問題が解決しました。
何時間もの試行錯誤の後にこのような簡単なエラーを見つけた場合、それは少し憂鬱です。
リクエストモジュールを使用するには、botocore.vendored
からrequests
をインポートするだけです。例えば:
from botocore.vendored import requests
def lambda_handler(event, context):
response = requests.get("https://example.com/")
print response.json()
this Gist を見ると、AWS lambdaに直接インポートできるその他のモジュールがわかります。
Lambdaコンソールにlambda_function.py
があると思います。最初にLambda関数展開パッケージを作成してから、コンソールを使用してパッケージをアップロードする必要があります。
project-dir
などのディレクトリを作成します(ローカル)lambda_function.py
にproject-dir
を作成し、lambda_function.py
の内容をラムダコンソールからコピーして、project-dir/lambda_function.py
に貼り付けますpip install requests -t /path/to/project-dir
project-dir
ディレクトリのコンテンツを圧縮します(ディレクトリではなくディレクトリのコンテンツを圧縮します)Lambdaコンソールに移動し、コード入力タイプでZipファイルのアップロードを選択して、展開パッケージをアップロードします。インポート要求はエラーなしで機能するはずです。
このコマンドでフォルダーパッケージをダウンロードします
pip install requests -t .
ローカルマシンでこのコマンドを実行し、作業ディレクトリをZipしてからawsにアップロードします。