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

1、架构图

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

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

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

2、服务部署

2.一、建立 DynamoDB 表

很简单,写个表名,写个主键便可,其余默认。html

Table name:posts
Primary key:id前端

2.二、建立 S3

咱们建立两个 S3 存储桶,一个用来存放静态网页,一个用来存放语音合成的音频。linux

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.二、音频存储桶

  • 名字你们随意定,我这里起名字为 pollyaudio;
  • 打开公共访问权限。

2.三、建立 SNS Topic

  • 名称你们随意定,我这里起名字为 new_posts。

2.四、为 Lambda 建立权限

从架构图得知,咱们的 Lambda 函数和多个组件进行交互,须要有相关的权限才行,咱们经过 IAM 为其建立一个 Role。web

  • 在选择的服务使用此 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.五、建立 Lambda NewPost

  • 函数名你们本身随意写,我这里写 wz_NewPost;
  • 运行环境你们选择 Python 3.7。
  • 填写好相关的 Python 代码,并配置好代码环境变量;
  • 为函数指定咱们前面建立的角色。

2.六、建立 Lambda GetPosts

  • 函数名你们本身随意写,我这里写 wz_GetPosts;
  • 运行环境你们选择 Python 3.7。
  • 填写好相关的 Python 代码,并配置好代码环境变量;
  • 为函数指定咱们前面建立的角色。

2.七、建立 Lambda Convert

  • 函数名你们本身随意写,我这里写 wz_ConvertToAudio;
  • 运行环境你们选择 Python 3.7。
  • 填写好相关的 Python 代码,并配置好代码环境变量;
  • 为函数指定咱们前面建立的角色;
  • 这个函数耗时比较长,能够把函数执行时间调整为一分钟;
  • 添加咱们建立的 SNS 为触发器。

2.八、建立 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.九、上传前端代码到 S3

2.十、建立域名解析

注意,若是域名别名解析到 S3 存储桶,存储桶的名称必须和域名一致,因此我要修改一下存储桶 website 的名称。数据库

3、验证

测试地址: http://polly.wzlinux.com
部署教程视频:https://edu.51cto.com/course/18818.htmljson

相关文章
相关标签/搜索