.zip 파일 아카이브를 사용하여 Node.js Lambda 함수 배포 - AWS Lambda

.zip 파일 아카이브를 사용하여 Node.js Lambda 함수 배포

AWS Lambda 함수의 코드는 스크립트 또는 컴파일된 프로그램과 해당 종속 항목으로 구성됩니다. 함수 코드는 배포 패키지를 사용하여 Lambda에 배포합니다. Lambda는 컨테이너 이미지 및 .zip 파일 아카이브의 두 가지 배포 패키지를 지원합니다.

.zip 파일 아카이브에 대한 배포 패키지를 만들려면 명령줄 도구에 기본 제공 .zip 파일 아카이브 유틸리티 또는 다른 .zip 파일 유틸리티(예: 7zip)를 사용할 수 있습니다. .zip 파일을 배포 패키지로 사용하려면 다음 요구 사항에 유의하세요.

  • .zip 파일은 Lambda에서 함수의 코드와 함수 코드를 실행하는 데 사용되는 종속성(해당되는 경우)을 포함해야 합니다. 함수가 표준 라이브러리 또는 AWS SDK 라이브러리에만 의존하는 경우 이러한 라이브러리를 .zip 파일에 포함하지 않아도 됩니다. 이러한 라이브러리는 지원되는 Lambda 런타임 환경에 포함되어 있습니다.

  • .zip 파일이 50MB보다 큰 경우 Amazon Simple Storage Service(Amazon S3) 버킷에서 함수에 업로드하는 것이 좋습니다.

  • 배포 패키지에 네이티브 라이브러리가 포함된 경우 AWS Serverless Application Model(AWS SAM)를 사용하여 배포 패키지를 빌드할 수 있습니다. AWS SAM CLI sam build 명령을 --use-container와 함께 사용하여 배포 패키지를 만들 수 있습니다. 이 옵션은 Lambda 실행 환경과 호환되는 도커 이미지 내부에 배포 패키지를 빌드합니다.

    자세한 내용은 AWS Serverless Application Model 개발자 안내서sam 빌드를 참조하세요.

  • 함수의 이 명령 세트 아키텍처와 호환되도록 배포 패키지를 빌드해야 합니다.

  • Lambda는 POSIX 파일 권한을 사용하므로 .zip 파일 아카이브를 만들기 전에 배포 패키지 폴더에 대한 사용 권한을 설정해야 할 수 있습니다.

Prerequisites

AWS CLI은(는) 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다. 이 섹션의 단계를 완료하려면 다음이 필요합니다.

종속 프로그램이 없는 함수 업데이트

Lambda API를 사용하여 함수를 업데이트하려면 UpdateFunctionCode 작업을 사용합니다. 함수 코드가 포함된 아카이브를 만들고 AWS Command Line Interface(AWS CLI)를 사용하여 업로드합니다.

종속 항목이 없는 Node.js 함수를 업데이트하려면

  1. .zip 파일 아카이브를 만듭니다.

    zip function.zip index.js
  2. 패키지를 업로드하려면 update-function-code 명령을 사용합니다.

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    다음 결과가 표시됩니다:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

추가 종속 프로그램이 있는 함수 업데이트

함수가 AWS SDK for JavaScript 외의 다른 라이브러리를 사용하는 경우 npm을 사용하여 배포 패키지에 포함시킵니다. 로컬 환경의 Node.js 버전이 함수의 Node.js 버전과 일치하는지 확인합니다. 네이티브 코드를 사용하는 라이브러리가 있는 경우 Amazon Linux 환경을 사용하여 배포 패키지를 생성합니다.

런타임에 포함된 버전보다 최신 버전이 필요한 경우 또는 향후에 버전이 변경되지 않도록 하려면 SDK for JavaScript를 배포 패키지에 추가할 수 있습니다.

배포 패키지에 네이티브 라이브러리가 포함된 경우 AWS Serverless Application Model(AWS SAM)를 사용하여 배포 패키지를 빌드할 수 있습니다. AWS SAM CLI sam build 명령을 --use-container와 함께 사용하여 배포 패키지를 만들 수 있습니다. 이 옵션은 Lambda 실행 환경과 호환되는 도커 이미지 내부에 배포 패키지를 빌드합니다.

자세한 내용은 AWS Serverless Application Model 개발자 안내서sam 빌드를 참조하세요.

또는 Amazon Linux 환경을 제공하는 Amazon EC2 인스턴스를 사용하여 배포 패키지를 생성할 수 있습니다. 지침은 AWS 컴퓨팅 블로그의 AWS에서 패키지 및 네이티브 nodejs 모듈 사용을 참조하세요.

종속 프로그램이 있는 Node.js 함수를 업데이트하려면

  1. 명령줄 터미널 또는 셸을 엽니다. 로컬 환경의 Node.js 버전이 함수의 Node.js 버전과 일치하는지 확인합니다.

  2. 배포 패키지용 폴더를 생성합니다. 다음 단계에서는 폴더 이름이 my-function이라고 가정합니다.

  3. npm install 명령을 사용하여 node_modules 디렉터리에 라이브러리를 설치합니다.

    npm install aws-xray-sdk

    그러면 다음과 유사한 폴더 구조가 생성됩니다.

    ~/my-function ├── index.js └── node_modules ├── async ├── async-listener ├── atomic-batcher ├── aws-sdk ├── aws-xray-sdk ├── aws-xray-sdk-core
  4. 프로젝트 폴더의 내용을 포함한 .zip 파일을 생성합니다. r (재귀) 옵션을 사용하여 zip이 하위 폴더를 압축하는지 확인합니다.

    zip -r function.zip .
  5. update-function-code 명령을 사용하여 패키지를 업로드합니다.

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    다음 결과가 표시됩니다:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

코드 및 라이브러리 외에도, 배포 패키지가 실행 파일 및 기타 리소스를 포함할 수 있습니다. 자세한 내용은 AWS Lambda 컴퓨팅 블로그의 AWS에서 임의의 실행 파일 실행을 참조하세요.