2016-10-08 7 views
1

https2가 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'가 없습니다.

코드의 두 번째 줄을 주석 처리하면 Lambda에서 작동합니다.

배포 번들에서 lib를 제외하면 가져 오기가 실패하므로 다른 httplib2가 사용되지 않습니다.

아이디어가 있습니까? 이 오류로 인해 프로젝트가 완전히 차단됩니다.

답변

0

AWS lambda에 코드를 업로드 할 때 압축 파일을 만들고 업로드하기 전에 로컬 디렉토리에 의존성을 설치했는지 확인하십시오. 일반적으로 '모듈'객체에는 'Http'속성이 없습니다. 람다가 가져 오기를 찾을 수없는 경우에 발생합니다. 난 당신이 디렉토리 안에 다음 않는 것이 좋습니다 것입니다 : (사용 당신이 '트리/F'를 실행하면

pip install httplib2==0.9.2 -t . 

디렉토리는 다음과 같이한다 파이썬 코드베이스에 대한

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

간단-HTTP- get.py) 다음을 시도하십시오. 노트 'handler'를 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

, 나는 유두 코드와 동일한 디렉토리에 httplib2를 가지고 있고, 내가 그것을 제거하면, 내가 가져 오기 오류 대신이 발견 믿고 날 리드 초기화 오류를 얻을. 디렉토리 트리가 일치합니다. – Mikael

+0

위의 예제가 Lambda에서 작동하는지 확인할 수 있습니까? 그렇다면 람다 서비스보다는 파이썬 설치에 문제를 찾는 데 집중할 수 있습니다. 감사. – Mikael