일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- authoring
- git book
- S3
- Task
- executor
- dagrun
- Concept
- XCOM
- celery
- Data Firehose
- Git
- AWS
- DAG
- boto3
- RDS
- credentials
- github actions
- dynamic task mapping
- Operator
- Scheduling
- testing
- lambda
- TaskFlow
- airflow
- kinesis
- mysql
- pipeline
- SecretsManager
- ci/cd
- sqs
- Today
- Total
CS
Serverless 프레임워크: AWS Lambda를 인프라 생각 없이 배포 본문
Serverless는 서버리스 함수(AWS에서는 Lambda)를 인프라 구성 없이 배포할 수 있도록 하는 프레임워크입니다.
학습자 입장에서 Serverless를 써보면서 알게 된 점을 정리하고 공유하는 의미에서 글을 써보겠습니다.
- 설명
- 사용 방법
- 기타
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)
이렇게 되어 있습니다. 배포할 때마다 해당 버전의 모든 파일이 저장되는 듯합니다.
'AWS' 카테고리의 다른 글
Boto3를 위한 AWS Credentials 구성하기 (0) | 2023.06.05 |
---|---|
AWS SQS 써보기: 다른 서비스에 정보를 전달(메시지 큐) (0) | 2023.06.02 |
계층(Layer): Lambda 함수의 종속 항목 추가 (0) | 2023.05.31 |
AWS Lambda: 서버 생각 없이 함수 실행 (0) | 2023.05.29 |
AWS Secrets Manager: 암호를 하드 코딩하지 않고 저장하고 불러오기 (0) | 2023.05.27 |