[amazon-web-services] AWS Lambda에서 npm 모듈을로드하는 방법은 무엇입니까?

웹 기반 편집기를 사용하여 여러 Lambda 함수를 만들었습니다. 여태까지는 그런대로 잘됐다. 이제 모듈 (예 : Q for promises)을 사용하여 모듈을 확장하고 싶습니다. 모듈을 Lambda로 가져 오는 방법을 알아낼 수 없으므로 내 기능으로 사용할 수 있습니다.

나는 통해 읽은 있지만 EC2를 설정하고 거기에서 람다 기능을 실행 포함 보인다. 함수를 만들 때 zip을 업로드하는 메커니즘이 있지만 로컬로 개발 된 함수를 보내는 것 같습니다. 웹 기반 편집기에서 작업하고 있기 때문에 이상한 워크 플로처럼 보입니다.

Lambda 함수에서 사용하기 위해 일부 모듈을 간단히 배포하려면 어떻게해야합니까?



답변

.zip파일 을 업로드하지 않고 NPM 모듈을로드 할 수는 없지만 실제로이 프로세스를 두 개의 빠른 명령 행으로 내릴 수 있습니다.

방법은 다음과 같습니다.

  1. Lambda 함수 파일을 별도의 디렉토리에 저장하십시오. 이는 npmLambda 용 패키지를 로컬로 설치 하고 Lambda에 업로드 할 내용을 격리하고 테스트 할 수 있기를 원하기 때문입니다.

  2. npm install packageName1 단계에서 생성 한 별도의 Lambda 디렉토리에 있는 동안 NPM 패키지를 로컬로 설치하십시오 .

  3. 로컬에서 실행할 때 함수가 작동하는지 확인하십시오. 코드에서 node lambdaFunc.jsexport.handler줄을 주석 처리 하여 노드에서 로컬로 실행되도록 코드를 조정할 수 있습니다.

  4. 람다의 디렉토리로 이동하여 압축 내용을 확인, 하지 디렉토리 자체를 포함 할 수 있습니다.

    zip -r lambdaFunc.zip .
    
  5. 당신이 경우 aws-cli설치 당신이 당신의 인생을 더 쉽게 만들고 싶어, 당신이 지금이 명령을 입력 할 수 있습니다,를 제안한다 :

    aws lambda update-function-code --function-name lambdaFunc \
    --zip-file fileb://~/path/to/your/lambdaFunc.zip
    

    (내가했던 것처럼 궁금하다면 위의 lambdaFunc 부분 주위에 따옴표가 없습니다)

  6. 이제 Lambda 콘솔에서 테스트 를 클릭 할 수 있습니다 .

  7. 위의 두 명령 모두에 짧은 별칭을 추가하는 것이 좋습니다. 훨씬 긴 Lambda 업데이트 명령을 위해 내가 가지고있는 것은 다음과 같습니다.

    alias up="aws lambda update-function-code --function-name lambdaFunc \
    --zip-file fileb://~/path/to/your/lambdaFunc.zip"
    

답변

.zip파일을 포함하기 위해 필요 NPM 람다 모듈. 그리고 프로덕션 코드와 마찬가지로 Lambda 웹 편집기를 사용하지 않아야하며 로컬로 개발하고 git에 커밋해야합니다.

나의 흐름 :

1) 내 Lambda 함수는 일반적으로 더 큰 프로젝트의 도우미 유틸리티이므로 / aws / lambdas를 만듭니다. 디렉토리를 .

2) 각 개별 람다 디렉토리에는 함수 코드, 종속성을 정의 하는 package.json 파일 및 / node_modules 서브 디렉토리를 포함하는 index.js 파일이 있습니다. (lambda는 package.json 파일을 사용하지 않으므로 명령을 로컬에서 실행할 수 있습니다 .)npm install

package.json :

{
  "name": "my_lambda",
  "dependencies": {
    "svg2png": "^4.1.1"
  }
}

3) npm 설치 및 압축에서 생성 된 파일이 저장소를 어지럽히 지 않도록 모든 node_modules 디렉토리와 .zip 파일을 .gitignore합니다.

gitignore :

# Ignore node_modules
**/node_modules

# Ignore any zip files
*.zip

4) npm install디렉토리 내에서 실행 하여 모듈을 설치하고 로컬에서 기능을 개발 / 테스트합니다.

5) 람다 디렉토리를 압축하고 콘솔을 통해 업로드하십시오.

( 중요 : Finder에서 Mac의 ‘압축’유틸리티를 사용하여 파일을 압축하지 마십시오! 디렉토리의 루트 내에서 CLI에서 zip을 실행해야합니다. 여기를 참조 하십시오. )

zip -r ../yourfilename.zip *

노트:

Lambda의 Linux 기반 환경에 배포 할 때 일부 플랫폼 별 모듈이 실패 할 수 있으므로 Mac에 로컬로 노드 모듈을 설치하면 문제가 발생할 수 있습니다. ( https://stackoverflow.com/a/29994851/165673 참조 )

해결책은 사용중인 Lambda Node.js 런타임에 해당하는 AMI에서 시작된 EC2 인스턴스에서 모듈을 컴파일하는 것입니다 (이 Lambda 런타임 및 해당 AMI 목록 참조 ).


Node.js의 AWS Lambda 배포 패키지-AWS Lambda를 참조하십시오.


답변

이제이 문제에 Lambda 레이어를 사용할 수 있습니다. 필요한 패키지가 포함 된 레이어를 추가하기 만하면 완벽하게 실행됩니다.

이 게시물을 따르십시오 :
https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e


답변

Serverless 프레임 워크를 사용하면 다음과 같이 할 수 있습니다.

  1. serverless.yml 파일에 다음을 추가하십시오.


plugins:
- serverless-webpack
custom:
webpackIncludeModules:
forceInclude:
- <your package name> (for example: node-fetch)

2. 그런 다음 Lambda 함수를 생성하고로 배포하십시오 serverless deploy. serverless.yml에 포함 된 패키지가 제공됩니다.

서버리스에 대한 자세한 정보 : https://serverless.com/framework/docs/providers/aws/guide/quick-start/


답변

npm 모듈은 nodejs 패키지 내에서 번들로 묶어야하고 zip으로 AWS Lambda Layers에 업로드해야합니다. 그러면 아래에서 모듈 / js를 참조하고 사용 가능한 방법을 사용해야합니다. const mymodule = require ( ‘/ opt / nodejs / MyLogger’);


답변