SlideShare a Scribd company logo
Serverless 101
왜 사용하게 됐는가?
VIDEOtag API Project
API Gateway + Lambda 조합으로 구성
Lambda 배포
● 람다의 배포 과정
○ 실행 코드 압축
■ 외부 패키지를 사용하려면 root가 되는 폴더에 node_modules를 넣고 함께 압축
○ web console에서 upload
○ AWS CLI 로 배포 가능함
● 더 필요한 것
○ Lambda가 많다보니 하나씩 지정해서 편하게 업로드할 수 있어야 함
○ 환경별 설정을 할 수 있어야 함 (dev, stg, prd)
○ 운영에 올렸을 때 롤백도 가능해야 함
○ 배포/롤백 등 운영에 필요한 것을 코드로 쉽게 할 수 있어야 함
○ 등등
이 정도는 script로 극복할 수 있음
이 때부터 script를 대체할 수 있는 것을 찾아본 것은 안 비밀
하지만 API Gateway 도 설정해야 함
● 필요한 API가 한 두 개가 아님
● API Gateway엔 많은 설정이 들어있고 이런 상세한 설정을 할 수
있어야 함
○ resource, method, CORS, stage, cache, authorizer, ...
○ 관리와 빠른 복제/롤백의 불가능 - 누군가 테스트 등을 위해 환경을 새로 구성해야
한다면 수작업을 해야 함
○ 모든 것은 코드로 관리되는 것이 바람직함 (DevOps trend)
Infra Component를 관리하기 위해 AWS에서 쓸 수 있는 도구가
있습니다.
하지만 이 도구는 강력하긴 하지만 초기 학습 비용이 있으며 Lambda
부터 API Gateway 까지의 관계를 사람이 표현하고 이를 이해하기는
어렵습니다.
귀찮다...
뭐 좋은 것이 없나? 바퀴를 또 만들지 말자
Candidates
도구 장/단점
serverless ● 다양한 serverless 도구(aws, gcp, azure 등)를 사용할 수 있고 다양한 설정을 할 수 있고
확장성이 높음
● 다소 복잡하나 API Gateway나 다른 AWS component와의 연동이 체계적으로 관리됨
● Customization은 어렵지만 최종적으로 나오는 CloudFormation을 조작할 수 있는 여지를
줌
● 다양한 plugin이 있음
APEX ● AWS Lambda 만을 위해 만들어짐
● 가볍고 사용법이 간단함
● Node.js, go, python을 모두 지원함
● API Gateway와의 연동은 terraform을 직접 만들어야 함
chalie ● AWS Lambda 만을 위해 만들어짐
● 가볍고 사용법이 간단하고 API Gateway와의 연동을 목적으로 작성됨
● API Gateway를 사용하지 않는 lambda 를 관리할 수 없음
● python만 지원함
claudia ● AWS Lambda 만을 위해 만들어짐
● 가볍고 사용법이 간단하고 API Gateway와의 연동도 지원됨
● 단 api를 만드는 과정이 직관적이지 않았음
● API Gateway를 사용하지 않는 lambda 를 관리할 수 있음
● node.js만 지원함
선택은?
Serverless 101
Serverless
● serverless 기능을 관리하기 위한 CLI 도구
● 지원 Cloud Service Provider
○ AWS, Azure, OpenWhisk, Google Cloud Platform, Kubeless, spotinst, webtask
● yaml로 된 설정 파일을 이용해 cloudformation 과 code를 package한 결과물이
나오고 이를 s3에 업로드해서 배포됨
● 다양한 plugin 생태계 제공
● https://serverless.com/framework/
Config File
● 각종 정보와 배포의 형태를 결정하는 file
● 각종 예제를 제공함
○ https://github.com/serverless/examples
● 템플릿 생성을 cli에서 제공함
○ $ serverless create --template aws-nodejs --path my-service
AWS를 사용하니 AWS를 기준으로 설명합니다.
service: videotagapi
provider:
name: aws
stage: ${opt:stage, self:custom.defaultStage}
region: ${opt:region, self:custom.defaultRegion}
runtime: nodejs6.10
memorySize: 128
timeout: 10
environment:
NODE_ENV: ${self:custom.envMap.${self:provider.stage}}
vpc: ${self:custom.vpc.${self:provider.stage}}
role: arn:aws:iam::077546035184:role/***-api-lambda-function
versionFunctions: true
deploymentBucket: fingercodedeploybucket
custom:
defaultStage: dev
defaultRegion: ap-northeast-2
envMap:
dev: development
prd: production
regionMap:
ap-northeast-2: seoul
vpc:
dev:
securityGroupIds:
- sg-59135331
subnetIds:
- subnet-b64ea8de
- subnet-f44b17b9
service 명. 해당 리소스를 관리하는 기준이 됨
provider에 대한 설정
Lambda 관련 전체 설정 값. 각각에 대한 설정으로 overwrite할 수 있음
배포 관련
설정
custom 변수 값. 환경 별로 값을 달리 해야 할 때 사용함.
plugin 관련 값도 여기에 설정하기도 함
functions:
apiKeyAuthorizer:
handler: api-key-authorizer/index.authorize
name: ${self:provider.stage}-${self:provider.regionName}-${self:service}-apikeyauthorizer
description: server 요청용 인증을 관리합니다.
package:
include:
- api-key-authorizer/**
searchVideos:
handler: videos/search.get
name: ${self:provider.stage}-${self:provider.regionName}-${self:service}-searchvideos
description: OTT에게 video 목록을 제공하는 api에서 사용하는 lambda 입니다.
events:
- http:
path: api/videos/search
method: GET
authorizer:
name: apiKeyAuthorizer
resultTtlInSeconds: 300
package:
include:
- videos/**
lambda 관련 설정 영역
lambda 관련 설정
lambda 와 event 연결
resources:
Resources:
ApiGatewayRestApi:
Type: AWS::ApiGateway::RestApi
Properties:
Name: apigw-seoul-${self:service}
CrossDomainDotXml:
Type: AWS::ApiGateway::Resource
Properties:
ParentId:
Fn::GetAtt:
- ApiGatewayRestApi
- RootResourceId
PathPart: crossdomain.xml
RestApiId:
Ref: ApiGatewayRestApi
cloudformation 관련 덮어쓰기/추가 영역
생성된 cloudformation 의 property를 재정의함
추가적으로 cloudformation을 추가로 정의함으로써
component 추가도 가능함
* serverless package를 통해 만들어지는 cloudformation 파일을 보면 생성되는
component를 확인할 수 있음. 각 property의 값은 매뉴얼을 확인하면 됨!
추가적인 설정은 serverless 문서를 참고하면서 실행해봄
없다면 plugin 페이지를 보면서 내가 원하는 기능을 가진 것을 찾아서 적용
그것도 없다면 package로 나온 cloudformation을 보면서 변경할 부분을 찾아서
customization하면 됨
아니면 직접 만들어도 됨
CLI
기능 명령어
전체 배포 serverless deploy
Lambda 배포 serverless deploy function -f {function 명}
전체 제거 serverless remove
로그 확인 serverless logs -f {function 명} --startTime=5m
롤백 serverless rollback
참고 자료
1. https://serverless.com/framework/
2. 빠르게 배워보는 Node.js를 이용한 서버리스(Serverless)

More Related Content

PDF
[AWSKRUG] Lambda로컬테스트부터 배포까지의 여정-박태성
PDF
RDS에서 Aurora PostgreSQL Migration한 후기
PDF
[AWSKRUG] AWS Lambda Layer 로컬테스트부터 배포까지
PDF
Docker와 DevOps에서 Serverless와 NoOps로의 여정
PDF
RDS에서 Aurora PostgreSQL 마이그레이션하기
PDF
AWSKRUG DS 2020/12 - Let the Airflow in AWS
PDF
ALB+EC2 to API gateway + Lambda
PPTX
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
[AWSKRUG] Lambda로컬테스트부터 배포까지의 여정-박태성
RDS에서 Aurora PostgreSQL Migration한 후기
[AWSKRUG] AWS Lambda Layer 로컬테스트부터 배포까지
Docker와 DevOps에서 Serverless와 NoOps로의 여정
RDS에서 Aurora PostgreSQL 마이그레이션하기
AWSKRUG DS 2020/12 - Let the Airflow in AWS
ALB+EC2 to API gateway + Lambda
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021

What's hot (20)

PDF
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
PDF
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
PDF
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
PDF
비동기 어플리케이션 모니터링과 밀당하기
PDF
cbhoilab vagrant와 ansible 쿠버네티스 설치 v2
PDF
Ansible과 CloudFormation을 이용한 배포 자동화
PDF
Dynamodb 삽질기
PPTX
Jenkins with AWS
PDF
Redis on AWS
PDF
Aws로 ci하기 안기욱
PPTX
Asp.net Razor
PPTX
[AWSKRUG 컨테이너 소모임] Rancher 기본 입문
PDF
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
PDF
Backend server monitoring and alarm system (collectd, graphite, grafana, zabb...
PDF
두근두근 ASP.NET 5!
PDF
내 입맞에 맞는 프로그래밍 언어로 Lambda 함수 만들기 :: 정창훈 - AWS Community Day 2019
PDF
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
PDF
AWS SAM으로 서버리스 아키텍쳐 운영하기 - 이재면(마이뮤직테이스트) :: AWS Community Day 2020
PDF
Amazon EC2에서 Tensorflow 돌려보기 - 최선근 (데이터과학모임) :: AWS Community Day 2017
PPTX
크로스플랫폼으로 다시 태어난 ASP.NET Core
AWSKRUG DS - 데이터 엔지니어가 실무에서 맞닥뜨리는 문제들
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
비동기 어플리케이션 모니터링과 밀당하기
cbhoilab vagrant와 ansible 쿠버네티스 설치 v2
Ansible과 CloudFormation을 이용한 배포 자동화
Dynamodb 삽질기
Jenkins with AWS
Redis on AWS
Aws로 ci하기 안기욱
Asp.net Razor
[AWSKRUG 컨테이너 소모임] Rancher 기본 입문
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
Backend server monitoring and alarm system (collectd, graphite, grafana, zabb...
두근두근 ASP.NET 5!
내 입맞에 맞는 프로그래밍 언어로 Lambda 함수 만들기 :: 정창훈 - AWS Community Day 2019
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
AWS SAM으로 서버리스 아키텍쳐 운영하기 - 이재면(마이뮤직테이스트) :: AWS Community Day 2020
Amazon EC2에서 Tensorflow 돌려보기 - 최선근 (데이터과학모임) :: AWS Community Day 2017
크로스플랫폼으로 다시 태어난 ASP.NET Core
Ad

Similar to Serverless 101 (20)

PPTX
Aws lambda 와 함께 서버리스 서비스 만들기
PDF
Theano 와 Caffe 실습
PDF
Knative로 서버리스 워크로드 구현
PDF
Feature Branch Branch Dev QA 환경 구성기
PDF
AWS 서버리스 신규 서비스 총정리 - 트랙2, Community Day 2018 re:Invent 특집
PDF
OpenStack Swift Debugging
PPTX
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
PDF
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
PDF
AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)
PDF
텀 프로젝트에서 제품 프로젝트로 - 성준영님
PPTX
DevOps with AWS Edge
PDF
[IoT] MAKE with Open H/W + Node.JS - 3rd
PPTX
AWS의 하둡 관련 서비스 - EMR/S3
PDF
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
PPTX
spark database Service
PDF
Nodejs발표자료 - 팀 세미나용
PDF
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
PDF
Node.js 시작하기
PDF
SOSCON 2017 - Backend.AI
PDF
AWS 주요 기능 업데이트 - 2016년 1월/2월 (김용우) - 파트너 웨비나 시리즈
Aws lambda 와 함께 서버리스 서비스 만들기
Theano 와 Caffe 실습
Knative로 서버리스 워크로드 구현
Feature Branch Branch Dev QA 환경 구성기
AWS 서버리스 신규 서비스 총정리 - 트랙2, Community Day 2018 re:Invent 특집
OpenStack Swift Debugging
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)
텀 프로젝트에서 제품 프로젝트로 - 성준영님
DevOps with AWS Edge
[IoT] MAKE with Open H/W + Node.JS - 3rd
AWS의 하둡 관련 서비스 - EMR/S3
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
spark database Service
Nodejs발표자료 - 팀 세미나용
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
Node.js 시작하기
SOSCON 2017 - Backend.AI
AWS 주요 기능 업데이트 - 2016년 1월/2월 (김용우) - 파트너 웨비나 시리즈
Ad

More from Jinhyuck Kim (6)

PDF
Reactive programming vs reactive systems
PDF
Docker storage
PDF
V8 engine internal
PDF
[JS] Function.prototype.bind
PDF
JWT (JSON web token)
PDF
기술 부채란
Reactive programming vs reactive systems
Docker storage
V8 engine internal
[JS] Function.prototype.bind
JWT (JSON web token)
기술 부채란

Serverless 101

  • 3. VIDEOtag API Project API Gateway + Lambda 조합으로 구성
  • 4. Lambda 배포 ● 람다의 배포 과정 ○ 실행 코드 압축 ■ 외부 패키지를 사용하려면 root가 되는 폴더에 node_modules를 넣고 함께 압축 ○ web console에서 upload ○ AWS CLI 로 배포 가능함 ● 더 필요한 것 ○ Lambda가 많다보니 하나씩 지정해서 편하게 업로드할 수 있어야 함 ○ 환경별 설정을 할 수 있어야 함 (dev, stg, prd) ○ 운영에 올렸을 때 롤백도 가능해야 함 ○ 배포/롤백 등 운영에 필요한 것을 코드로 쉽게 할 수 있어야 함 ○ 등등
  • 5. 이 정도는 script로 극복할 수 있음 이 때부터 script를 대체할 수 있는 것을 찾아본 것은 안 비밀
  • 6. 하지만 API Gateway 도 설정해야 함 ● 필요한 API가 한 두 개가 아님 ● API Gateway엔 많은 설정이 들어있고 이런 상세한 설정을 할 수 있어야 함 ○ resource, method, CORS, stage, cache, authorizer, ... ○ 관리와 빠른 복제/롤백의 불가능 - 누군가 테스트 등을 위해 환경을 새로 구성해야 한다면 수작업을 해야 함 ○ 모든 것은 코드로 관리되는 것이 바람직함 (DevOps trend)
  • 7. Infra Component를 관리하기 위해 AWS에서 쓸 수 있는 도구가 있습니다. 하지만 이 도구는 강력하긴 하지만 초기 학습 비용이 있으며 Lambda 부터 API Gateway 까지의 관계를 사람이 표현하고 이를 이해하기는 어렵습니다.
  • 8. 귀찮다... 뭐 좋은 것이 없나? 바퀴를 또 만들지 말자
  • 9. Candidates 도구 장/단점 serverless ● 다양한 serverless 도구(aws, gcp, azure 등)를 사용할 수 있고 다양한 설정을 할 수 있고 확장성이 높음 ● 다소 복잡하나 API Gateway나 다른 AWS component와의 연동이 체계적으로 관리됨 ● Customization은 어렵지만 최종적으로 나오는 CloudFormation을 조작할 수 있는 여지를 줌 ● 다양한 plugin이 있음 APEX ● AWS Lambda 만을 위해 만들어짐 ● 가볍고 사용법이 간단함 ● Node.js, go, python을 모두 지원함 ● API Gateway와의 연동은 terraform을 직접 만들어야 함 chalie ● AWS Lambda 만을 위해 만들어짐 ● 가볍고 사용법이 간단하고 API Gateway와의 연동을 목적으로 작성됨 ● API Gateway를 사용하지 않는 lambda 를 관리할 수 없음 ● python만 지원함 claudia ● AWS Lambda 만을 위해 만들어짐 ● 가볍고 사용법이 간단하고 API Gateway와의 연동도 지원됨 ● 단 api를 만드는 과정이 직관적이지 않았음 ● API Gateway를 사용하지 않는 lambda 를 관리할 수 있음 ● node.js만 지원함
  • 12. Serverless ● serverless 기능을 관리하기 위한 CLI 도구 ● 지원 Cloud Service Provider ○ AWS, Azure, OpenWhisk, Google Cloud Platform, Kubeless, spotinst, webtask ● yaml로 된 설정 파일을 이용해 cloudformation 과 code를 package한 결과물이 나오고 이를 s3에 업로드해서 배포됨 ● 다양한 plugin 생태계 제공 ● https://serverless.com/framework/
  • 13. Config File ● 각종 정보와 배포의 형태를 결정하는 file ● 각종 예제를 제공함 ○ https://github.com/serverless/examples ● 템플릿 생성을 cli에서 제공함 ○ $ serverless create --template aws-nodejs --path my-service
  • 14. AWS를 사용하니 AWS를 기준으로 설명합니다.
  • 15. service: videotagapi provider: name: aws stage: ${opt:stage, self:custom.defaultStage} region: ${opt:region, self:custom.defaultRegion} runtime: nodejs6.10 memorySize: 128 timeout: 10 environment: NODE_ENV: ${self:custom.envMap.${self:provider.stage}} vpc: ${self:custom.vpc.${self:provider.stage}} role: arn:aws:iam::077546035184:role/***-api-lambda-function versionFunctions: true deploymentBucket: fingercodedeploybucket custom: defaultStage: dev defaultRegion: ap-northeast-2 envMap: dev: development prd: production regionMap: ap-northeast-2: seoul vpc: dev: securityGroupIds: - sg-59135331 subnetIds: - subnet-b64ea8de - subnet-f44b17b9 service 명. 해당 리소스를 관리하는 기준이 됨 provider에 대한 설정 Lambda 관련 전체 설정 값. 각각에 대한 설정으로 overwrite할 수 있음 배포 관련 설정 custom 변수 값. 환경 별로 값을 달리 해야 할 때 사용함. plugin 관련 값도 여기에 설정하기도 함
  • 16. functions: apiKeyAuthorizer: handler: api-key-authorizer/index.authorize name: ${self:provider.stage}-${self:provider.regionName}-${self:service}-apikeyauthorizer description: server 요청용 인증을 관리합니다. package: include: - api-key-authorizer/** searchVideos: handler: videos/search.get name: ${self:provider.stage}-${self:provider.regionName}-${self:service}-searchvideos description: OTT에게 video 목록을 제공하는 api에서 사용하는 lambda 입니다. events: - http: path: api/videos/search method: GET authorizer: name: apiKeyAuthorizer resultTtlInSeconds: 300 package: include: - videos/** lambda 관련 설정 영역 lambda 관련 설정 lambda 와 event 연결
  • 17. resources: Resources: ApiGatewayRestApi: Type: AWS::ApiGateway::RestApi Properties: Name: apigw-seoul-${self:service} CrossDomainDotXml: Type: AWS::ApiGateway::Resource Properties: ParentId: Fn::GetAtt: - ApiGatewayRestApi - RootResourceId PathPart: crossdomain.xml RestApiId: Ref: ApiGatewayRestApi cloudformation 관련 덮어쓰기/추가 영역 생성된 cloudformation 의 property를 재정의함 추가적으로 cloudformation을 추가로 정의함으로써 component 추가도 가능함 * serverless package를 통해 만들어지는 cloudformation 파일을 보면 생성되는 component를 확인할 수 있음. 각 property의 값은 매뉴얼을 확인하면 됨!
  • 18. 추가적인 설정은 serverless 문서를 참고하면서 실행해봄 없다면 plugin 페이지를 보면서 내가 원하는 기능을 가진 것을 찾아서 적용 그것도 없다면 package로 나온 cloudformation을 보면서 변경할 부분을 찾아서 customization하면 됨 아니면 직접 만들어도 됨
  • 19. CLI 기능 명령어 전체 배포 serverless deploy Lambda 배포 serverless deploy function -f {function 명} 전체 제거 serverless remove 로그 확인 serverless logs -f {function 명} --startTime=5m 롤백 serverless rollback
  • 20. 참고 자료 1. https://serverless.com/framework/ 2. 빠르게 배워보는 Node.js를 이용한 서버리스(Serverless)