Blog

AWS SAM으로 서버리스 아키텍처 운영하기 ( 이재면, Mymusictaste )

내용

AWS SAM 을 사용한 이유

API Gateway, DynamoDB, SNS, SQS, Lambda 로 구성된 서비스 개발이 진행
Infrastrcture as Code 를 통해서 배포를 구성
이미 ECS 로 구성된 Resources 들이 Terraform 으로 구성되어 있었음
sam local 을 이용해서 로컬 환경에서 테스트 & 디버깅을 해볼 수 있음
sam local start-api
sam local start-api --docker-network
sam local generate-event dynamodb update > event.json
sam local invoke --event event.json SendMessage
sam local lambda

SAM ( Serverless Application Model )

Serverless 를 위한 Tool 로 편리하게 Abstraction 되어 있다.
SAM Template
Globals 로 공통적인 Config 설정
Alias, Versioning 관리 가능
Canary 배포 가능
다양한 Resource 들을 지원하고, CloudFormation Syntax 를 그대로 사용할 수 있다
--use-container 옵션을 통해 sam build 를 하면 Amazon Linux Docker Image 를 이용해서 빌드

CloudFormation 기능 설명

AWS SAM 은 AWS::Serverless 의 Resource 들이 cfn 이랑 호환될 수 있도록 변환한다
cfn 에서 지원하는 기능들을 대부분 사용할 수 있다

Parameters

Parameters 로 Input 을 Dynamic 하게 설정하여 Stack 을 생성 또는 업데이트 할 수 있다
System Manager Parameter Store 에 저장한 값을 쉽게 연동하여 cfn parameter 값으로 사용할 수 있다

Mappings

Key 값 별로 미리 Value 를 정의해놓고 사용할 수 있다

Conditions

조건을 만족하는 경우에만 Resource 를 생성할 수 있도록 설정할 수 있다

Nested Stacks

공통된 Resource 를 정의한 Template 을 재사용하여 만들 수 있다

StackSets

StackSets 으로 여러 Region 과 여러 Acoount 에 Stack 을 생성하고 관리할 수 있음
Organizations 에서 Service Mnaged Permission 으로 관리될 수 있을거라 생각
Organization Unit ( OU ) 별로 Stack 을 자동 배포할 수 있게 될 예정
OU 에 Account 가 추가되면 자동으로 Stack 이 배포되고, Account가 OU 에서 빠지면 자동으로 Stack 이 지워질 수 있음

아쉬웠던 점

이미 존재하는 Resource 들을 Stack 에 포함시키고 싶을 때
resource import 2019년 11월에 발표됨
SAM Template 은 Transform 되어야 하는 것 때문에 다음과 같은 에러 발생
SAM 은 Import 를 지원하는 Resource 들이 제한적임

Pipeline

Pipeline

User → Template → Version Control → Test → Deploy ( Staging ) → Deploy ( Production )

구성에 도움이 되는 Tool

cfn-lint
CloudFormation Linter
.cfnlintrc 이름의 YAML 파일에 다양한 옵션을 설정할 수 있음
change-set
cfn 에서 change sets 으로 Stack 에 어떤 부부닝 업데이트 될 지 적용하기 전에 알 수 있다
TaskCat
AWS QuickStart Team 에서 cfn template 을 테스트하기 위해 만들어진 tool
실제 Stack 을 만들고 결과 리포트를 생성