https://www.serverless.com/

Serverless Framework


나의 cloud 환경은 AWS 이며, Windows 환경에서 테스트 했다.

(현재 내 windows는 AWS CLI 설치가 완료되었고, npm도 설치되어 있음)

 

Serverless Framework 설정

# serverless framework 설치
npm install -g serverless

# 새로운 서버리스 프로젝트 생성
 serverless

 

serverless framework에 로그인하고 들어가보면,

위와 같이 생성되어 있음을 알 수 있다.

후에 deploy now의 질문에 yes로 대답하면..

이렇게 뜨는데 현재 내가 설정해둔 default region과 serverless에서 제공해주는 리전이 달라서 그러는 것 같다..

(현재는 테스트용이라 AWS 계정의 region을 us-east-1으로 변경할꺼고 나중에 프로젝트를 제대로 하려면 내가 원하는 리전으로 설정하는 방향으로 진행해야겠다.)

 

AWS 자격증명 설정

https://www.serverless.com/framework/docs/providers/aws/guide/credentials/

serverless-test user를 추가하자(IAM)

테스트니까 일단 Admin으로 박자.(프로덕션이나 중요한 프로젝트의 경우 권한을 자세히 설정하는게 좋다.)

 

 

Serverless Deploy

위와 같이 잘 실행됨을 알 수 있다..!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Test

serverless invoke -f hello

# 로그 호출 및 표시: 
serverless invoke -f hello -- log

serverless logs -f hello
 
# Tail logs
serverless logs -f hello --tail


# serverless 제거
serverless remove

 

serverless framework 기준

해당 serverless framework GUI 상에서 모니터링도 가능하다.

 

serverless remove를 사용하면 알아서 또 다 지워준다.

 


생성된 프로젝트를 까보면..

이런 느낌이고 사용자가 작성해야하는 파일의 경우 handler.js, serverless.yml 정도 인듯?

handler.js는 lambda에 들어가야할 함수고 (사용자 지정 함수 느낌)

serverless.yml의 경우 아래와 같이 생성되었다.

org: realyun99
app: test-nodejs-serverless
service: test-nodejs-serverless

frameworkVersion: '3'

provider:
  name: aws
  runtime: nodejs14.x

functions:
  hello:
    handler: handler.hello

 

 

위의 테스트 환경은 예제이고 직접 내가 템플릿을 만들어보고 사용자의 입장에서 무엇을 해야하는지 파악하려 한다.

 # 어떤 명령어 옵션이 있는지 확인
 serverless create --help
 
 serverless create --template aws-go --path "C:\Users\HP\test-go"

go언어의 템플릿으로 해당 경로에 test-go 폴더를 생성하고 넣어라의 느낌!

serverless.yml 안에 어떻게 AWS 환경 구성하고 싶은지 적는 것 같다... 아무래도...? ㅋㅋㅋㅋ

https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml


(serverless.yml)

  • AWS 인프라와 Serverless Framework로 배포할 Lambda 함수의 정보 및 설정을 담은 파일
  • CloudFormation의 문법 사용 가능
  • 다양한 Serverless Framework 플러그인 사용 가능
    • ex) 500개 리소스 제한인 CloudFormation 스택을 Nested Stack으로 만들어주는 플러그인

 

 

❗ 결론적으로 serverless.yml 파일이랑 lambda 함수에 들어갈 코드만 잘 작성하면 된다! serverless 파일이 관건일 듯! ❗

'Cloud' 카테고리의 다른 글

Cloud Service Providers  (0) 2021.05.08

Step Fuctions 작동 원리

  • Step Functions 상태머신: 실행될 워크플로우를 선언적으로 정의하는 그래프
    • 하나의 워크플로우는 여러 개의 작업 단위로 구성될 수 있음
    • Action: Lambda  함수 호출, SNS로의 publish, ECS task 실행 등과 같은 다른 AWS 서비스를 활용하여 작업 수행
    • Flow: task들의 제어 흐름을 정의하는 7가지 상태
      • Choice: 조건문에 따른 분기를 정의
      • Parallel: 동일 입력에 대해 여러 작업을 병렬 처리
      • Map: 배열과 같은 Iterable 입력에 대해 task의 동적 병렬 처리를 수행
      • Pass: 디버깅 / Wait: 타이머 기능 / Success/Fail: 실행 성공 여부 확인
    • Action과 Flow의 조합으로 Start 상태부터 End 상태까지 다양한 워크플로우를 쉽게 정의
  • 모니터링: try - catch - finally 패턴을 통해 timeout, retry, error message 등을 한번에 관리 가능
  • 자동 스케일링, 고가용성 제공

 

Step Functions 개발 옵션

  • Workflow Studio:
    • GUI 인터페이스만으로 워크플로우 배포 가능
    • Production 환경에서 얘만 사용하면 유지보수에 어려움이 있을 수 있음
  •  IaC 프레임 워크 활용: AWS CDK, Terraform + 서버리스 개발용 라이브러리: AWS Chalice(파이썬)
    • 위의 상황은 디커플링된 상태: 애플리케이션과 인프라가 디커플링
    • 각 각에 대해 코드 수정을 해야하는 비효율성이 생길 수 있음
  • 애플리케이션과 인프라를 커플링 → 서버리스 프레임워크

 

개발 팁

  • 서비스 할당량
    • 소프트 할당량(별도의 요청으로 상한을 올릴 수 있음) / 하드 할당량(상한을 올릴 수 없음)
    • 자주 접할 수 있는 하드 할당량:
      • 페이로드의 최대 크기: 256KB 넘길 수 없음
        • 상태머신의 페이로드는 필수 정보, 상태 정보 등.. 
        • 이외의 데이터는 다른 서비스나 서버에 저장 후 불러와라
          • (S3, DynamoDB, Aurora, Kinesis Data Streams, SQS)
      • 실행 기록의 최대 이벤트 개수: 최대 25000개 까지 기록(넘어가면 실행 즉시 실패)
        • 이벤트 개수 줄이기 → 비추천
        • Lambda 함수를 통해 상태머신 재실행(AWS 측 추천)
          • 워크플로우 과정 중 현재 실행의 실행기록이 최대치에 근접할 때, 상태머신 재실행 하는 판단 부분 삽입
          • 해당 진행사항을 저장하는 부분도 필요함: 재실행할 때 정보가 변하면 안됨!
  • 동적 병렬처리
    • MaxConcurrency: 동시 실행 가능한 작업자의 최대 개수
    • Map 상태가 최대 동시성 값에 따라 병렬로 실행할 작업자의 개수를 결정
    • 문제: 작업의 동적할당을 위해선 작업을 배열의 형태로 만들어야함. 근데 페이로드 안에 다 있어야하니까.. 최대 페이로드 크기에 걸릴 수 있음
      • 전체 작업을 처리 가능한 크기의 작업으로 분할 후 반복실행을 통해 순차적으로 처리 
  • 외부 서비스 통합: Activity Worker 패턴 이용
    •  동기적으로 처리하기 위함..
    • Activity: 상태머신의 진행을 비동기적으로 바꾸기 위함
      • 상태머신이 Activity 대기 상태로 들어가면 해당 Activity 하위에 새로운 작업을 생성 후 실행을 잠시 정지 시킴
      • AWS SDK를 활용해 GetActivityTask 호출:
        • 지정한 Activity에 처리되지 않은 작업이 있으면 해당 작업을 할당받음과 동시에 작업의 입력값과 토큰을 받음
        • 이후 전달받은 입력값으로 완료되면 SendTaskSuccess를 이용해 작업의 성공을 알림
      • 생성한 작업이 완료되면 대기 상태 해체 후 실행 재개

 

 

 

❗ 솔직히 AWS 내에서 서버리스로 다 구성하려면... 이거 활용하면 좋을듯!!! ❗

'Cloud > AWS' 카테고리의 다른 글

[AWS] Amazon Athena 사용법 -2 + Glue(Crawler) 활용  (1) 2022.11.19
[AWS] Amazon Athena 사용법 -1  (1) 2022.11.19
[AWS] Spot Fleet  (0) 2022.11.16
[AWS] Lambda와 RDS Proxy  (0) 2022.11.14
[AWS] EC2 인스턴스 자동 중지 및 시작  (0) 2022.11.13

+ Recent posts