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 까지의 관계를 사람이 표현하고 이를 이해하기는
어렵습니다.
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
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 관련 값도 여기에 설정하기도 함
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