Skip to content

Node.js에서 Lambda 코드를 실행할 때 발생하는 "Cannot find module" 또는 "Cannot find Package" 오류를 해결하려면 어떻게 해야 합니까?

3분 분량
0

Node.js에서 AWS Lambda 코드를 실행하면 "Cannot find module" 또는 "Cannot find Package" 오류가 발생합니다.

간단한 설명

사용자의 Lambda 환경이 Node.js 코드에서 지정된 라이브러리를 찾을 수 없는 경우, 이러한 오류 중 하나가 발생합니다. 이러한 오류는 Lambda에 모든 Node.js 라이브러리가 미리 패키징되어 있지 않기 때문에 발생합니다.

CommonJS에 모듈이 없는 경우 다음 오류가 발생합니다. Runtime.ImportModuleError: Error: Cannot find module.

JavaScript ES6에 모듈이 없는 경우 다음 오류가 발생합니다. Error [ERR_MODULE_NOT_FOUND]: Cannot find package.

해결 방법

이러한 오류를 해결하려면, Node.js 코드에서 사용자가 사용하려는 라이브러리가 포함된 배포 패키지 또는 Lambda 계층을 생성합니다.

Node.js 런타임 16과 이전 버전에서는, Lambda가 계층을 이룬 JavaScript ES 모듈 종속성을 지원하지 않습니다. 배포에는 종속성을 포함해야 합니다. Lambda는 Node.js 20에 대해 JavaScript ES 모듈 종속성을 지원합니다.

배포 패키지 대신 Lambda 계층을 생성하면 여러 Lambda 함수에서 계층을 재사용할 수 있습니다. 각 Lambda 런타임은 특정 /opt 디렉터리 폴더를 PATH 변수에 추가합니다. 계층에서 동일한 폴더 구조를 사용하는 경우, Lambda 함수의 코드는 특정 경로 없이 계층 콘텐츠에 액세스할 수 있습니다.

중요: Node.js용으로 가져오는 라이브러리는 nodejs/node_modules 폴더 구조 내에 있어야 합니다.

Lambda 지원 런타임의 기반이 되는 운영 체제(OS)와 동일한 운영 체제에 Lambda 계층을 생성하는 것이 좋습니다. 예를 들어 최신 버전의 Node.js는 Amazon Linux 2023 Amazon Machine Image(AMI)를 기반으로 합니다.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

Node.js 라이브러리에 대한 Lambda 계층을 생성하려면 다음 단계를 완료하십시오.

  1. Amazon Linux 2 AMI에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 생성합니다.

  2. publish-layer-version API를 호출할 권한이 있는 AWS Identity and Access Management(IAM) 역할을 생성합니다.

  3. Amazon EC2 인스턴스에 IAM 역할을 연결합니다.
    참고: 이제 EC2 인스턴스에는 publish-layer-version API 호출을 위한 Lambda 계층을 업로드할 권한이 있습니다.

  4. SSH를 사용하여 EC2 인스턴스에 연결합니다.

  5. Node.js를 설치합니다.

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash$ . ~/.nvm/nvm.sh
    nvm install node
    
  6. nodejs 폴더를 생성합니다.

    mkdir nodejs
    
  7. nodejs 폴더에 aws-xray-sdk 라이브러리를 설치합니다.

    cd nodejs$ npm init  ***answer all queries for initialization that create a package.json file***
    npm install --save aws-xray-sdk
    

    참고: aws-xray-sdk 예제 라이브러리를 사용자가 가져오려는 Node.js 라이브러리로 바꾸십시오.

  8. aws-xray-sdk 라이브러리에 대한 zip 아카이브를 생성합니다.

    zip -r layer.zip nodejs
    

    참고: aws-xray-sdk 라이브러리는 Node.js 계층에 필요한 폴더 형식인 nodejs/node_modules로 되어 있습니다.

  9. Lambda 계층을 게시하려면 다음 publish-layer-version 명령을 실행합니다.

    aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes nodejs12.x --region your-region
    

    참고: your-region을 해당 AWS 리전으로 바꿉니다.

코드에 ECMAScript 6(ES6) 또는 CommonJS 모듈을 추가하려면 JavaScript ES6/CommonJS 구문을 참조하십시오.

관련 정보

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

Node.js용 Lambda 배포 패키지를 빌드하려면 어떻게 해야 합니까?

AWS 공식업데이트됨 3달 전
댓글 없음