본문 바로가기
DEVOPS/Serverless With Golang

[Serverless With Golang] 3. AWS Services for Serverless Service

by junthetechguy 2024. 7. 3.
 

TABLE OF CONTENTS

 

    1. What is the example of serverless web application?

    Serverless Framework로 만들어지는 Lamda와 함께 사용되는 AWS 서비스들이 어떻게 구성되는 케이스가 있는지 살펴보자.

    우선 Web Application을 Serverless로 구현했을 때를 생각해보자.

    백엔드의 경우 가장 먼저 Router53 즉 Domain이 있는 이 Route53 서비스를 이용해서 User가 이 특정 주소로 접근을 하게 되면 뒤에 있는 API Gateway를 통해서 Lambda가 수행이 되게 되고 이 Lambda는 DynamoDB에서 Data를 가지고 와서 User에게 전달하는 형식으로 구현하게 된다.

    또한 Frontend같은 경우에는 CloudFront와 S3를 활용해서 Static Contents(사진, HCJ 파일)와 Cognito라는 인증 서비스를 통해서 접속하려는 사용자를 AA하는 기능까지 구현할 수 있게 된다.

     

    그러면 이제 Serverless Framework로 Real-Time Streaming Data를 Processing하는 경우를 보도록 하자.

    어떤 Event가 24시간 동안 계속 발생하게 되면 이를 처리하게 되는 Logic을 Lambda로 구현하는 것으로 Lambda를 2개를 구성해서 첫번째 Lambda는 일단 Event가 발생되면 이 Event Data를 DynamoDB에 넣은 후 Monitoring 쪽에 Monitoring Metric을 주고, Alarm을 발생시키고, 두번째 Lambda는 이 Event를 S3에 적재하게 된다.

     

    2. Which AWS Services are mostly used with Serverless Framework?

    이처럼 여러 종류의 서비스 형태에 따라서 Serverless Framework로 Lambda와 AWS의 여러 서비스를 조합해서 사용한다.

    그러면 지금부터 함께 자주 쓰이는 서비스를 알아보자.

     

    첫번째는 IAM이다.

    IAM으로 Lambda가 서비스의 어디가지 접근할 수 있는지에 대해서 Policy를 만든 후 Lambda에 Role을 부여함으로서 설정할 수 있게 되고, serverless.yaml의 provider 부분에 iam을 기입함으로써 lambda에 iam role을 mapping시켜서 사용한다.

     

    두번째는 S3이다.

    이 S3는 Serverless Framework를 사용할때 HCJ(Front-end) Source Code가 저장되는 저장소로 사용이 된다.

     

    세번째는 CloudFormation이다.

    실제로 serverless deploy명령을 치면 cloudFormation의 stack이 구성이 되게 되는 것을 확인할 수 있고 이 사이사이에 update라는 과정이 있게 되는데 이 update를 통해서 실제로 서비스가 다 구성이 되면 state를 update하는 동작을 하게 된다.

     

    네번째는 EventBridge이다.

     

    네번째는 API Gateway이다

    Serverless에서 api gateway를 사용하는 경우에는 외부 domain을 통해서 lambda를 실행시킬때 사용되게 된다. 실제로 아까 예제에서 hello와 world가 배포가 되게 되고 http method 중 Get method로 hello url을 호출하면 hello가 수행이 되었고, world url을 호출하면 world가 수행이 되었다. 이처럼 외부 domain을 통해서 특정 url path에 맞춰서 lambda가 수행되어야할 때 api gateway를 사용할 수 있다.

     

    다섯번째는 Lambda이다

    lambda는 한 사람이 컴퓨팅 리소스를 점유해서 사용하는 서비스가 아니므로 별도의 상태를 저장하지 않는 stateless이기 때문에 상태를 저장하기 위해서는 dynamoDB와 같은 외부 db를 사용해야한다.

     

    여섯번째는 CloudWatch이다

    CloudWatch는 cpu utilization 같은 수치적인 데이터를 namespace, dimension, metric, statics로 구성해서 필터링을 해서 내가 보고 싶은 metric만 따로 뽑아서 확인할 수 있다. 또한 CloudWatch는 단순한 수치적인 데이터 뿐만 아니라 로그 데이터도 수집할 수 있다.

    가령, 수치적인 데이터로는 람다가 수행되었을 때 이 Lambda가 실행시간(ms)을 얼마나 길게 가져갔는지와 response state code로 어떤게 많이 있는지 등을 확인할 수 있겠고, 로그 데이터로는 이 lambda가 수행되었을 때 정상적인 동작을 하지 않았을 때 왜 안되었는지를 확인하는 용도로 활용할 수 있게 된다.

     

    [Reference]

    1. https://aws.amazon.com/ko/blogs/korea/serverless-and-startups/

     

    [AWS Heroes 특집] 스타트업이라면 이제 서버리스(Serverless)로 시작하자! | Amazon Web Services

    AWS 서버리스 히어로인 Slobodan Stojanović 는 Serverless Applications with Node.js의 공동 저자이며 소프트웨어 개발 스튜디오인 Cloud Horizon의 CTO이자 Slack 기반 휴가 관리 앱인 Vacation Tracker의 CTO입니다. 더 빠

    aws.amazon.com

    2. https://github.com/serverless/serverless

     

    GitHub - serverless/serverless: ⚡ Serverless Framework – Use AWS Lambda and other managed cloud services to build apps that

    ⚡ Serverless Framework – Use AWS Lambda and other managed cloud services to build apps that auto-scale, cost nothing when idle, and boast radically low maintenance. - serverless/serverless

    github.com