利用 AWS 无服务架构之语音合成
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,一、架构图用户通过前段网页输入文字,通过后台一系列服务转换成语音,并在前段展示,并提供下载功能,整个服务没有使用一台服务器!用户输入文字进行提交;页面通过 API 代码把信息传递给 Lamdba 函数
千家信息网最后更新 2025年02月22日利用 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安全错误
数据库的锁怎样保障安全
武汉创游网络技术
软件开发方案模版
宁夏oa软件开发设计方案
我不是黑客我是网络技术科研人员
杭州心溢庄园网络技术有限公司
dbcp显示数据库数据
二维码解码软件开发
新余江西腾飞网络技术
传奇物品数据库乱码
房地一体怎么修改数据库
网络安全原理与技术试题
金税盘服务器地址
广清网络技术有限公司 电话
网络安全第一责任人是谁
常州浪潮服务器维修电话
麒麟下达梦数据库通信异常
为什么玩剑灵老是与服务器断开
服务器散热片选择
浪潮服务器远程管理口配置
黄岛丰田卡罗拉销售服务器
网络安全伴我行1000字
改数据库密码
深圳淘宝客直播软件开发
6g网络安全愿景
数据库什么时候打到索引
linux 服务器负载
网络安全销售点
清镇网络安全系统哪家靠谱
28岁初中男学软件开发
思科网计算机网络技术连线题