계층을 사용하는 AWS Lambda의 Easy-Peazy 노드 종속성

"Cannot find module Runtime.ImportModuleError" 오류가 발생했습니까?

솔직히 AWS Lambdas의 큰 판매 포인트 중 하나는 회전 속도가 매우 빠르다는 것이라고 생각했습니다. 그러나 npm/yarn 종속성이 없는 NodeJs 메서드는 무엇입니까? 농담이지만 ​​AWS Lambda 코드 편집기에서 핸들러 기능을 실행npm install하고 계속 편집하는 쉬운 방법이 없다는 사실을 알고 실망했습니다.

방법이 있습니다: 레이어. Lambda 함수에서 layers을 사용하면 AWS 코드 편집기 UI를 통해 NodeJs 종속성을 가져올 수 있습니다. 단계는 다음과 같습니다.
  • Compress Dependencies
  • Create a Layer
  • Attach Layer & Deploy Lambda



  • 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, use require('/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 편집기에서 코드를 업데이트합니다. 행복한 레이어링!

    좋은 웹페이지 즐겨찾기