Link: https://cdk.awsdemo.kr/serverless201
목차
펼치기 | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||
|
...
Amazon Polly는 텍스트를 생생한 음성으로 변환시킵니다. 자연스럽게 말하는 애플리케이션을 만들 수 있으므로 완전히 새로운 범주의 음성을 사용하는 서비스를 만들 수 있습니다. Amazon Polly는 딥 러닝 학습 기술을 사용하여 사람 목소리처럼 들리는 음성을 합성하는 Amazon AI 서비스입니다. 28 29 개국 언어(한국어 포함)로 57 63 가지(한국어 서연 목소리 포함)의 목소리가 포함되어 있어 이상적인 목소리를 선택하여 다양한 국가에서 사용할 수 있는 음성을 제공하는 애플리케이션을 제작할 수 있습니다. (2019년 03월 06일 2021년 04월 12일 기준)
또한 Amazon Polly는 실시간 대화를 지원하는 데 요구되는 일관성 있는 빠른 응답 시간을 제공합니다. 오프라인 재생 또는 재배포를 위해 Polly의 오디오 파일을 캐시하고 저장할 수 있습니다. (즉, 재활용이 가능하므로 추가 과금이 발생하지 않습니다.) 그리고 Polly는 사용하기 쉽습니다. 음성으로 변환하려는 텍스트를 Amazon Polly API에 실어 보내기만 하면 됩니다. Amazon Polly는 오디오 스트림을 애플리케이션에 즉시 반환하므로 애플리케이션에서 직접 재생하거나 MP3와 같은 표준 오디오 파일 형식으로 저장할 수 있습니다.
...
PostNews와 같이 Create function 버튼을 클릭해서 UpdateNews 함수를 생성합니다. Runtime과 Role 설정은 기존과 동일합니다.
UpdateNews 의 함수 코드를 아래 코드로 대체합니다. 반드시 Deploy 버튼을 눌러서 저장하세요.
코드 블럭 from __future__ import print_function import boto3 import os import json from contextlib import closing from boto3.dynamodb.conditions import Key, Attr import re def lambda_handler(event, context): polly_message = event["Records"][0]["Sns"]["Message"] print (polly_message) polly_response = json.loads(polly_message) # Updating the item in DynamoDB dynamodb = boto3.resource('dynamodb') table = dynamodb.Table(os.environ['DB_TABLE_NAME']) response = table.update_item( Key={ 'id': polly_response["taskId"] }, UpdateExpression="set pollyStatus = :s", ExpressionAttributeValues={ ':s': polly_response['taskStatus'] } ) print(response) s3 = boto3.client('s3') s3.put_object_acl( ACL = 'public-read', Bucket = os.environ['BUCKET_NAME'], Key = polly_response["taskId"] + ".mp3" ) return
Environment variables는 DB_TABLE_NAME에 NewsTable 값을 입력하고, BUCKET_NAME에는 S3 버킷 이름(
polly-mp3.awsdemo.kr)을 지정합니다. Tags에 Name과 NewsApp 을 입력하고, Timeout을 1 min 으로 수정한후, 우측 상단의 Save 버튼을 클릭하여 저장합니다.
- UpdateNews Lambda 함수는 SNS Topic에 의해서 트리거 되어 동작이 되어야 합니다. 따라서 Function Overview에서 좌측 하단의 Add trigger 버튼을 클릭합니다.
- 트리거를 위하여 SNS를 클릭합니다. SNS topic 으로 NewsTopic 을 지정합니다. 해당 SNS에서 맞는지 확인하고 Add 버튼을 클릭하여 트리거를 등록하고 확인합니다.
...
Amazon S3는 정적 웹 페이지를 호스팅 할 수 있습니다. 다음의 링크를 통해 정적 웹 호스팅을 하기 위한 패키지를 다운로드 할 수 있습니다: 3개의 파일(html, css, javascript)가 포함되어져 있으며, JavaScript 를 사용하여 동적 컨텐츠 API 호출을 API Gateway로 연결합니다.
...
- 정적 웹 호스팅을 위한 소스코드를 준비합니다.
- 클라이언트 PC에 패키지 파일을 다운로드 받고 압축을 해제합니다.
- 기존에 생성한 Amazon API Gateway의 URL을 연결하기 위해서 scripts.js 파일을 열어서 API를 배포하고 받은 URL로 수정합니다.
API_ENDPOINT = "" 에 비어있는 부분을 아래와 같이 상단에서 API Gateway에서 배포된 URL로 넣어 줍니다.
- S3 정적 웹 호스팅용 버킷을 생성합니다. (S3 버킷 이름은 모든 리전에 유일해야 하므로 이름을 작성할 때 주의합니다.)
- 외부에서 퍼블릭하게 웹 호스팅 하는 파일에 접속할 수 있도록 체크 박스를 모두 해지 합니다. (기본은 체크되어 안전하게 막혀 있음)
- Tags에 Name 이라는 Key 값과 NewsApp 이라는 Value 값을 입력합니다. 모든 설정이 완료되면 Create Bucket 버튼을 클릭하고 S3 버킷을 생성합니다.
- S3 버킷 정적 웹 호스팅 기능 활성화를 위해서 정적 웹 호스팅을 제공할 버킷을 클릭합니다.
- 2번째 Properties 탭에서 최하단에 있는 Static Web Hosting 기능을 활성화하기 위하여 Edit 버튼을 클릭합니다.
- 정적 웹 호스팅 기능이 비활성화 되어 있습니다. Static Website hosting 기능을 Enable 하고, index.html 와 error.html 문서를 지정하고 하단의 Save change 버튼을 클릭합니다.
- 정적 웹 호스팅 기능이 활성화 된 것을 볼 수 있습니다.
- 정적 웹 호스팅을 위해서 해당 버킷에 있는 객체(파일)에 대해서 접근할 수 있는 정책을 설정 할 수 있습니다. Permissions 탭을 선택하고 Bucket Policy 를 클릭합니다.
아래의 정책에서 BUCKET_NAME 부분을 생성한 버킷 이름으로 변경한 후 복사합니다.
코드 블럭 title S3 버켓에 대한 접근 권한 설정 { "Version":"2012-10-17", "Statement":[ { "Sid":"PublicReadGetObject", "Effect":"Allow", "Principal":"*", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::BUCKET_NAME/*" ] } ] }
- 버켓 정책을 설정하고 우측 상단의 Save 버튼을 클릭하여 저장합니다.
- S3 Bucket이 Public 접근이 가능하다는 메시지가 화면에 표시됩니다.
- 해당 S3 버킷에 정적 웹 포스팅에 필요한 파일 4개를 업로드 하기 위해서, Overview 탭으로 이동하고 좌측 상단의 Upload 버튼을 클릭합니다.
- 팝업창이 나타나면 Add Files 방금 수정한 파일을 포함한 4개 파일(index.html, favicon.ico, scripts.js, styles.css)을 지정하여 우측 하단의 Upload 버튼을 클릭합니다.
- 다음과 같이 파일이 업로드된 것을 확인할 수 있습니다.
- Properties 탭을 선택하고, Static website hosting 메뉴를 선택하면 웹 페이지 접속을 위한 Endpoint 를 확인할 수 있습니다. 해당 Endpoint URL을 클릭하면 새로운 탭에 웹 페이지가 표시 됩니다.
- 웹 페이지 URL을 접속해서 정상 동작 여부를 확인 합니다.
...