레이어를 사용해 JavaScript용 AWS SDK 최신 버전을 Node.js Lambda 함수에 통합하려면 어떻게 해야 하나요?

5분 분량
0

AWS Lambda 런타임 환경에 AWS SDK 최신 버전에서 제공하는 특정 기능이 없습니다. JavaScript용 AWS SDK 최신 버전을 Node.js Lambda 함수에 통합하려고 합니다.

간략한 설명

AWS SDK 최신 버전을 Lambda 함수의 배포 패키지에 통합하려면 Lambda 계층을 생성하세요. 그 후, 함수에 계층을 추가합니다. Lambda 계층을 생성하여 함수에 추가하려면, AWS Command Line Interface(AWS CLI) 또는 Lambda 콘솔을 사용하세요.

참고: Node.js 버전 16 이하 버전의 경우, Lambda Node.js 런타임에 JavaScript 버전 2용 AWS SDK가 포함되어 있습니다. Node.js 버전 18 이상에서는 Lambda Node.js 런타임에 JavaScript 버전 3용 AWS SDK가 포함되어 있습니다. 자세한 내용은, 현재 AWS Lambda에서 Node.js 18.x 런타임을 사용할 수 있음을 참고하세요.

전체 런타임 목록 및 Lambda에서 사용하는 AWS SDK 버전은 Lambda 런타임을 참고하세요.

참고: 다음 해결 방법을 따르면 함수 배포 패키지의 크기가 커집니다. Lambda 스토리지 할당량에 관한 자세한 내용은, Lambda 할당량을 참고하세요.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

(선택 사항) 함수에서 사용하는 AWS SDK 버전 확인

함수에서 사용하는 AWS SDK 버전을 확인하려면, 다음 단계를 따르세요.

참고: 이 방법은 Node.js 버전 16 이하에만 사용하세요.

  1. Lambda 콘솔에서 함수를 생성합니다.

  2. 함수 코드를 업데이트하여 함수를 호출할 때 함수가 사용하는 AWS SDK 버전을 반환합니다.

    const AWS = require('aws-sdk')   
    exports.handler = async (event) => {  
    return AWS.VERSION;  
    };
  3. 함수를 호출합니다.

  4. 함수가 반환한 AWS SDK 버전을 AWS SDK 설명서에 나와 있는 최신 버전의 AWS SDK와 비교하세요.

AWS SDK 최신 버전 설치 및 패키징

참고: 배포 패키지는 사용하는 Lambda 런타임과 호환되어야 합니다. Lambda 런타임에 지정된 것과 동일한 운영 체제(OS)를 런타임에 사용하는 것이 가장 좋습니다. 예를 들어, 호환되는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작합니다.

Lambda와 호환되는 로컬 개발 환경에서 다음 단계를 따르세요.

  1. 다음 명령을 실행하여 작업 디렉터리를 생성합니다.

    mkdir -p aws-sdk-layer/nodejs
  2. 다음 명령을 실행하여 작업 디렉터리로 변경합니다.

    cd aws-sdk-layer/nodejs
  3. Node.js 런타임 버전용 AWS SDK를 설치합니다.
    Node.js 16 및 이전 버전(AWS SDK 버전 2)
    AWS SDK 버전 2의 최신 버전을 설치하려면, Amazon Linux 2와 호환되는 인스턴스를 사용하여 다음 명령을 실행합니다.

    npm install aws-sdk

    자세한 내용은 자습서: Amazon EC2 인스턴스에 Node.js 설정을 참고하세요.

    참고: Lambda 리소스를 개발할 때는 Amazon Linux 2 환경을 사용하는 것이 가장 좋습니다.

    -또는-

    Windows 또는 macOS OS를 개발에 사용하는 경우, Docker를 사용하여 다음 명령을 실행하세요.

    docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:<version>" /bin/sh -c "npm install aws-sdk; exit"

    참고: 명령을 실행하기 전에, Docker 웹사이트에서 최신 버전의 Docker를 사용하고 있는지 확인하세요.

    Node.js 18 이상 (AWS SDK 버전 3)

    ](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/installing-jssdk.html)JavaScript용 SDK 설치[를 참고하세요.

    Lambda의 내장된 SDK 버전에 없는 AWS SDK 명령을 가져오면 다음과 같은 오류가 발생할 수 있습니다.

    "Runtime.UserCodeSyntaxError "Named export not found" The requested module is a CommonJS module"

    이 경우 함수 내에서 사용할 수 있도록 특정 패키지를 설치하세요. 예를 들어, 다음과 같은 Import 문을 사용합니다.

    import {DeleteQueueCommand} from "@aws-sdk/client-connect";

    이 경우 함수 내에서 특정 패키지를 사용할 수 있도록 업데이트된 클라이언트를 설치하세요.

    예를 들어, Node.js 버전 18 이상의 Lambda 함수에서 다음과 같은 Import 문을 사용합니다.

    import {DeleteQueueCommand} from "@aws-sdk/client-connect";

    이 패키지가 현재 AWS SDK 버전에 없는 경우, 로그에 다음과 같은 오류가 표시됩니다.

    ""errorType": "Runtime.UserCodeSyntaxError",
    "errorMessage": "SyntaxError: Named export 'DeleteQueueCommand' not found. 요청된 모듈 '@aws -sdk/client-connect'는 CommonJS 모듈이며, 모든 module.exports를 명명된 내보내기로 지원하지 않을 수 있습니다.\nCommonJS 모듈은 항상 기본 내보내기를 통해 가져올 수 있습니다(예: '@aws-sdk/client-connect';\nconst {DeleteQueueCommand} = pkg;\n","에서 \n\n패키지 가져오기).

    DeleteQueueCommand 패키지를 포함하고 이 오류를 해결하려면 최신 버전의 클라이언트를 설치하세요.

    npm install @aws-sdk/client-connect  
    
  4. Lambda 계층에 업로드할 .zip 파일을 생성하세요.

    zip -r ../package.zip ../
  5. (선택 사항) 설치한 AWS SDK의 버전을 확인합니다.

    cat package-lock.json

    다음 예와 유사한 출력이 표시됩니다.

    {  "requires": true,  
      "lockfileVersion": 1,  
      "dependencies": {  
        "aws-sdk": {  
          "version": "2.888.0",  
    ...

AWS CLI를 사용하여 Lambda 계층을 생성하고 함수에 추가합니다.

  1. 사용하려는 AWS SDK의 최신 버전을 포함하는 새 Lambda 계층을 생성하려면, 다음 publish-layer-version 명령을 실행합니다.

    참고: node_sdk를 내 레이어 이름으로 바꾸고 내 레이어에 레이어 설명을 넣습니다. 또한 호환되는 런타임 값을 사용하는 런타임으로 바꾸고 리전을 함수 및 레이어가 있는 AWS 리전으로 바꾸세요.

    aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes --zip-file fileb://../package.zip --region

    명령 출력에 있는 LayerVersionArn 값을 기록해 두었다가 다음 단계에서 사용하세요.

  2. 함수에 계층을 추가하려면, 다음 update-function-configuration 명령을 실행합니다.

    참고: my-function을 내 함수 이름으로 바꾸고, arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1을 내 출력의 LayerVersionArn 값으로 바꾸고, 리전을 내 리전으로 바꾸세요.

    aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 --region

    자세한 내용은, Lambda 계층 작업을 참고하세요.

Lambda 콘솔을 사용하여 Lambda 계층을 생성하고 함수에 추가합니다.

  1. Lambda 콘솔에서 레이어 페이지를 엽니다.
  2. 레이어 생성을 선택합니다. 그런 다음, 다음 값을 입력합니다.
    이름에 새 레이어의 이름을 입력합니다.
    (선택 사항) 설명 - 선택 사항에는 레이어 설명을 입력합니다.
    .zip 파일 업로드를 선택합니다.
    업로드를 선택합니다. 그런 다음, 배포 패키지.zip 파일의 이름을 선택합니다.
    (선택 사항) 호환 런타임 - 선택 사항에서 호환 가능한 런타임을 하나 이상 선택합니다.
    (선택 사항) 라이선스 - 선택 사항에 레이어에 해당하는 소프트웨어 라이선스 정보를 입력합니다.
  3. 생성을 선택합니다.
  4. Lambda 콘솔에서 함수 페이지를 연 다음 계층을 추가하려는 함수의 이름을 선택합니다.
  5. 함수 개요 아래에서 레이어를 선택합니다.
  6. 레이어 추가를 선택합니다.
  7. 레이어 선택에서 사용자 지정 레이어를 선택합니다. 그런 다음, 다음 값을 선택합니다.
    레이어 이름
    레이어 버전
  8. 추가를 선택합니다.

(선택 사항) 설정 테스트

(선택 사항) 함수가 사용하는 AWS SDK 버전 확인 섹션에 안내된 단계를 완료하여 함수를 호출합니다. 함수가 사용하는 AWS SDK 버전을 반환합니다.

사용 중인 AWS SDK의 CHANGELOG 파일에서 최신 버전의 AWS SDK를 확인할 수도 있습니다. 자세한 내용은 GitHub 웹사이트에서 JavaScript용 AWS SDK 변경 로그 또는 JavaScript용 AWS SDK V3 변경 로그를 참고하세요.

관련 정보

Lambda 프로그래밍 모델

AWS Lambda 함수 작업의 모범 사례

Node.js용 Lambda 배포 패키지를 빌드하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 6달 전