- 전체
- 명
- 오늘 찾아주신 분
- 명
AWS Lambda 에서 Node.js 를 사용하게 되면 Lambda 내에서 사용할 수 있는 AWS SDK 는 v2 버전으로 되어있다. 그러나 AWS SDK 문서에서는 v3 가 나왔으니 v3 를 사용하도록 유도를 하고 있는 상태이다. 비동기 처리하는 것이나 데이터 전송, 기타 등등의 성능이 좋아졌다고 얘기를 하고 있기도 하다.
일단 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 문서를 참조하도록 한다.
그래서 이 방식으로 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 로 개발하는 것도 고민해보면 좋을 것 같다.
[AWS] ECS 에 Docker 연동하기 -3- (서비스/클러스터 생성) (1) | 2022.11.21 |
---|---|
[AWS] ECS 에 Docker 연동하기 -2- (ECS Task 정의) (0) | 2022.11.18 |
[AWS] ECS 에 Docker 연동하기 -1- (ECR 리포지토리 생성) (0) | 2022.11.18 |
[AWS] S3 에서 Lambda 를 통해 Cloudfront 바로 배포하기 (0) | 2022.07.28 |
[AWS] SES + 카페24 호스팅 연동하기 (W. no-reply 전송) (0) | 2022.02.04 |