一、架构图

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

利用 AWS 无服务架构之语音合成的更多相关文章

  1. 无服务架构在IOT的应用场景——使用函数工作流处理DIS数据

    在物联网领域,复杂性往往并非在于传感器,真正的复杂性在于各种传感器产生的大量数据,以及对这些数据的处理,所以开发者不得不花费大量的时间去构建和维护后端服务器来处理这样一个庞大的数据流.而在今天这个敏捷 ...

  2. 理解serverless无服务架构原理(一)

    阅读目录 一:什么是serverless无服务? 二:与传统模式架构区别? 三:serverless优缺点? 四:使用serverless的应用场景有哪些? 回到顶部 一:什么是serverless无 ...

  3. AWS 消息服务(九)

    松耦合架构 概述 使用独立的组件设计架构,降低相互依赖,当一个组件出现故障时,其他不受影响 利用ELB和SQS来打破传统服务器各层的关联,成为各层之间的中介,各层的故障和扩展均由中介自助处理 系统的耦 ...

  4. Serverless无服务器架构详解

    本文对Serverless架构的基础概念.具体产品.应用场景.工作原理进行详细解析. 基础概念 Serverless: 无服务器架构,即在无需管理服务器等底层资源的情况下完成应用的开发和运行,是云原生 ...

  5. 无服务器架构(Faas/Serverless)

    摘要无服务器架构(Faas/Serverless),是软件架构领域的热门话题. AWS,Google Cloud和Azure - 在无服务器上投入了大量资金,已经在看到了大量专门针对Faas/Serv ...

  6. 5分钟构建无服务图片鉴黄web应用(基于FunctionGraph)

    函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行.即使在一些复杂的web应用场景中,函数工作流也能发挥出令人 ...

  7. 基于AWS的云服务架构最佳实践

    ZZ from: http://blog.csdn.net/wireless_com/article/details/43305701 近年来,对于打造高度可扩展的应用程序,软件架构师们挖掘了若干相关 ...

  8. Serverless无服务应用架构纵横谈

    Serverless无服务应用架构纵横谈 一.Serverless是啥 自从互联网兴起以来,Server就成了网络的核心部件.所以围绕Server的生意圈,也发展得如火如荼. 从最早的电信托管,到虚拟 ...

  9. 《Serverless架构-无服务单页应用开发》读后感

    本书的作者是[美]Ben Rady,译者郑赞美.简传挺,书中作者详细的介绍了如何使用html.js以及amazon提供的诸多云服务(Simple Storage Service(S3).Cognito ...

随机推荐

  1. 织梦cms导航高亮显示栏目及首页的方法

    直奔主题了,高亮显示教程适用于您具有一定的CSS基础才可以了,前提把高亮显示的样式写好,然后再开始高亮显示标签适用. <li {dede:field name=typeid runphp=&qu ...

  2. PHP读取文件内容的方法

    下面我们就为大家详细介绍PHP读取文件内容的两种方法. 第一种方法:fread函数 <?php $file=fopen('1.txt','rb+'); echo fread($file,file ...

  3. MongoDB 查看chunk块大小

    使用mongo shell连到mongos执行命令:AllChunkInfo("dbname.cellname",true) 点击(此处)折叠或打开 AllChunkInfo = ...

  4. 遇到bug如何处理

    issue中查询是否有相似bug assert / try-except / IDE单步调式 框架可以查询源码或者查询官方文档

  5. FOI冬令营 Day2

    目录 T1.直径(diameter) 传送门 Code T2.定价(price) 传送门 Code T3.排序(sort) 传送门 Code T1.直径(diameter) 传送门 Code //20 ...

  6. LOJ#2977. 「THUSCH 2017」巧克力(斯坦纳树+随机化)

    题目 题目 做法 考虑部分数据(颜色较少)的: 二分中位数\(mid\),将\(v[i]=1000+(v[i]>mid)\) 具体二分操作:然后求出包含\(K\)种颜色的联通快最小的权值和,判断 ...

  7. linux 安装nginx(转)

    转自https://www.cnblogs.com/xiaochongc/p/11527492.html 步骤: 1. 安装所需环境 a)安装gcc:安装 nginx 需要先将官网下载的源码进行编译, ...

  8. 2018-2019-2 网络对抗技术 20165231 Exp9 Web安全基础

    实验内容 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分.包括(SQL,XSS,CSRF).Webgoat实践下相关实验. 实验过程 WebGoat: Webgoat是OWA ...

  9. 微信小程序设置滚动条

    前言 又很久没有写东西了,上周开始将一个APP和一个网站的内容整合到微信小程序中,到这会儿终于搞得快结束了,才发现为啥我的小程序滚动视图没有滚动条,这是闹哪样,没有滚动条的滚动是没有灵魂的. 客官可移 ...

  10. Android 系统添加SELinux权限

    本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=11185476 CPU:RK3288 系统:Android 5.1 SEL ...