계층을 사용하는 AWS Lambda의 Easy-Peazy 노드 종속성
"Cannot find module Runtime.ImportModuleError"
오류가 발생했습니까?솔직히 AWS Lambdas의 큰 판매 포인트 중 하나는 회전 속도가 매우 빠르다는 것이라고 생각했습니다. 그러나 npm/yarn 종속성이 없는 NodeJs 메서드는 무엇입니까? 농담이지만 AWS Lambda 코드 편집기에서 핸들러 기능을 실행
npm install
하고 계속 편집하는 쉬운 방법이 없다는 사실을 알고 실망했습니다.방법이 있습니다: 레이어. Lambda 함수에서 layers을 사용하면 AWS 코드 편집기 UI를 통해 NodeJs 종속성을 가져올 수 있습니다. 단계는 다음과 같습니다.
1. 종속성 압축
이 단계의 목표는 람다에 필요한 종속성만 포함된 node_modules 폴더의 압축된 아카이브로 끝나는 것입니다.
이름이
nodejs
인 빈 디렉토리를 생성한 후 다음 명령을 한 줄씩 실행하여 내부에서 npm init
를 실행합니다.mkdir nodejs
cd nodejs
touch index.js
npm init -y
디렉터리가 있으면
npm i --save ...
를 사용하여 Lambda에 필요한 종속성을 설치합니다(저는 haikunator
를 예로 사용하고 있습니다).npm i --save haikunator
그런 다음 프로젝트의 기본 파일에서 종속성을 요구하거나 내보냅니다. 프로젝트에 있는 각 종속성에 대해
exports.exampleDependency = require('example-dependency')
를 작성하여 이를 수행하십시오.index.js 파일에 내보내기 문을 직접 작성하거나 CLI를 통해 아래 문을 실행할 수 있습니다(물론 자체 종속성을
haikunator
로 대체).cat > index.js
exports.haikunator = require('haikunator');
최종 index.js 파일:
exports.haikunator = require('haikunator ');
그것이 어려운 부분입니다! 이제 index.js/package.json/node_modules로 폴더를 압축해야 합니다. 압축하기 전의 디렉토리 구조는 다음과 같습니다.
2. 레이어 생성
파일을 압축했으면 AWS UI에서 Lambda > 레이어로 이동합니다. 호환되는 런타임으로
Node.js
와 함께 원하는 대로 이름이 지정된 새 계층(Lambda 함수와 독립적 - 해당 부분은 나중에 제공됨)을 생성합니다. nodejs.zip
아카이브를 레이어 코드로 업로드합니다.3. 레이어 연결 및 Lambda 배포
이것이 마지막 단계이며 Lambda에 종속성을 연결하는 부분입니다. 새 Lambda 함수를 생성하거나 기존 함수로 이동합니다. UI의 디자이너 섹션에서 "레이어"를 클릭하고 "레이어 추가"로 이동합니다.
레이어 추가 화면에 아래와 같은 내용이 표시됩니다. 사용자 정의 레이어를 선택하면 이전 단계에서 생성된 레이어(
nodejs.zip
가 업로드된 레이어)가 드롭다운에 나타납니다. "추가"를 클릭하면 준비가 완료됩니다!이제 Lambda 코드 편집기에서 npm/yarn 종속성을 사용할 수 있습니다.
Quick tip: if you followed the steps and named the zip file as directed, dependencies can be accessed via
require('dependencyName')
.
Otherwise, access your dependencies via the/opt/nameOfZip
path. For example: if you uploaded myDir.zip, userequire('/opt/myDir')
).
다음은 Lambda 함수에 있는 예제 코드입니다.
const haikunator = require('haikunator');
// if layer has custom zip name use the below
// const { haikunator } = require('/opt/nodejs');
const handler = async (event) => {
const h = new haikunator();
const response = {
statusCode: 200,
body: h.haikunate({
tokenLength: 0,
delimiter: '-'
})
};
return response;
};
exports.handler = handler;
그게 다야! 업데이트 배포 버튼을 마음대로 누르고 AWS 편집기에서 코드를 업데이트합니다. 행복한 레이어링!
Reference
이 문제에 관하여(계층을 사용하는 AWS Lambda의 Easy-Peazy 노드 종속성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/krlyric/easy-breezy-lambda-dependencies-using-layers-2n3c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)