利用 AWS Serverless 组件构建语音合成服务

一、架构图

  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 代码,并配置好代码环境变量;
  • 为函数指定我们前面创建的角色;
  • 这个函数耗时比较长,可以把函数执行时间调整为一分钟;

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、创建域名解析

三、验证

测试地址:

原文地址:https://blog.51cto.com/wzlinux/2419078

时间: 2024-10-02 03:38:47

利用 AWS Serverless 组件构建语音合成服务的相关文章

Serverless 架构:用服务代替服务器

Serverless 架构:用服务代替服务器 转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需 加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:"加群 姓名 公司 职位 微信号 ". 还记得在十多年前,SaaS鼻祖SalesForce喊出的口号『No Software』吗?SalesForce在这个口号声中开创了SaaS行业,并成为当今市值520亿美元的SaaS之王.今天谈谈『No Server』有关的事, 继OpenStack.Do

Linux安装Axis C构建WebService服务

在安装Axis C++之前有两个组件是必须安装的,分别是Apache HTTP Server以及用于处理XML的程序Xerces:为了编译Axis以及Apache HTTPD,你的Linux机器还应该装有gcc编译器. 3个部件的都采用源码安装,它们都有类似的步骤: 上传并解压安装包 设置环境变量 利用configure生成Makefile 编译安装到usr/local/对应目录下 本文部署路径为apache安装在/usr/local/apache2,Axis2C 1.6 安装到/usr/loc

利用 Rational ClearCase ClearMake 构建高性能的企业级构建环境

转载地址:http://www.ibm.com/developerworks/cn/rational/r-cn-clearmakebuild/ 构建管理是 IBM® Rational® ClearCase 产品的一个重要模块,它将软件产品的构建和软件开发配置管理进行无缝衔接,方便统一管理,而且还提供了并行和分布式构建,为构建一个高效稳定的构建环境提供了便捷.在 ClearCase 构建管理中有两个构建应用 ClearMake 和 Omake.ClearMake 可用于 Unix.Linux 和

SpringCloud构建微服务 | 服务注册与发现(一)提供Demo

Eureka介绍: Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的. SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能. Eureka包含两个组件:Eureka Server和Eureka Client. Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,

使用ServiceStack构建Web服务

提到构建WebService服务,大家肯定第一个想到的是使用WCF,因为简单快捷嘛.首先要说明的是,本人对WCF不太了解,但是想快速建立一个WebService,于是看到了MSDN上的这一篇文章 Building Cross-Platform Web Services with ServiceStack,所以这里简要介绍一下如何使用ServiceStack快速建立一个WebService服务. 当然,在开始之前,首先要说明一下ServiceStack是个什么东西. 在国内用ServiceStac

Spring Cloud构建微服务架构(五)服务网关

通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现:而服务间通过Ribbon或Feign实现服务的消费以及均衡负载:通过Spring Cloud Config实现了应用多环境的外部化配置以及版本管理.为了使得服务集群更为健壮,使用Hystrix的融断机制来避免在微服务架构中个别服务出现异常时引起的故障蔓延. 在该架

构建微服务:Spring boot

构建微服务:Spring boot 在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 前几篇文章地址: 构建微服务:Spring boot 入门篇 构建微服务:Spring boot 提高篇 构建微服务:Spring boot中Redis的使用 构建微服务:thymeleaf使用详解 作者:纯洁的微笑出处:http://www.ityouknow.com/

基于Dubbo框架构建分布式服务 (二)

Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现分布式服务调用,也就是说服务提供方(Provider)发布的服务可以天然就是集群服务,比如,在实时性要求很高的应用场景下,可能希望来自消费方(Consumer)的调用响应时间最短,只需要选择Dubbo的Forking Cluster模式配置,就可以对一个调用请求并行发送到多台对等的提供方

[转载] 基于Dubbo框架构建分布式服务

转载自http://shiyanjun.cn/archives/1075.html Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现分布式服务调用,也就是说服务提供方(Provider)发布的服务可以天然就是集群服务,比如,在实时性要求很高的应用场景下,可能希望来自消费方(Consumer)的调用响应时间最短,只需要选择Dubbo的F