흰 스타렉스에서 내가 내리지

Serverless Framework 본문

AWS

Serverless Framework

주씨. 2023. 9. 20. 17:40
728x90

Serverless Framework는 엄밀히 말해서 aws에서 제공하는 서비스는 아니고, aws 바깥에서 오픈소스로 제공되는 프레임워크다. 

 

> 기본 지식

- AWS CloudFormation

- Amazon DynamoDB

- AWS Lambda

- Node.js

 

 

> Serverless Framework

"All-in-one development & monitoring of auto-scaling apps on AWS Lambda"

 

- Serverless 아키텍처를 쉽게 구현할 수 있는 오픈소스 프레임워크 

- 기능

    - AWS Lambda의 배포 및 관리 

    - CloudFormation 기반으로 AWS의 인프라를 생성 

- 참고 사항

    - AWS Lambda에 관한 설정에 따라 기본적으로 프로비전하는 인프라 존재 

        - 예 : AWS Lambda 이벤트 타입이 HTTP 일 경우 API Gateway 자동 생성 

         - 최근에 람다 url이라는 서비스가 출시되긴 했지만, 그 이전에는 aws 에서 http 기반으로 람다를 볼 수 있는 유일한 방법은 API Gateway였고, 람다 url보다 나은 점도 있다.

Node.js 기반으로 람다 소스코드를 만들었다고 가정을 하면, 각각의 파일이 하나의 람다가 된다. 

 

 

> Serverless.yml

- AWS의 인프라와 Serverless Framework로 배포할 Lambda 함수의 정보 및 설정을 담은 파일 

- CloudFormation의 문법 사용 가능 (예 : aws:accountId 등)

- 다양한 Serverless Framework 플러그인 사용 가능 

    - 예 : 500개 리소스 제한인 CloudFormation 스택을 Nested Stack으로 만들어주는 플러그인 등

    - 500개면 충분한 리소스같지만, 하나의 람다 함수에 권한도 있어야 하고, 트리고도 있어야 하고, 클라우드워치 로그기록도 있어야 하고, IAM Role도 있어야 한다. 하나의 람다 함수라도 4~5개의 리소스들이 들어간다. 실제 대규모 프로젝트라면 500개가 꽉 찰 수도 있다. 이런 것들을 Nested Stack으로 하나의 스택에서 파생될 수 있도록 만들어주는, 분할해주는 플러그인이 있다. 

 

 

> Serverless CLI : 커맨드 라인 기반으로 서버리스를 실행할 수 있는 인터페이스

- deploy

    - --config or -c : 설정 파일을 선택 (기본 serverless.yml)

    - --function or -f : 특정 함수만을 선택해서 업데이트

    - --aws-profile : configure 되어있는 AWS 프로파일 설정 

 

 

 

# Demo - Serverless 기반 채팅

 

리액트 기반으로 프론트엔드를 만들었고 이를 S3 정적 웹 호스팅을 했다. 

그리고 데이터를 저장하기 위한 DynamoDB가 2개가 있는데, 하나는 채팅내용, 하나는 유저목록 저장

함수는 총 4개가 있는데, 채팅을 불러오는 함수, 유저목록에 추가/삭제, 채팅 입력 및 전달.

 

> 진행 순서 

- Node.JS 설치 

- yarn 설치 

- React 기반 클라이언트 실행 

- Serverless Framework 설치

- AWS CLI 설치 

- AWS IAM 사용자 생성 

- AWS Configure

- Serverless Framework 를 활용해 솔루션 배포 

- React 기반 클라이언트에 배포된 API Gateway ID 설정 

- 데모 확인 

 

소스코드를 가져온 후, yarn 명령어를 통해 dependencies를 다 가져오고 yarn start를 한다. 

마찬가지로 backend 파일에서도 yarn 명령어로 dependencies를 가져온다. 

 

 

 

IAM 유저 생성 

일단은 그냥 admin 권한 다 준다. 

액세스 키를 발급받는다. 

 

터미널에서 다음과 같은 명령어로 aws IAM 연결을 한다. 

 

이제 서버리스 프레임워크를 설치해보자. 

 

반드시 백엔드 디렉토리에서 이 명령어를 실행해보자. 

 

 

배포되는동안, CloudFormation에 들어가보자.

내부적으로 Serverless는 CloudFormation 기반으로 되어 있다. 

 

 

serverless.yml 을 살펴보자

 

 

아까 cli에서 deploy했을 때, API Gateway Endpoint를 다음과 같이 준다. 

frontend 코드에 다음과 같이 ID를 넣어준다. 

저장하면, 끝

 

실제로 잘 생성이 되었는지 DynamoDB에 가보면, 

 

 

 

실전이라면 굉장히 많은 소스코드 변화가 있을 것이다. 

기획팀에서 채팅 맨 앞에 @ 표시를 항상 하게 해주세요 한다면, 코드에 채팅을 저장하는 부분에 앞에 @를 붙일 것이다. 

해당 파일은 put.js 일텐데, 

serverless deploy --aws-profile lecture-test -f chat_put  
이라는 명령어만 치면 자동으로 빌드해서 배포해준다. 

 

이렇게 소스코드의 변환과 배포가 굉장히 쉽다. 

'AWS' 카테고리의 다른 글

Amazon EventBridge - 이벤트 매칭 규칙  (0) 2023.09.20
Serverless 서비스 기반 지진 알람  (0) 2023.09.20
이벤트 기반 아키텍처, Lambda - S3 연결 예제  (0) 2023.09.20
디커플링, SQS, SNS  (0) 2023.09.20
S3 정적 호스팅  (0) 2023.09.18