2016-08-01 4 views
2

모든 정책과 트리거와 함께 AWS에 Lambda 스크립트를 작성하는 Python 스크립트가 있습니다. 나는 파이썬 boto3 라이브러리를 사용한다. 하드 드라이브에서 고정 zip 파일을 업로드하는 대신 람다 용 zip 파일을 on-the-fly로 작성합니다. 아래에서이 간단한 코드를 사용하여 zip 파일을 만듭니다. 그것은 아무런 문제없이 zip 파일을 만들고 내 python 코드는이 zip 파일을 람다 스크립트로 업로드하며 아무런 문제없이 AWS에서 내 lambda 스크립트를 볼 수 있습니다. 하지만 람다 스크립트를 실행하면 모듈 이름과 파일 이름이 모두 존재하고 볼 수 있음을 명확하게 볼 수 있지만 모듈에 오류가 없음을 알 수 있습니다. 모듈을 가져올AWS 용 문자열 컨텐츠에서 Zip 파일 작성하기 Python의 Lambda

수 없습니다 'XXXX 포트폴리오 (Portfolio) : 없음 모듈 이름이 XXXX

를이 코드에 의해 만들어진이 zip 파일을 클릭하고 내용을 작성하고 모든 것이 정상 보이는 것을 볼 두 배로 파일 시스템에서.

즉석에서 압축을 풀고 WinZip을 사용하여 정적으로 zip 파일을 만들고 나머지는 Python & boto3 스크립트가이 파일을 업로드하도록하면 제대로 작동합니다.

def CreateLambdaZip(self, fileName, fileContent): 
    with zipfile.ZipFile('Lambda/' + fileName + '.zip', 'w') as myzipc: 
     myzipc.writestr(fileName + '.py', fileContent) 
     myzipc.close() 

Zip 파일의 경우 Aws Lambda에 필요한 몇 가지 특수 헤더를 건너 뜁니다. 그런 것이 있습니까? 파일 시스템에서 파이썬 코드로 생성 된 zip 파일과 WinZip으로 생성 된 zip 파일은 완전히 동일하기 때문입니다. 그래서 람다 스크립트에는 아무 문제가 없다는 것을 압니다.

업데이트 : 위의 코드 조각을 사용하여 만든 zip 파일을 읽는 아래 코드를 사용하여 zip 파일을 업로드하고 있습니다. 내가 zipFile.read()를 사용하는 경우

with open('Lambda/'+ fileName +'.zip', 'rb') as zipFile: 
    func = boto3.client("Lambda").create_function(
       FunctionName=lambdaFunction, 
       Runtime='python2.7', 
       Role=role['Role']['Arn'], 
       Handler= fileName + "." + functionName, 
       Description=description, 
       Timeout=10, 
       MemorySize=256, 
       Publish=True, 
       Code={'ZipFile': zipFile.read()}, 
      ) 

은 내가 윈집을 사용하여 압축 할 때 동일한 콘텐츠에 대한 2 개의 다른 헤더를 얻을 내가 파이썬의 모듈을 사용하여 압축 할 때.

b'PK\x03\x04\x14\x00\x00\x00\x00\x00\xe4~\x01IO\x96J=Z\x07\x00\x00Z\x07\x00\x00\x19\x00\x00\x00schedule-ec2-snapshots.pyimport json\nimport boto3\nimport time\nfrom datetime import date, timedelta\n\nprint(\'Loading scheduled EC2 backup actions\')\n\ndef create_snapshots(event, context):\n """\n Lambda function that executes daily snapshots for the instances that 

및 파이썬

를 사용하여 프로그래밍 방식으로 만들어지는 Zip 파일은 WinZip을

나는 당신이 정확히 같은 문제를 경험 한
b'PK\x03\x04\x14\x00\x02\x00\x08\x004X\xfcH\x88\x1f\xce\xb5&\x03\x00\x00b\x07\x00\x00\x19\x00\x00\x00schedule-ec2-snapshots.py\x8dU]k\[email protected]\x10|7\xf4?,\nA\x12qL\xda\x06B\r~I\x93Bh\x9b\x87&\xf4E\x15\xe1\xac[\xdb\xd7HwBw2\t\xc1\xff\xbd{+\xeb\xcb.\xb4\n\xc4\xba\xdb\xd1\xec\xce\xdc\xae\xa4\x8a\xd2T\x0e~[\xa3\'\xaa\xb9_\x1ag>\xb6\x0b\xa7\n\x9c\xac*S\x80\x14\x0e\xfd\n\xf6\x11\xbf\x9er\\b\xee\xc4dRVJ\xbb(\xfcf\x84Tz\r6\xdb\xa0\xacs\x94p\xfb\xf9\x03,E\xf6\\\x97 
+0

명령 줄에서 파일의 압축을 해제하십시오. 무엇을 씁니까? –

+0

이 zip 아카이브를 업로드하는 방법, 사용중인 cli 명령은 무엇입니까? –

+0

@ b.b3rn4rd CLI를 사용하고 있지 않습니다. boto3.client ("lambda"). create_function을 사용하는 py 스크립트를 실행 중입니다. 업데이트 된 코드 위 –

답변

0

만든 ZipFile를. 내 솔루션은 비행 zip 파일에 사용하지 마십시오. 실제 zip 파일을 만들고 실제 파일을 추가하면 작동합니다. 람다 환경에서도 "/tmp/yourfile.txt"와 같은 파일 경로를 만들어 람다를 실행할 때 실제 파일을 임시로 생성 할 수 있습니다.