AWS Polly API는 텍스트를 자연스러운 음성으로 변환(TTS)해 오디오 스트림으로 반환하는 클라우드 서비스이다.
SynthesizeSpeech API에 텍스트, 보이스 ID(한국어 Seoyeon 등), 포맷(MP3)을 넘겨 호출하며, 고품질 신경망(Neural) 엔진과 속도·억양 제어용 SSML을 지원합니다. 음성 안내나 오디오북 구현에 주로 사용된다.
AWS Polly API는 텍스트를 자연스러운 음성으로 변환(TTS)해 오디오 스트림으로 반환하는 클라우드 서비스이다.
SynthesizeSpeech API에 텍스트, 보이스 ID(한국어 Seoyeon 등), 포맷(MP3)을 넘겨 호출하며, 고품질 신경망(Neural) 엔진과 속도·억양 제어용 SSML을 지원합니다. 음성 안내나 오디오북 구현에 주로 사용된다.
애플리케이션이 Polly API를 호출하려면 권한이 부여된 IAM 자격 증명이 필요하다.
관리형 정책: 빠른 연동 시 AWS 관리형 정책인 AmazonPollyReadOnlyAccess 또는 AmazonPollyFullAccess를 IAM 사용자나 역할에 연결한다.
최소 권한 정책: 보안상 음성 합성만 허용할 때는 아래 권한만 포함한 커스텀 정책을 적용한다.
polly:SynthesizeSpeech (실시간 음성 합성)
polly:DescribeVoices (지원 음성 목록 조회)
자격 증명 방식: 로컬 개발 환경은 IAM 사용자의 액세스 키를 환경 변수로 등록하고, EC2나 Lambda 등 서버 환경은 IAM 역할을 부여해 임시 자격 증명을 사용하는 것이 원칙이다.
import os, platform import boto3 def write_text( setText ): ACCESS_KEY = 'AAAAAAAAAA' # os.environ['ACCESS_KEY'] SECRET_KEY = 'BBBBBBBBBB' # os.environ['SECRET_KEY'] polly = boto3.client('polly', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY, region_name='ap-northeast-2') # 텍스트를 음성으로 변환 response = polly.synthesize_speech( Text=setText , OutputFormat='mp3', # 출력 형식 (mp3, ogg_vorbis, pcm 중 선택) VoiceId='Seoyeon' # 한국어 음성 (Seoyeon은 여성 목소리) ) # 음성을 파일로 저장 file_name = "output4.mp3" if "AudioStream" in response: with open(file_name, "wb") as file: file.write(response["AudioStream"].read()) print(f"MP3 파일 생성 완료: {file_name}") else: print("오디오 스트림 생성에 실패했습니다.") print(response) return response setText = """ Amazon Polly를 통한 서버리스 동화 구연 앱 만들기 """ res = write_text(setText) # Amazon Polly를 통한 서버리스 동화 구연 앱 만들기 - 윤석찬 (AWS 테크에반젤리스트) # https://www.youtube.com/watch?v=kohv8FIwlKM
boto3.client('polly', ...)를 통해 서울 리전(ap-northeast-2)의 AWS Polly 서비스 객체를 초기화한다.
synthesize_speech() 메서드로 전달된 텍스트(setText)를 한국어 여성 음성(Seoyeon) 모델을 사용해 MP3 포맷으로 변환 요청한다.
API 응답 객체에서 바이너리 데이터인 AudioStream을 추출한 뒤, output4.mp3 파일로 로컬에 바이너리 쓰기(wb) 모드로 저장한다.
파일 저장이 완료되면 처리 상태를 출력하고 최종 AWS API 응답 딕셔너리(response)를 반환한다.
* 이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.