...
서버리스 서비스를 이용하면 서버를 설치 운용하거나 관리할 필요 없이 비지니스 로직을 코드로 구현하는 것만으로도 애플리케이션 구축이 가능해진다.가능합니다
지난 Amazon Polly를 이용한 서버리스 구축 방법을 통해서 AWS에서 제공하는 관리콘솔을 통하여 AWS 관리 콘솔을 이용하여 웹 애플리케이션을 구축하는 방법을 살펴 보았다보았습니다.
이번에는 웹 애플리케이션 구축을 위하여 프로젝트를 생성하고, 코드를 만들고, 서비스에 서비스를 배포하는 일련의 과정을 Cloud9 IDE를 이용하여 구축하는 이용하는 방법을 살펴본다살펴봅니다.
또한, SAM(Serverless Application Model)과 AWS Code 시리즈를 이용하여 DevOps 환경으로 CI/CD 프로세스를 구축하는 방법을 살펴 본다.
...
실습합니다.
이번 실습을 진행하고 나면 아래와 같은 것을 직접 할 수 있게 됩니다.
이번 실습의 목적
- Cloud9을 이용하여 서버리스 애플리케이션을 SAM(Serverless Application Model) 기반으로 개발/테스트/배포 할 수 있다있습니다. (
- Cloud9, SAM
- , IAM
- SAM을 이해하고 서버리스 서비스에 필요한 서비스를 직접 기술 할 수 있습니다.SAM(Serverless Application Model)을 이해하고 직접 다룰 수 있다. (
- API Gateway, Lambda, DynamoDB, S3, SNS
- , Polly
- 서버리스 애플리케이션을 AWS Code 시리즈를 이용해서 이용하여 배포 프로세스를 제작할 수 있다있습니다. (
- CodePipeline, CodeCommit, CodeBuild, CloudFormation(SAM), CodeDeploy
...
구축하고자 하는 서버리스 웹 애플리케이션에 대한 소개
아래 다이어그램은 이 애플리케이션의 아키텍처를 보여 줍니다. 실습에서 구축하고자 하는 서버리스 웹 애플리케이션의 아키텍처 입니다. 서버리스 서비스를 이용하기 때문에, 프로비저닝, 패치, 확장에 대해서 대해 고민할 필요가 없는, 즉 서버 작업이 필요하지 않는 서버리스 서비스로 구성합니다. 클라우드가 자동으로 없으며, 사용한 만큼은 비용을 지불할 수 있습니다.
또한, AWS 완전 관리형 서비스이기 때문에 AWS가 이를 관리하기 때문에 우리는 애플리케이션 개발에만 집중할 수 있습니다.
draw.io Diagram | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
이 애플리케이션은 네 가지 서비스를 제공합니다다섯 가지 영역으로 나뉘어서 제작할 수 있습니다.
- 첫 번째는 HTML, CSS, Javascript 및 이미지를 S3를 이용하여 정적 웹 페이지로 호스팅 합니다.
- 두 번째는 새로운 게시물에 대한 텍스트 정보를 MP3 파일로 변환하는 방법을 제공합니다.등록하고, 비동기 처리를 위해서 SNS에 DynamoDB에 등록한 id 값을 Publish 합니다.
- 세 번째는 SNS에 의해서 트리거된 ConvertToAudio 함수에 의하여 DynamoDB에 등록된 텍스트를 수집하고, Polly를 이용하여 MP3 파일로 변환하고 S3 버켓에 파일을 업로드 하고, 최종 결과를 DynamoDB에 업데이트 합니다.
- 네 세 번째는 게시물에 대한 정보(S3 버킷에 저장된 MP3 파일에 대한 링크 포함)를 검색하는 것입니다.
- 네 다섯 번째는 사전에 등록한 게시물을 게시물과 생성한 MP3 파일을 삭제하는 것입니다.
게시물 News 등록/검색수집/삭제는 Amazon API Gateway를 통해 RESTful API 서비스로 제공됩니다. 로직은 Lambda 서비스를 통해서 구현되며 애플리케이션이 어떻게 상호 작용 하는지 살펴 보겠습니다.
...
- 이 시나리오는 Amazon S3(Simple Storage Service)에서 호스팅되는 정적 웹 페이지를 기반으로 실행합니다.
새로운
...
뉴스를 등록
- MP3로 생성할 텍스트 정보는 Amazon API Gateway에 의해 노출된 RESTful API로 수신합니다.
- Amazon API Gateway는 MP3 파일 생성 프로세스를 초기화하는 전용 Lambda 함수인 "New Post"를 설정합니다.한자를 한글로 변환하고자 할 경우에 사용할 "Hanja to Korean" Lambda 함수를 호출 할 수 있도록 설정합니다.
- "New Post" Lambda 함수는 게시물에 News에 대한 메타 정보를 DynamoDB 테이블에 저장합니다.
- 전체 TTS 변환 프로세스를 비동기적으로 실행하기 위해 Amazon SNS를 사용하여 새 게시물에 대한 정보를 받고 변환을 시작하도록 프로세스를 분리합니다.SNS의 Topic(NewsTopic)에 DynamoDB(NewsTable)에 등록한 새로운 id 값을 Publish 합니다.
텍스트를 MP3로 변환
- Amazon SNS Topic에 의해서 새 게시물의 텍스트를 오디오 파일로 변환하기 위한 Lambda 함수인 "Convert to SpeechConvertAudio"는 Amazon SNS 주제에서 에서 트리거 되도록 설정합니다.
- "Convert to SpeechConvertAudio" Lambda 함수는 Amazon Polly를 사용하여 텍스트를 지정된 언어의 음성을 이용하여 오디오 파일로 변환합니다.
- 생성된 오디오 파일인 MP3 파일은 전용 S3 버킷에 저장합니다.
- 텍스트가 MP3로 변환된 S3 버킷에 대한 참조 URL 정보 및 해당 게시물 처리 상태에 대한 정보는 DynamoDB 테이블에 업데이트 합니다.
등록된
...
뉴스 정보 검색
- RESTful 웹 서비스는 Amazon API Gateway를 사용하여 배포합니다. Amazon API Gateway는 게시물에 대한 정보를 검색하는 방법을 제공합니다.
이 방법은 게시물의 텍스트와 MP3 파일이 저장되는 S3 버킷에 대한 링크가 포함됩니다. 이 시나리오에서 이 웹 서비스는 Amazon S3에서 호스팅되는 정적 웹 페이지에서 호출됩니다. - Amazon API Gateway는 게시 데이터를 검색하기 위한 로직을 배포한 "Get Post" Lambda 함수를 뉴스를 검색하는 Lambda 함수인 "GetNews"를 호출합니다.
- "Get Post" Lambda 함수는 DynamoDB 테이블에서 게시물에 대한 정보(Amazon S3에 대한 참조 URL을 포함)를 검색합니다.
기존 뉴스 삭제
- RESTful API의 Delete 메서드를 이용하여 삭제를 요청합니다.1
- API Gateway는 뉴스 데이터를 삭제하는 Lambda 함수인 "DeleteNews"를 호출합니다.
아래 실습을 직접 수행하려면 Amazon Polly 서비스가 제공되는 지역을 아래 실습을 직접 수행하려면 Amazon Polly 서비스가 제공되는 지역을 선택하십시오. (이 예제는 Seoul 리전에서 한국어 언어 설정 상태에서 Cloud9이 존재하는 Singapore 리전에서 English 언어로 진행합니다.)
실습
실습은 다음과 같은 순서로 진행됩니다.
Lab1. Cloud 9을 이용한 웹 애플리케이션 구축 실습
- Cloud9 IDE 환경 생성
- Application 및 "PostNews" Lambda 함수 생성
- SAM(template.yml)에 DynamoDB, SNS, S3(Web, Mp3) 리소스 추가하기
- "ConvertAudio" Lambda 함수 생성
- "GetNews" Lambda 함수 생성
- "DeleteNews" Lambda 함수 생성
- SAM의 Output 설정
- 정적 웹 호스팅을 위한 파일 업로드하기
- 서비스 동작 테스트
- SAM을 CloudFormation 스택에 직접 반영하기
Lab2. 서버리스 서비스의 CI/CD 배포 프로세스 구축 실습
- 소스 리포지토리를 위해서 CodeCommit 생성
- CodeBuiild를 위한 buildspec.yaml 파일 생성
- CodePipeline 구축하기
- 소스 리포티토리에 코드 체크인하기
- 배포 결과 확인 (S3 정적 웹 페이지는 다루지 않습니다.)
- API를 이용해서 결과 확인
- Canary 배포를 위한 설정하기
- CloudFormation에서 CodeDeploy 할 수 있도록 IAM 정책 설정 적용
- 코드를 변경하여 배포하고 CodeDeploy 중에 API를 호출하여 적용되는지 확인하기
- 기존 배포 버전으로 롤백하기
- DynamoDB 테이블 만들기
- mp3 저장을 위한 S3 버킷 만들기
- SNS 주제 만들기
- IAM 역할 만들기
- "New Post" Lambda 함수 만들기
- "Hanja to Korean" Lambda 함수 만들기
- "Convert to Audio" Lambda 함수 만들기
- "Get Post" Lambda 함수 만들기
- Lambda 함수를 RESTful 웹 서비스로 만들기
- 정적 웹 서비스를 위한 S3 버킷 만들기
- 최종 테스트
1. DynamoDB 테이블 만들기
DynamoDB는 posts 와 관련된 게시물 정보와 생성된 MP3의 URL을 저장합니다.
...