내용
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 을 만들고 결과 리포트를 생성