2016-10-08 18 views
1

httplib2がPython Lambda関数で動作しないという問題があります。AWS Lambda:httplib2でのモジュール初期化エラー

import httplib2 

    h = httplib2.Http() 

    def handler(event=None, context=None): 
     return 'ok' 

    if __name__ == "__main__": 
     print handler() 

httplib2 0.9.2はテストケースコードと同じディレクトリに展開されている:

は、私は次のテストケースを持っています。

私は、ラムダに次のエラーを取得:モジュールの初期化エラー:「をモジュール」オブジェクトは、ローカルマシン上で予想通り何の属性「のHttp」

テストケースは機能していません。

2番目のコード行をコメントアウトすると、Lambdaで動作します。

配布バンドルからlibを除外すると、インポートが失敗するため、他のhttplib2は使用されません。

ここで何が起こっているのですか?このエラーは私のプロジェクトを完全にブロックしています。

答えて

0

AWSラムダにコードをアップロードすると、ジップファイルを作成してアップロードする前に、依存関係をローカルディレクトリにインストールしていることを確認してください。ラムダがあなたのインポートを見つけることができないとき、通常、 'モジュール'オブジェクトは属性 'Http'を持ちません。私はあなたのディレクトリ内に次の操作を行い推薦:

pip install httplib2==0.9.2 -t . 

あなたは「ツリー/ F」を実行している場合あなたのディレクトリには、次のようになります

Your directory 
│ simple_http_get.py 
│ 
└───httplib2 
    │ cacerts.txt 
    │ iri2uri.py 
    │ __init__.py 
    │ 
    └───__pycache__ 
      iri2uri.cpython-35.pyc 
      __init__.cpython-35.pyc 

あなたのPythonのコードベースの場合は(簡単な-HTTP-を使用してget.py)を実行するには、以下を試してください。私は 'ハンドラ'をlambda_handlerに変更しました。これは、コードを変更しない限り、コードのデフォルトエントリポイントです。

import httplib2 


def lambda_handler(event, content): 
    """ entity point into lambda function """ 
    # GET request to google 
    h = httplib2.Http() 
    (response_headers, content) = h.request("http://www.google.com", "GET") 

    # response_headers will contain the response code from the GET request 
    response_code = None 
    if response_headers.status == 200: 
     return 'ok' 
    else: 
     return 'error' 

    return response_code 


if __name__ == "__main__": 
    """ entry point for testing function locally """ 
    response_code = lambda_handler(event=None, content=None) 
    print(response_code) 
+0

前述したように、私はhttps2と同じディレクトリに乳首コードを持っています。私がそれを削除すると、初期化エラーではなくインポートエラーが発生し、見つかったと考えられます。ディレクトリツリーは一致します。 – Mikael

+0

上記の例がLambdaで動作することを確認できますか?それでは、ラムダサービスではなくPythonインストールで問題を見つけることに集中することができます。ありがとう。 – Mikael

関連する問題