728x90
요새 서버리스가 핫하다. 예전부터 핫했나..? 서버리스(serverless) 와 관련된 이야기를 시작하기 전에 클라우드 컴퓨팅과 관련된 용어를 먼저 정의하고 가자.
클라우드 컴퓨팅
클라우드 컴퓨팅은 서로 다른 물리적인 위치에 존재하는 컴퓨터들의 리소스를 가상화 기술로 통합해 제공하는 기술을 말한다.
※ IaaS (Infrastructure as a Service)
클라우드 인프라스트럭처 서비스는 확장성이 높고 자동화된 컴퓨팅 리소스(서버, 네트워크, OS, 스토리지 등)를 가상화하여 제공하는 것이다. IaaS 제공업체는 서버, 하드 드라이브, 네트워킹, 가상화 및 스토리지를 관리하고 고객은 OS, 미들웨어, 애플리케이션 및 데이터와 같은 자원들을 관리해야 한다. 대표적인 예로는 AWS, Microsoft Azure, Google Cloud 등이 있다.
※ PaaS (Platform as a Service)
클라우드 플랫폼 서비스는 주로 응용 프로그램을 개발할 때 필요한 플랫폼을 제공하는 것이다. PaaS 는 고객에게 OS, 미들웨어, 런타임과 같은 소프트웨어 작성을 위한 플랫폼을 가상화하여 제공하고 관리한다. 이 가상화된 플랫폼은 웹을 통해 제공되며 개발자는 운영체제, 소프트웨어 업데이트, 저장소 또는 인프라에 대한 관리없이 소프트웨어 개발에만 집중할 수 있다. 대표적인 예로는 Heroku, OpenShift 등이 있다.
※ SaaS (Software as a Service)
클라우드 애플리케이션(소프트웨어) 서비스는 사용자에게 제공되는 소프트웨어를 가상화하여 제공하는 것이다. SaaS 를 통해 서비스를 공급하는 업체는 데이터, 미들웨어, 서버 및 스토리지와 같은 모든 잠재적인 기술적 문제를 관리하기 때문에 고객은 유지보수 및 자원을 간소화하면서 비즈니스에 집중할 수 있다. 대표적인 예로는 Dropbox, Google Apps 등이 있다.
서버리스 컴퓨팅
서버리스 컴퓨팅은 개발자가 서버를 관리할 필요 없이 (인프라에 신경 쓰지 않고) 코드를 작성하고 배포할 수 있는 클라우드 플랫폼이다. 서버리스는 BaaS 혹은 FaaS 에 의존하여 작업을 처리하게 된다.
※ BaaS (Backend as a Service)
앱 개발에 있어서 필요한 다양한 기능들(데이터베이스, 소셜 서비스 연동, 파일시스템 등)을 API 로 제공해줌으로서, 개발자들이 서버 개발을 하지 않고서도 필요한 기능을 쉽고 빠르게 구현할 수 있게 해주는 서비스이다. (보통 백엔드 로직들이 클라이언트 쪽에 구현된다.) 대표적인 예로는 Firebase 가 있다.
※ FaaS (Function as a Service)
프로젝트를 여러개의 함수로 쪼개서 (혹은 한개의 함수로 만들어서) 거대하고 분산된 컴퓨팅 자원에 이 함수들을 등록하고, 이 함수들이 실행되는 횟수 및 시간 만큼 비용을 내는 방식을 말한다. 대표적인 예로는 AWS Lambda, Azure Functions, Google Cloud Functions 및 IBM OpenWhisk가 있다.
Serverless 프레임워크 사용하기
나는 Serverless 프레임워크를 사용하여 AWS Lmabda 에 배포할 것이다.
1. 서버리스용 폴더 만들기
$ mkdir serverless-test
$ cd serverless-test
2. 서버리스 프레임워크 설치하기
$ npm install -g serverless
3. 서버리스 템플릿 생성하기
$ sls create --template aws-nodejs-ecma-script
4. 파일 작성하기
▷ handler.js
export const test = (event, context, callback) => {
const p = new Promise((resolve) => {
resolve('success')
})
p.then(() =>
callback(null, {
message: 'Hello! Serverless Test',
event,
})
).catch((e) => callback(e))
}
▷ serverless.yml
service:
name: serverless-test
provider:
name: aws
runtime: nodejs12.x
region: ap-northeast-2
stage: stg
functions:
lambda-function-name: # 람다함수명
handler: handler.test # 작성한 파일명.함수명
memorySize: 512 # 메모리크기 디폴트는 1024 MB
timeout: 30 # 타임아웃 디폴트는 6초
events:
- schedule:
rate: cron(0 21 * * ? *) # AWS CloudWatch 스케쥴 이벤트 (UTC 기준이니 참고)
AWS 의 다른 서비스를 이용하기 위해선 IAM Role 이 필요한데, 이미 만들어둔게 있다면 아래와 같이 ARN 을 기재해 주거나
...
provider:
name: aws
runtime: nodejs12.x
region: ap-northeast-2
stage: stg
role: arn:aws:iam::${AWS_ACCOUNT_NUMBER}:role/LambdaIAMRole
...
설정파일에서 직접 IAM Role 을 만들 수도 있다.
...
provider:
name: aws
runtime: nodejs12.x
region: ap-northeast-2
stage: stg
role: LambdaIAMRole
...
resources:
Resources:
LambdaIAMRole:
Type: AWS::IAM::Role
Properties:
RoleName: LambdaIAMRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
Policies:
- PolicyName: LAMBDA-POLICY-NAME
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource:
- 'Fn::Join':
- ':'
- - 'arn:aws:logs'
- Ref: 'AWS::Region'
- Ref: 'AWS::AccountId'
- 'log-group:/aws/lambda/*:*:*'
- Effect: "Allow"
Action:
- "s3:Get*"
- "s3:List*"
Resource:
- "arn:aws:s3:::bucket/*"
5. 배포하기
$ sls deploy
728x90
'AWS' 카테고리의 다른 글
[DDB] DynamoDB 세팅하기 (0) | 2021.05.26 |
---|---|
[ECR] 태그명 추가하기 (0) | 2021.05.20 |
[ECS] AWS ECS 세팅하기 - 2. 서비스 생성 - 롤링 업데이트 (0) | 2021.05.17 |
[ECS] AWS ECS 세팅하기 - 1. 작업정의 및 클러스터 생성 (0) | 2021.05.17 |
[EC2] AWS EC2 볼륨 크기 수정하기 (0) | 2021.05.12 |