목차
Version Update v 1.3 - 2019.02.13- Lab1과 Lab2를 분리했습니다.
- 기존 Lab2의 도전과제를 실습에 바로 적용하였습니다. (과거 버전은 CodeStar 프로젝트 사용 방법을 설명하고 Lab1 소스의 통합은 도전과제로 남김, 백업해둠)
- CodeCommit에 올라간 정적 웹 컨텐츠를 CodeDeploy를 통해서 S3로 배포하는 방법을 추가했습니다.
Version Update v 1.2 - 2018.11.12- 도전과제가 추가되었습니다. 마지막 CodeStar의 소스코드를 Lab1에서 만든 소스코드로 변경해서 배포 해보세요.
- DevDay2018 - Amazon Polly와 Cloud9을 활용한 서버리스 웹 애플리케이션 및 CI/CD 배포 프로세스 구축
이라는 주제로 만드는 방법을 Live로 시연한 영상이 있습니다. 참고해서 Lab1의 동적 컨텐츠를 처리하는 부분을 Lab2에 추가해서 진행할 수 있습니다.
Version Update v 1.1 - 2018.10.23- Lab1의 CORS 이슈가 나는 부분에 대하여 Fix 하였습니다.
- Polly 서비스를 비동기로 호출하는 구조로 변경 하였습니다.
- Polly의 최대 요청 문자 개수가 10만개로 업데이트 되어 로직을 간단하게 변경했습니다. (기존에는 1,000자 단위로 나누어서 mp3 만들어서 붙이는 방식)
- Polly 테스트 시, 철수, 귀신 단어가 등장하면, 철수 흉내내는 서연 목소리로 녹음 되도록, 귀신 흉내내는 서연 목소리가 재생되는 기능이 추가되었습니다.
- X-ray를 통한 모니터링을 할 수 있도록 Tracing 옵션이 SAM에 추가되었습니다.
|
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만건 처음 10TB에 대해 $0.09/GB |
|
DynamoDB | - |
| WCU당 최소 $0.47 RCU당 최소 $0.09 GB당 최소 $0.25 | WCU 5 RCU 5 스토리지 100M | 매달 2억건 요청 WCU 25 / RCU 25 인덱싱된 데이터 스토리지 25G | 1년 후 지속 제공 |
SNS | - |
| 처음 1GB/월 $0.000 GB당 최대 10TB/월 $0.090 GB당 | 100M 이하 | 매달 15GB의 데이터 전송 |
|
Polly | - |
| 1백만 문자당 $4 | 1,000 문자 이하 | 매달 문자 500만개 |
|
CodeStar | CodePipeline |
| 월별 활성 파이프라인*당 $1 | 1개 | 매월 활성 파이프라인 1개 |
|
CodeCommit |
| 최초 5명 초과시 월별 $1 GB당 $0.06/월 (10GB/월 초과) Git 요청당 $0.001 (1000회/월 초과) | 1개 | 최초 5명까지 매달 50GB의 스토리지 매달 10,000건의 Git 요청 | 1년 후 지속 제공 |
CodeBuild |
| build.general1.small $0.005/분 | 30분 | 매월 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로 구성되어져 있습니다. - Lab1에서는 SAM 템플릿을 작성해 나가는 방법과 이해할 수 있습니다.
- Lab2의 경우 Lab1을 진행하고 난 이후 진행이 가능 합니다. (Lab1의 SAM 이해가 전제 조건입니다.)
|
서버리스 웹 애플리케이션 구축 방법 소개
아래 다이어그램은 Lab1에서 구축할 서버리스 웹 애플리케이션입니다. 서버리스 서비스를 이용하기 때문에, 프로비저닝, 패치, 확장에 대해 고민할 필요가 없으며, 사용한 만큼만 비용을 지불합니다. 또한, 서버리스 서비스는 완전 관리형 서비스이기 때문에, 개발자는 애플리케이션 개발 자체에만 집중할 수 있습니다. 해당 애플리케이션은 텍스트를 전송하면 해당 텍스트를 읽어주는 기능을 서버리스 서비스 기반으로 개발합니다. Lab2에서는 아래의 RESTful API에 대해서 CI/CD 배포 프로세스를 구축하는 방법에 대해서 자세히 살펴봅니다.
v1.0 Polly과 async를 지원하기 전의 아키텍처 다이어그램 
|
Lab1 아키텍처 다이어그램
Lab2 아키텍처 다이어그램
애플리케이션의 구성
이 애플리케이션은 다섯 가지 영역으로 구분할 수 있습니다.
정적 웹페이지 구현 - 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를 삭제합니다.