cannot find module error
람다에서 외부 모듈을 사용하기 위해 이런저런 방식을 찾아보던 중
- 직접 함수 자체에 node module 추가
- 모듈이 포함된 레이어 생성
이렇게 크게 두 가지 방법이 존재한다고 한다.
레이어를 만들어 필요한 함수에 추가해서 사용하는게 좋을 것 같다고 판단
이유
-> 여러 함수에서 동일한 기능을 사용하게 될 것 같음
-> 공통적으로 사용하는 코드 부분에 수정 시 함수마다 다 직접 넣어버리면 싹 다 바꿔야 함
-> 반면, 레이어로 관리하면 그 레이어 하나만 수정하면 됨
레이어 생성 과정
(한글로 번역되어 있어서 그거 기준으로 작성)
1. lambda > 계층 탭에서 계층 생성 버튼 클릭
호환 아키텍처와 런타임 설정은 선택사항이긴 하지만
사용하려는 함수와 호환되도록 아키텍처와 런타임을 설정해 주자.
이렇게 생성이 되고, 버전 관리도 가능하다 👍
Lambda 함수로 이동
레이어 함수 연결 연결하려는 함수로 이동해서 계층을 찾아간다.
아마 밑으로 쭉쭉 내리다 보면 있을 것이다.
지금은 추가되어 있는 상태이긴 한데
[Add a layer]을 누른다.
이렇게 함수의 런타임과 아키텍처가 나오고,
방금 생성한 레이어를 연결해 줄 것이니 사용자 지정 계층을 선택한 뒤, 방금 생성한 layer을 선택한다.
아까 layer에서 버전 관리도 가능하다고 했는데,
함수마다 사용할 layer을 선택한 뒤 버전까지 한 번 더 선택이 가능하기 때문에
재사용성에도 좋고 협업에도 좋을 듯하다.
오류 발생
분명 레이어를 생성한 다음 함수와 연결하면
모듈을 자유롭게 불러다가 사용할 수 있다고 하던데...
왜 계속 경로를 찾을 수 없다고 하는 건지 이해할 수 없었다..
경로는 분명 맞는데.. 이러면서 한동안 삽질을 했다....
수많은 스택오버플로우 글들을 뒤져보다가 너무 진행이 지체되는 것 같아
도움!!
을 외쳤는데 해결이 됐다.
짱이다..
정리해 보자면..
원래는 내가 레이어에 올린 zip 파일이
nodejs.zip
ㄴnode_modules
ㄴ 모듈 파일들....
ㄴpackage.json
ㄴpackage-lock.json
이런 형식이었는데
nodejs.zip
ㄴnodejs
ㄴnode_modules
ㄴ 모듈 파일들
....
ㄴpackage.json
ㄴpackage-lock.json
이렇게 ZIP 파일 안에 파일을 한 단계 더 넣어지도록(?)
수정해서 다시 레이어에 올려봤다.
그랬더니 됨...... (오열)
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/packaging-layers.html
계층 콘텐츠 패키징 - AWS Lambda
계층 콘텐츠 패키징 Lambda 계층은 추가 코드 또는 데이터를 포함하는 .zip 파일 아카이브입니다. 계층에는 일반적으로 라이브러리 종속 항목, 사용자 지정 런타임 또는 구성 파일이 포함됩니다.
docs.aws.amazon.com
아 여기에도 나와있네,,,,,ㅎ
스스로가 바보가 된 느낌이랄까..
경로 문제면서 코드에만 문제가 있을 것이라고 생각한 바보멍충..
🥲
'AWS' 카테고리의 다른 글
[AWS] SAM Deployment Guide (0) | 2024.02.02 |
---|---|
[AWS] API Gateway란? (0) | 2024.01.24 |
[AWS] Lambda 함수란? (0) | 2024.01.19 |