관리 메뉴

CS

Serverless 프레임워크: AWS Lambda를 인프라 생각 없이 배포 본문

AWS

Serverless 프레임워크: AWS Lambda를 인프라 생각 없이 배포

vcxz 2023. 5. 30. 16:59

 

Serverless는 서버리스 함수(AWS에서는 Lambda)를 인프라 구성 없이 배포할 수 있도록 하는 프레임워크입니다.

학습자 입장에서 Serverless를 써보면서 알게 된 점을 정리하고 공유하는 의미에서 글을 써보겠습니다.

 

 

 

  1. 설명
  2. 사용 방법
  3. 기타

 

1. 설명

Serverless는 터미널에서 사용할 수 있는 프레임워크입니다.

Lambda를 쓸 때 코드 템플릿을 정하거나 파일을 패키징하는 등 구성할 게 많은데,

Serverless를 쓰면 yml 파일을 사용하여 설정을 한 공간에서 할 수 있고, AWS CloudFormation을 통하여 인프라를 자동으로 만들어 줍니다(CloudFormation은 코드형 인프라 서비스로 인프라를 코드로 작성할 수 있도록 합니다.).

특히 기본 인프라를 만들어 주는 점 덕분에 초보자 입장에서 다른 거에 신경 쓰지 않고 코드만 작성할 수 있어서 좋다고 생각합니다.

 

 

2. 사용 방법

설치와 기초 사용 방법은 Serverless 문서에 초보자도 쉽게 따라할 수 있도록 쓰여 있습니다.

 

설치 후에 터미널에서

sls

명령어를 입력하시면 몇 개의 기본 템플릿을 제시하는데, 하나를 선택하고 간단한 설정을 하면 프로젝트 파일이 들어갈 디렉토리를 생성합니다.

그리고 바로 배포할 거냐고 물어보는데, 기본 설정상 리전이 us-east-1이고 새로 S3 버킷을 생성하므로 해당 설정대로 할 생각이 아니라면 거절하는 게 좋을 것 같습니다.

 

 

'AWS - Python - Starter' 템플릿을 사용하여 'test'라는 프로젝트를 만들었습니다.

test
├── README.md
├── handler.py
└── serverless.yml

handler.py는 Lambda 함수의 기본 파일로 해당 파일에서 코드를 작성하면 되고,

serverless.yml이 Serverless의 핵심 파일로 해당 파일에서 서비스에 대한 각종 구성을 할 수 있습니다.

 

serverless.yml의 형식은 문서를 참고하세요.

여기서는 제가 Serverless를 몇 번 사용해 보면서 직접 변경해 봤던 부분만 다루겠습니다.

# serverless.yml

# 서비스명
service: test


# 서비스가 올라갈 플랫폼에 대한 설정
provider:
  name: aws
  # 리전. 기본 값은 us-east-1(미국 동부)이므로 주의
  region: us-east-1
  # 서비스가 실행될 런타임 환경
  runtime: python3.9
  # 함수 제한 시간. 기본 값은 6초. 주의: API Gateway는 최대 제한 시간이 30초
  timeout: 6
 
  # Serverless는 S3에 관련 파일을 저장한다.
  # 디렉토리명(접두사)
  deploymentPrefix: serverless
  # 저장할 버킷 정보
  deploymentBucket:
    # 버킷명. 기본 값은 새로운 버킷을 생성
    name: com.serverless.${self:provider.region}.deploys


# 함수 설정
functions:
  # Lambda 함수명
  hello:
    # 핸들러 (파일명.함수명)
    handler: handler.hello
    # Serverless는 함수 여러 개를 한번에 배포할 수 있는데,
    # provider 부분에서 했던 설정을 함수별로 다시 하여 override할 수 있다.

권한, 트리거 등 Lambda 콘솔에서 할 수 있는 대부분의 설정을 yml에서 할 수 있지만, 아직은 GUI인 콘솔이 더 편한 것 같습니다.

비슷한 설정의 Lambda 함수를 여러 개 배포한다면 설정을 한번에 할 수 있어 좋을 것 같습니다.

 

 

그리고 handler.py에 함수로 사용할 코드를 작성하면 됩니다.

서비스를 만들 때 웬만하면 여러 파일을 포함하게 되는데, 서비스 디렉토리(여기서는 'test')에 파일을 다 저장하면 이후 배포할 때 Serverless가 알아서 패키징합니다.

 

 

이후 해당 디렉토리 (여기서는 'test')에서 터미널에

sls deploy

명령어를 입력하시면 서비스가 배포됩니다. 그러면 Lambda 콘솔에서 확인할 수 있습니다.

 

 

3. 기타

Serverless로 만들어진 함수는 Lambda 애플리케이션이라고 CloudFormation과 연계된 형태로 존재합니다.

 

배포 후 yml에서 정했던 S3 버킷을 보면

serverless
└── 프로젝트명
    └── dev
    	└── 배포 타임스탬프
            ├── 코드 패키지(zip)
            ├── CloudFormation 파일(json)
            └── Serverless 설정(yml) 파일(json)

이렇게 되어 있습니다. 배포할 때마다 해당 버전의 모든 파일이 저장되는 듯합니다.