AWS_CDK
최근 어떤 유튜브 영상에서 CS 세계의 방향성에 대한 얘기를 봤다. 인프라를 추상화해서 관리하고 비즈니스 로직에 집중하는 방향으로 흐른다는 영상이었다.
사실 개발을 처음 시작한 지 아직 1년도 안됐기 때문에 개발 업계의 방향성에 대해서 느껴지는 바는 없지만, 최근 AWS를 다룰 일이 많아지면서 AWS lambda, 서버리스 등의 단어를 자주 접했고, 해당 개념에 대해 궁금해 찾아보니 인프라의 추상화, 비즈니스 로직에 집중이라는 말을 어느 정도 이해할 수 있었다.
서버리스? AWS lambda?
서버리스는 서버가 없다는 뜻이 아니라 서버를 직접 관리할 필요가 없는 (혹은 적은) 아키텍처를 뜻한다. 일반적으로 알고 있는 Firebase 같은 서버리스 아키텍처는 BaaS로 Backend as a Service를 뜻하고, 최근 많은 곳에서 사용하고 있는 AWS lambda의 경우 FaaS로 Function as a Service를 뜻한다.
즉 함수 단위로 쪼개서 사용자가 직접 관리하지 않는 서버에 올리는 것이다. (따로 Ec2를 빌리지 않고 함수 단위의 실행이 있을 때만 lambda 서버를 빌려서 사용하게 된다.)
lambda는 AWS 콘솔에서 작성하는 것은 약간의 문제가 있다. 만약 구성할 함수의 비지니스 로직이 한 두개 밖에 없다면 전혀 문제될 것이 없겠지만, 수백개의 비지니스 로직을 콘솔에서 관리해야 한다면 끔찍하기 때문에 이럴때 사용할 수 있는 것으로 IaC (AWS cdk)가 있다.
IaC (Infrastructure as Code)
IaC는 말 그대로 인프라 구성을 코드를 통해 자동으로 구축, 관리하는 것이다. json, yaml과 같은 양식으로만 가능했지만, 최근에는 Typescript와 같이 우리에게 익숙한 개발언어를 통해 추상화된 인프라 구성할 수 있는 AWS cdk가 나왔다. (사실 최근은 아님)
IaC 레퍼런스 자료들을 찾다 보면 Terraform이 굉장히 많이 나오고 한글로 만들어진 강의도 많다. 하지만 개인적으로 AWS에 의존해서 개발을 해야 하기 때문에 AWS CDK를 사용해보려고 한다.
AWS CDK 초기 설정
AWS IAM 설정
- 엑세스 키 체크
- admin 그룹에 추가
AWS CDK 기본 명령어
- cdk install :
sudo npm i -g aws-cdk //aws-cdk 설치
cdk --version //버전 체크
- cdk setting :
aws configure // 입력 후 access key 등등 세팅
- cdk command :
cdk init app --language typescript //cdk 기본파일 구조 생성 (폴더에 아무것도 없어야함)
cdk synth // cdk.out 폴더 생성 (yml 형태를 볼 수 있음)
cdk bootstrap // 한 번만 실행하면 됨. cloudformation에 등록(?) 하는 명령어
cdk deploy // 스택 배포
cdk deploy --all // 모든 스택 배포
cdk deploy cdkPracStack // 특정 스택 배포 (스택이름 : cdkPracStack)
cdk list // stack list 보기
cdk diff // 이전에 배포했던 스택들이랑 현재 작성된 스택들 비교해줌
AWS CDK_lambda npm (node_modules는 어떻게?)
AWS CDK를 사용해서 lambda를 배포할 때 간단한 함수라면 문제가 없겠지만, npm dependency들을 사용하게 될 경우 어떻게 배포를 해야 할까?
다행히 AWS lambda에서는 여러가지 기능을 제공하는데 그 중 가장 간편한 방법은 lambda-nodejs를 사용하는 것이다.
- 설치 명령어
npm install --save-dev esbuild@0
- 일반 lambda와 lambda-nodejs 코드 비교
// 일반 lambda
const helloLambda = new LambdaFunction(this, "helloLambda", {
runtime: Runtime.NODEJS_16_X,
code: Code.fromAsset(join(__dirname, "..", "services", "hello")),
handler: "hello.main",
});
// lambda-nodejs
// 디펜던시에 대한 부분이 없어도 알아서 배포됨. 개꿀
const helloLambdaNodeJs = new NodejsFunction(this, "helloLambdaNodeJs", {
entry: join(__dirname, "..", "services", "node-lambda", "hello.ts"),
handler: "handler",
});
AWS CDK_lambda test (배포전 로컬에서 테스트 하는 방법)
AWS CDK를 이용해 lambda 작성하고 배포하게 되면 한가지 문제가 있었다. 바로 배포 후에 테스트를 진행해야 하는 것이다. 사실 배포 후 테스트하는 것은 전혀 문제가 되지 않지만 lambda가 호출에 따라서 과금이 되기때문에 금액적으로 신경이 쓰일 수 밖에 없었다.
배포 전 테스트할 수 있는 방법 중 하나로 IDE에서 제공하는 디버깅 모드를 사용해서 테스트하는 방법이 있다. 아래에서는 vscode에서 진행했다.
먼저 add configurations -> nodejs 를 선택해 launch.json 파일을 생성한 후 아래 코드를 작성해준다.
- launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug Local file",
"runtimeArgs": ["-r", "ts-node/register"],
"args": ["${relativeFile}"],
"env": {
"AWS_REGION": "eu-west-1"
}
}
]
}
그리고 디버깅을 원하는 곳에 앤드포인트(?)를 생성하고, 테스트 실행용 코드를 생성해 실행한다.
- 테스트 실행용 코드
import { handler } from "../../services/node-lambda/hello";
handler({}, {});
'AWS' 카테고리의 다른 글
AWS www.도메인 -> 도메인 리디렉션 (0) | 2022.09.29 |
---|---|
AWS_ASG (0) | 2022.09.28 |