Tempo Di Valse

[AWS] Lambda 에서 AWS SDK for JavaScript v3 설치 방법 본문

개발/AWS

[AWS] Lambda 에서 AWS SDK for JavaScript v3 설치 방법

TempoDiValse 2022. 8. 23. 14:26

 AWS Lambda 에서 Node.js 를 사용하게 되면 Lambda 내에서 사용할 수 있는 AWS SDK 는 v2 버전으로 되어있다. 그러나 AWS SDK 문서에서는 v3 가 나왔으니 v3 를 사용하도록 유도를 하고 있는 상태이다. 비동기 처리하는 것이나 데이터 전송, 기타 등등의 성능이 좋아졌다고 얘기를 하고 있기도 하다.

 

AWS SDK for JavaScript란 무엇인가요? - AWS SDK for JavaScript

다음과 같은 프레임워크AWSAmplify JavaScript용 SDK와 동일한 브라우저 지원을 제공하지 않을 수 있습니다. 세부 정보는 프레임워크 설명서를 확인합니다.

docs.aws.amazon.com

 

일단 AWS 개발을 시작한 지 얼마 되지 않았기 때문에 새로운 SDK 에 적응할 필요성은 있어보여서 v3 를 개발하기로 했다. 그러나 Lambda 에서 v3 SDK 는 기본적으로 지원이 되지 않는 것 같으니....

 

다음은 보통의 Lambda 내에서 AWS SDK 을 사용하기 위한 선언 스타일이다. Lambda 뿐만 아니라 Javascript 내에서도 비슷한 스타일이다.

const AWS = require('aws-sdk')

exports.handler = async (event) => {
    // TODO implement
};

그리고, 새로워진 v3 의 방식은 다음과 같다.

const { ${OBJECT} } = require('@aws-sdk/client-${SERVICE}')
// or
import { ${OBJECT} } from '@aws-sdk/client-${SERVICE}'

모듈 방식을 사용하느냐 아니냐에 따라 다를 것 같은데 SDK 를 사용하는 두 방식의 차이는, v2 에서는 내가 사용하지도 않는 서비스의 소스들까지 줄줄이 가져와야 하는 비효율성이 있었다. 그러나 v3 에서는 SDK 는 내가 사용하고자 하는 서비스에 대해서만 가져와서 사용할 수 있는 점이 큰 차이인 것 같다. 그래서 '@aws-sdk/client-' 가 Prefix 로 붙고 그 다음에는 각 서비스명들이 붙게 되는데, 필요한 서비스명에 대해서는 다음 API 문서를 참조하도록 한다.

 

AWS SDK for JavaScript v3

AWS SDK for JavaScript v3 The AWS SDK for JavaScript v3 is a rewrite of v2 with some great new features. As with version 2, it enables you to easily work with Amazon Web Services, but has a modular architecture with a separate package for each service. It

docs.aws.amazon.com

그래서 이 방식으로 v3 SDK 를 Lambda 에서 사용하려 했다. 그러나,

"Cannot find module ~" 에러메세지를 뿜으며 가벼운 테스트를 종료 시켜주었다. 아무래도 내장된 SDK 는 v2 만 있는 것 같았다. 그렇다고 Lambda 에서는 NPM 을 사용할 수 없기 때문에 v2 SDK 를 지우고 v3 SDK 로 설치하는 방식은 할 수 없어서 어떻게 해야 하나 고민하며 검색해보는데, Lambda 에서 외부 라이브러리를 사용하고 싶을 경우에는 'node_modules 폴더를 고대로 Lambda 에 넣어주면 된다'는 것이다.

 

그래서 로컬 환경에서 폴더를 만들어 npm 을 통해 다운 받을 수 있는 자리를 만들었고, 다음의 명령어를 통해서 개별적으로 필요한 서비스의 SDK 를 다운로드 받았다.

$ npm install @aws-sdk/client-${SERVICE}

 

다 받은 후에는 node_modules 폴더를 어떻게 Lambda 에 옮겨야 할까? 보통 간단한 파일이면 파일 하나를 생성해서 입력하고 끝이겠지만, node_modules 에 있는 내용들을 하나하나씩 복사하여 붙여넣는다면 파일 옮기는 데에만 몇개월이 지날 것이다. 다행히도 Lambda 에 소스를 업로드하는 방식 중에는 ZIP 파일을 통해서 처리하는 방식이 있기 때문에 쉽게 node_modules 를 옮길 수 있다. 단, Lambda 는 파일이 많아지면 편집기를 보여주지 않기 때문에 정작 돌려야되는 로직을 작성 할 수가 없어진다.

 

결국에는 v3 SDK 를 사용하려면, 로컬 환경에서 Lambda 를 개발 할 수 있도록 구성을 해 주어야 한다. SDK 를 다운받은 폴더에 실제 로직을 실행할 index.js 에 handler 도 작성해주고, Lambda 에서 돌아갈 로직들을 개발해준 다음에 ZIP 파일을 통해 업로드를 시켜야 한다. Lambda 내부 환경은 아니기 떄문에 Credential 도 발급 받아준다.

 

Lambda 에 구성할 사이즈가 커진다면 로컬에서 개발도 고려하는 것이 더 편하기도 하기 때문에 로컬에서 개발한다면 v3 SDK 로 개발하는 것도 고민해보면 좋을 것 같다.

반응형
Comments