在本文中,我们将通过部署文本到语音服务器的应用程序,该应用程序包含以下部分中介绍的两个主要流。
建筑学
最新帖子
- 用户调用调用newPost lambda函数的API网关恢复端点。
- newPost lambda函数将有关帖子的信息插入Amazon DynamoDB表中,其中所有帖子都存储了。
- 然后,newPost lambda函数发布了我们创建的SNS主题的帖子,因此可以异步将其转换。
- 转换为音频lambda函数,将订阅为SNS主题,并在出现新消息时触发(这意味着应将新帖子转换为音频文件)。
- 转换为音频lambda函数使用Amazon Polly将文本转换为指定语言的音频文件(与文本的语言相同)。
- 新的mp3文件保存在专用的S3存储桶中。
- 有关该帖子的信息已在DynamoDB表中更新(S3存储桶中存储的音频文件的URL保存使用先前存储的数据。)
获取帖子
- 用户调用API网关恢复端点,该端点调用getPost lambda函数,该函数包含用于检索邮政数据的逻辑。
- getPost lambda函数从DynamoDB表中检索有关帖子的信息(包括对Amazon S3的引用),并返回信息。
部署资源
您会找到代码存储库here。
To deploy应用程序,只需运行:
terraform apply -auto-approve
分解
我们正在使用Terraform部署应用程序。
如您在“体系结构”部分中看到的。我们有两个流量,第一个流是用户通过API网关提交帖子的时候。以及用户可以请求一个帖子或所有帖子的第二个流。
在main.tf中,我们使用的是我们创建的terraform modules来提供以下内容:
- DynamoDB表用于存储帖子元数据
- newpost lambda函数
- getPost lambda函数
- converttoaudio lambda函数
- API网关
iam.tf是我们定义最小二特权权限的地方。
public 用于存储所有音频帖子的S3存储桶,在s3.tf中声明。
中定义了用于将应用程序解散为异步流中的SNS主题我们正在创建一个名为 new_posts 的主题,将lambda作为subscription。因此,每次此主题收到消息时,它都会以该消息作为事件调用 converttoaudio lambda函数。
允许SNS调用 converttoaudio lambda函数,我们还创建了lambda许可resource。
newPost lambda功能
NewPost lambda函数做了两件事:
1-用以下架构在帖子表中创建一个项目:
id: recordId,
text: string,
voice: string,
status: 'PROCESSING'
您可以看到的状态是处理,因为它仍然需要转换为音频。
2-将项目ID发布到SNS主题(因此可以通过ConverttoAudio进行处理)
转换toaudio lambda功能
ConvertToAudio lambda函数执行以下操作:
- 从帖子表中获取帖子元数据
- 将文本分成块(如果文本大于2600个字符)
- 用文本调用Polly synthesizeSpeech并将其保存到本地文件
- 将音频文件上传到S3桶
- 更新带有S3音频URL的帖子表中的元数据,并将状态设置为更新
getPost lambda功能
GetPost lambda函数检索帖子:
- 如果postid(querystring)为“*”,则该函数将返回帖子表中的所有帖子
- 如果PostID是发布ID,则该函数将返回该特定帖子(如果存在)或一个空数组。
清理
不要忘记通过运行清理所有内容:
terraform destroy -auto-approve
包起来
在本文中,我介绍了文本到语音服务器的应用程序。在下一篇文章中,我将介绍如何处理Lambda可能遇到的错误,以及如何在API网关中处理它们。
在此之前,感谢您阅读本文。我希望您发现它有用ðð»。