Node.js에서 Lambda 코드를 실행할 때 발생하는 ‘모듈을 가져올 수 없음’ 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 7월 26일

Node.js에서 AWS Lambda 코드를 실행하려고 할 때 ‘모듈을 가져올 수 없음’ 오류를 수신합니다.

간략한 설명

일반적으로 Lambda 환경에서 Node.js 코드에 지정된 라이브러리를 찾을 수 없는 경우 이 오류가 발생합니다. 이는 Lambda가 모든 Node.js 라이브러리와 함께 사전 패키징되지 않았기 때문입니다.

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

참고: 다음 단계에서는 배포 패키지가 아닌 Lambda 계층을 생성하는 방법을 보여 줍니다. 이는 여러 Lambda 함수에서 Lambda 계층을 재사용할 수 있기 때문입니다. 각 Lambda 런타임은 PATH 변수에 특정 /opt 디렉터리 폴더를 추가합니다. 계층이 동일한 폴더 구조를 사용하는 경우 Lambda 함수의 코드는 경로를 지정하지 않고 계층 콘텐츠에 액세스할 수 있습니다.

중요: Node.js용으로 가져오는 라이브러리를 nodejs/node_modules 폴더에 넣습니다.

해결 방법

Lambda 런타임이 기반으로 하는 운영 체제에서 Lambda 계층을 생성하는 것이 가장 좋습니다. 예를 들어, 모든 Node.js 버전은 Amazon Linux 2 Amazon Machine Images(AMI)를 기반으로 합니다.

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) 역할을 생성합니다. 그런 다음 EC2 인스턴스에 IAM 역할을 연결합니다.

참고: 이제 EC2 인스턴스에 publish-layer-version API 호출을 위해 Lambda 계층을 업로드할 수 있는 권한이 있습니다.

3.    EC2 인스턴스에 연결한 다음 Node.js를 설치합니다.

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
$ . ~/.nvm/nvm.sh
$ nvm install node

4.    nodejs 폴더를 생성합니다.

$ mkdir nodejs

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

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

참고: aws-xray-sdk 예제 라이브러리를 가져올 Node.js 라이브러리로 바꿉니다.

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

$ zip -r layer.zip nodejs

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

7.    Lambda 계층을 게시합니다.

$ aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes nodejs12.x --region us-east-1