利用 AWS 无服务架构之语音合成

网友投稿 263 2022-10-13

利用 AWS 无服务架构之语音合成

一、架构图

用户通过前段网页输入文字,通过后台一系列服务转换成语音,并在前段展示,并提供下载功能,整个服务没有使用一台服务器! 用户输入文字进行提交; 页面通过 API 代码把信息传递给 Lamdba 函数 NewPost 写入 DynamoDB,并把 postId 传递给 SNS; SNS 把 postId 传递给 Lambda 函数 Convert,函数 Convert 通过 postId 去 DynamoDB 查询文本数据,并调用 Polly 进行语音合成; 函数 Convert 把合成的语音文件存入 S3 中,更更新数据库状态; 用户就可以通过 GET 去获取语音合成的相关信息。

二、服务部署

2.1、创建 DynamoDB 表

很简单,写个表名,写个主键即可,其他默认。

Table name:postsPrimary 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

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./course/18818.html

欢迎大家扫码关注,获取更多信息

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot实现邮件发送的示例代码
下一篇:AWS 云服务各组件之间的关系
相关文章

 发表评论

暂时没有评论,来抢沙发吧~