利用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
欢迎大家扫码关注,获取更多信息
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章题目:利用AWS无服务架构之语音合成-创新互联
转载源于:http://cdiso.cn/article/dcsicp.html