利用 AWS 无服务架构之语音合成
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,一、架构图用户通过前段网页输入文字,通过后台一系列服务转换成语音,并在前段展示,并提供下载功能,整个服务没有使用一台服务器!用户输入文字进行提交;页面通过 API 代码把信息传递给 Lamdba 函数
千家信息网最后更新 2025年12月04日利用 AWS 无服务架构之语音合成
一、架构图

- 用户通过前段网页输入文字,通过后台一系列服务转换成语音,并在前段展示,并提供下载功能,整个服务没有使用一台服务器!
- 用户输入文字进行提交;
- 页面通过 API 代码把信息传递给 Lamdba 函数 NewPost 写入 DynamoDB,并把 postId 传递给 SNS;
- SNS 把 postId 传递给 Lambda 函数 Convert,函数 Convert 通过 postId 去 DynamoDB 查询文本数据,并调用 Polly 进行语音合成;
- 函数 Convert 把合成的语音文件存入 S3 中,更更新数据库状态;
- 用户就可以通过 GET 去获取语音合成的相关信息。
二、服务部署
2.1、创建 DynamoDB 表
很简单,写个表名,写个主键即可,其他默认。
Table name:posts
Primary key:id
2.2、创建 S3
我们创建两个 S3 存储桶,一个用来存放静态网页,一个用来存放语音合成的音频。
2.2.1 静态网页存储桶
- 名称大家随意确定,我这里起的名字为 pollywebsite;
- 打开公共访问权限;
- 启用静态网站托管功能;
- 添加存储桶策略,以便公共用户可以访问,策略如下:
{ "Version": "2012-10-17", "Id": "Policy1562738599054", "Statement": [ { "Sid": "Stmt1562738571491", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::wz-pollywebsite/*" } ]}2.2.2、音频存储桶
- 名字大家随意定,我这里起名字为 pollyaudio;
- 打开公共访问权限。
2.3、创建 SNS Topic
- 名称大家随意定,我这里起名字为 new_posts。
2.4、为 Lambda 创建权限
从架构图得知,我们的 Lambda 函数和多个组件进行交互,需要有相关的权限才行,我们通过 IAM 为其创建一个 Role。
- 在选择的服务使用此 Role 处选择 Lambda;
- 先不用添加 Policy,先创建好 Role;
- 角色名大家可以随意写,我这里起名为 LamdbaPostsReaderRole;
- 为 Role 添加 Inline Policy,策略规则如下:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "polly:SynthesizeSpeech", "logs:CreateLogStream", "sns:Publish", "dynamodb:PutItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem", "s3:GetBucketLocation", "logs:CreateLogGroup", "logs:PutLogEvents", "s3:PutObjectAcl" ], "Resource": "*" } ]}2.5、创建 Lambda NewPost
- 函数名大家自己随意写,我这里写 wz_NewPost;
- 运行环境大家选择 Python 3.7。
- 填写好相关的 Python 代码,并配置好代码环境变量;
- 为函数指定我们前面创建的角色。
2.6、创建 Lambda GetPosts
- 函数名大家自己随意写,我这里写 wz_GetPosts;
- 运行环境大家选择 Python 3.7。
- 填写好相关的 Python 代码,并配置好代码环境变量;
- 为函数指定我们前面创建的角色。
2.7、创建 Lambda Convert
- 函数名大家自己随意写,我这里写 wz_ConvertToAudio;
- 运行环境大家选择 Python 3.7。
- 填写好相关的 Python 代码,并配置好代码环境变量;
- 为函数指定我们前面创建的角色;
- 这个函数耗时比较长,可以把函数执行时间调整为一分钟;
- 添加我们创建的 SNS 为触发器。
2.8、创建 API Gateway
- API 名称大家随意写,我这里写 PostReaderAPI,风格为 REST;
- 创建一个 GET 方法,选择
wz_GetPosts函数,添加 URL Query String Parameters; - GET 方法启用 CORS;
- 创建 Mapping Templates,类型为 application/json,内容如下:
{ "postId" : "$input.params('postId')"}- 创建一个 POST 方法,选择
wz_GetPosts函数。
2.9、上传前端代码到 S3
2.10、创建域名解析
注意,如果域名别名解析到 S3 存储桶,存储桶的名称必须和域名一致,所以我要修改一下存储桶 website 的名称。
三、验证
测试地址: http://polly.wzlinux.com
部署教程视频:https://edu.51cto.com/course/18818.html
欢迎大家扫码关注,获取更多信息
函数
代码
存储
选择
环境
语音
服务
名称
权限
用户
角色
信息
变量
域名
方法
策略
网页
静态
运行
配置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全入侵处置及防御措施
苹果服务器会保存用户聊天记录吗
软件开发齐鲁理工
表格选中多个数据库中
软件开发最顶级的岗位
李胜是某计算机软件开发公司
杭州百商网络技术有限公司
软件开发技术组
台湾服务器厂商
上海常见网络技术欢迎咨询
thrift 数据库
农信社软件开发部如何
创新智能科技互联网
微信语音通话内容保存在服务器吗
软件开发岗位的工作内容
软件开发 怎么提交测试
国际知名的化学数据库
基岩版服务器卡顿
网络安全体系概念
服务器自动变慢
数据库2008怎么索引
北京君正服务器芯片上市公司
jmeter 多数据库
广州登客互联网络科技公司
贵州戴尔服务器
贵州服务器电源哪里便宜
5g网络技术可靠吗
甘肃网络安全法
软件开发过程的四个阶段
SAP数据库升级HANA