배포 패키지를 업로드할 때 Lambda "permission denied" 또는 "unable to import module" 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 4월 10일

AWS Lambda 배포 패키지 파일을 업로드했는데, 오류가 발생했습니다. 무엇이 문제이며, 수정하려면 어떻게 해야 합니까? 

간략한 설명

잘못된 권한과 관련된 문제는 지속적 통합 애플리케이션에서 생성된 패키지에서 흔하게 발생합니다. Lambda 배포 패키지 .zip 또는.jar 파일에 대해 설정한 보안 권한이 잘못된 경우 파일을 업로드하려고 할 때 오류가 발생합니다. Lambda에는 배포 패키지의 코드 파일 및 종속 라이브러리에 대한 글로벌 읽기 권한이 필요합니다.

참고: Lambda는 POSIX 권한을 사용하므로, Lambda 배포 패키지를 구축할 때 POSIX 호환 운영 체제를 사용하는 것이 좋습니다(예: Linux, Unix 또는 macOS). 구축 환경 및 실행 환경의 권한 모델 간 패리티로 권한 문제가 발생할 가능성을 낮출 수 있습니다.

개발용으로 Windows를 사용하는 경우 권한 문제를 수정해야 한다면 다음 중 하나를 수행하여 Linux 환경을 설정할 수 있습니다.

​해결 방법

오류 원인 식별

Lambda 함수 코드를 작성할 때 사용한 언어에 따라 오류 메시지에서 오류 원인이 명확하지 않을 수도 있습니다. 예를 들어, Node.js 함수에서 오류는 명확합니다.

{
  "errorMessage": "EACCES: permission denied, open '/var/task/index.js'",
  "errorType": "Error",
  "stackTrace": [
    "Object.fs.openSync (fs.js:641:18)",
    "Object.fs.readFileSync (fs.js:509:33)",
    "Object.Module._extensions..js (module.js:578:20)",
    "Module.load (module.js:487:32)",
    "tryModuleLoad (module.js:446:12)",
    "Function.Module._load (module.js:438:3)",
    "Module.require (module.js:497:17)",
    "require (internal/module.js:20:19)"
  ]
}

Python 함수의 경우에는 오류를 식별하기 더 까다로울 수 있습니다. 예를 들어, 다음과 같습니다. 

Unable to import module 'index': No module named index

또는 외부 라이브러리에서 필수 권한이 누락된 경우 다음을 수행합니다. 

Unable to import module 'index': No module named exlib

배포 패키지에 대한 권한 수정

참고: 이 명령은 Linux/Unix/macOS 시스템에 대해서만 유효합니다.

1.    (선택 사항) CLI(명령줄 인터페이스)에서 zipinfo를 실행하여 배포 패키지의 권한을 확인합니다. 자세한 내용은 Lambda 배포 패키지에 대한 권한 정책을 참조하십시오.

2.    CLI에서 다음 명령을 실행하여 반복적으로 권한을 수정합니다.

$ chmod 644 $(find /tmp/package_contents -type f)$ chmod 755 $(find /tmp/package_contents -type d)

3.    권한을 수정한 후 다시 배포 패키지를 업로드합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?