목차
AWS 서버리스 실습 소개
서버리스 서비스를 이용하면 서버를 설치 운용하거나 관리할 필요 없이 비지니스 로직을 코드로 구현하는 것만으로도 애플리케이션 구축이 가능합니다.
100 레벨: "Amazon Polly를 통한 음성 읽기 서버리스 앱 개발하기" 블로그에서, AWS 관리 콘솔을 이용하여 서버리스 웹 애플리케이션을 구축하는 방법을 살펴 보았습니다.
200 레벨: Cloud9 IDE를 이용하여 웹 애플리케이션 구축을 위하여 프로젝트를 생성하고, 코드를 생성하고, SAM(Serverless Architecture Model) 템플릿을 직접 만들어 배포하는 방법을 학습합니다.
300 레벨: CodeStar를 이용하여 DevOps 환경으로 서버리스 서비스를 활용한 CI/CD 프로세스를 구축하여 빌드 단계에서 단위 테스트를 하고 Canary 배포와 롤백 방법을 학습합니다.
- AWS 서버리스 HOL - Lab1. Cloud9을 이용한 서버리스 웹 애플리케이션 구축 이동
- AWS 서버리스 HOL - Lab2. Code 시리즈 서비스를 이용한 CI/CD 배포 프로세스 구축 이동
실습 목적
- Cloud9을 이용하여 서버리스 애플리케이션을 SAM(Serverless Application Model) 기반으로 개발/배포할 수 있습니다.
- Cloud9 IDE
- SAM을 이해하고 서버리스 서비스에 필요한 서비스를 직접 기술 할 수 있습니다.
- API Gateway, Lambda, DynamoDB, S3, SNS, Polly
- 서버리스 애플리케이션을 AWS Code 시리즈를 이용하여 배포 프로세스를 제작할 수 있습니다.
- CodeStar, CodePipeline, CodeCommit, CodeBuild, CloudFormation(SAM), CodeDeploy
- X-ray를 이용하여 서버리스 서비스에 대한 모니터링 및 디버깅을 할 수 있습니다.
- Cognito를 이용하여 로그인 및 API 서비스 인증을 구현할 수 있습니다. - 2019년 상반기 예정
실습 비용
해당 실습은 3시간 기준(Lab1-1시간, Lab2-2시간)으로 비용을 예측합니다. 프리티어 기준으로 제작되어 있으나, 경우에 따라서는 과금이 발생할 수 있습니다. 따라서, 실습 이후에는 반드시 리소스 삭제가 필요합니다.
Service | Sub Service | Unit | Pricing | Use | free tier | etc |
---|---|---|---|---|---|---|
Cloud9 | EC2 - t2.micro | 1 h | $0.0116/Hour | t2.micro 2hour | 750hour/month | |
EBS - 8GB | 1 m | $0.1/GB | 8GB 2hour | 30GB/month | ||
Lambda | - | 128MB | $0.000000208/100ms | 1,000번 이하 | 100만번 요청 400GB-초 | 1년 후 지속 제공 |
API Gateway | - | 1백만 API 호출당 $3.50 처음 10TB에 대해 $0.09/GB | 1,000번 이하 | 호출 100만건 | ||
DynamoDB | - | WCU당 최소 $0.47 RCU당 최소 $0.09 GB당 최소 $0.25 | WCU 5 RCU 5 스토리지 100M | 매달 2억건 요청 | 1년 후 지속 제공 | |
SNS | - | 처음 1GB/월 $0.000 GB당 최대 10TB/월 $0.090 GB당 | 100M 이하 | 매달 15GB의 데이터 전송 | ||
Polly | - | 1백만 문자당 $4 | 1,000 문자 이하 | 매달 문자 500만개 | ||
CodeStar | CodePipeline | 월별 활성 파이프라인*당 $1 | 2개 | 매월 활성 파이프라인 1개 | ||
CodeCommit | 최초 5명 초과시 월별 $1 GB당 $0.06/월 (10GB/월 초과) Git 요청당 $0.001 (1000회/월 초과) | 2개 | 최초 5명까지 매달 50GB의 스토리지 매달 10,000건의 Git 요청 | 1년 후 지속 제공 | ||
CodeBuild | build.general1.small $0.005/분 | 50분 | 매월 100 빌드 분의 build.general1.small | 1년 후 지속 제공 | ||
CodeDeploy | EC2 또는 Lambda에 배포 무료 | 30회 | - | |||
CloudFormation | - | - | - | |||
s3 | - | PUT, COPY, POST 또는 LIST 요청 $0.005/1,000건 GET, SELECT 및 기타 모든 요청 $0.0004/1,000건 처음 50TB/월 $0.023/GB | Put 100번 내외 GET 2,000번 내외 | 매달 5GB 스토리지 Get 요청 20,000건 Put 요청 2,000건 |
실습 종료 후 리소스 삭제
실습이 종료되고 나면 리소스를 반드시 삭제해야 합니다.
해당 실습은 CloudFormation 기반으로 진행됩니다. 즉 실습에 사용한 Stack을 삭제하면, 배포되어 있는 리소스도 함께 삭제할 수 있습니다. 반드시 실습에 사용한 리소스가 삭제되었는지 확인 후 실습을 종료합니다.
만약 S3 버킷에 객체가 남아 있을 경우 해당 버킷이 삭제가 되지 않을 수 있으므로, 해당 S3 버킷을 직접 삭제하고 확인 합니다.
실습 구성 및 순서
실습은 Lab1과 Lab2로 구성되어져 있습니다.
- AWS 서버리스 HOL - Lab1. Cloud9을 이용한 서버리스 웹 애플리케이션 구축에서는 SAM 템플릿을 작성해 나가는 방법과 이해할 수 있습니다.
- AWS 서버리스 HOL - Lab2. Code 시리즈 서비스를 이용한 CI/CD 배포 프로세스 구축의 경우 Lab1을 진행하고 난 이후 진행이 가능 합니다. (Lab1의 SAM 이해가 전제 조건입니다.)
서버리스 웹 애플리케이션 구축 방법 소개
아래 다이어그램은 Lab1에서 구축할 서버리스 웹 애플리케이션입니다. 서버리스 서비스를 이용하기 때문에, 프로비저닝, 패치, 확장에 대해 고민할 필요가 없으며, 사용한 만큼만 비용을 지불합니다. 또한, 서버리스 서비스는 완전 관리형 서비스이기 때문에, 개발자는 애플리케이션 개발 자체에만 집중할 수 있습니다. 해당 애플리케이션은 텍스트를 전송하면 해당 텍스트를 읽어주는 기능을 서버리스 서비스 기반으로 개발합니다. Lab2에서는 아래의 RESTful API에 대해서 CI/CD 배포 프로세스를 구축하는 방법에 대해서 자세히 살펴봅니다.
Lab1 아키텍처 다이어그램
Lab1. Cloud9을 이용한 서버리스 서비스 구축 아키텍처 v1.3
Lab2 아키텍처 다이어그램
Lab2. Code 시리즈 서비스를 이용한 서버리스 서비스 CI/CD 배포를 위한 아키텍처 다이어그램 v1.3
애플리케이션의 구성
이 애플리케이션은 다섯 가지 영역으로 구분할 수 있습니다.
정적 웹페이지 구현 - StaticWebBucket
- 이 시나리오는 Amazon S3(Simple Storage Service)에서 호스팅되는 정적 웹 페이지를 기반으로 실행합니다.
새로운 뉴스를 등록 - PostNews
- MP3로 생성할 텍스트 정보는 Amazon API Gateway에 의해 노출된 RESTful API로 수신합니다.
- Amazon API Gateway는 MP3 파일 생성 프로세스를 초기화하는 전용 Lambda 함수인 "PostNews"를 설정합니다.
- "PostNews" Lambda 함수는 News에 대한 메타 정보를 "NewsTable" DynamoDB 테이블에 저장합니다.
- TTS 변환을 비동기적으로 실행하기 위해 Amazon Polly에 StartSpeechSynthesisTask 작업을 예약하고, 작업 ID를 DynamoDB에 추가합니다.
MP3 저장 정보 업데이트 - UpdateNews
- Amazon Polly에서 작업해서 만들어진 MP3 파일은 전용 S3 버킷인 "PollyMp3Bucket"에 저장합니다.
- 작업이 완료되면 Topic에 의해서 트리거된 Lambda 함수인 "UpdateNews"를 호출합니다.
- "UpdateNews" Lambda 함수는 작업 ID를 확인하고, DynamoDB에 등록된 해당 작업에 대한 상태를 변경합니다. (scheduled → COMPLETE)
등록된 뉴스 정보 검색 - GetNews
- GET 메서드를 이용해서 뉴스에 대한 정보를 검색하는 방법을 제공합니다.
- "GetNews" Lambda 함수는 DynamoDB 테이블에서 뉴스 텍스트에 대한 정보와 버킷에 업로드한 MP3 버킷 URL 정보를 제공합니다.
기존 뉴스 삭제 - DeleteNews
- RESTful API로 Delete 메서드를 이용하여 삭제를 요청합니다.
- "DeleteNews" Lambda 함수는 DynamoDB에 저장되어 있는 해당 News 항목과 관련되어 생성한 MP3를 삭제합니다.