一、架构图
-
<李>用户通过前段网页输入文字,通过后台一系列服务转换成语音,并在前段展示,并提供下载功能,整个服务没有使用一台服务器!李>
<李>用户输入文字进行提交;李>
<李>页面通过API代码把信息传递给Lamdba函数NewPost写入DynamoDB,并把postId传递给SNS;李>
<李> SNS把postId传递给λ函数转换,函数转换通过postId去DynamoDB查询文本数据,并调用波利进行语音合成;李>
<李>函数转换把合成的语音文件存入S3中,更更新数据库状态,李>
<李>用户就可以通过得到去获取语音合成的相关信息。李>
二、服务部署
2.1,创建DynamoDB表
很简单,写个表名,写个主键即可,其他默认。
<强>表名强>:文章
强>:<强>主键id
2.2,创建S3
我们创建两个S3存储桶,一个用来存放静态网页,一个用来存放语音合成的音频。
2.2.1静态网页存储桶
-
<李>名称大家随意确定,我这里起的名字为pollywebsite;李>
<李>打开公共访问权限;李>
<李>启用静态网站托管功能,李>
<李>添加存储桶策略,以便公共用户可以访问,策略如下:李>
<代码> { “版本”:“2012-10-17”, “Id”:“Policy1562738599054”, “声明”:[ { “席德”:“Stmt1562738571491”, “效应”:“允许”, “主要”:“*”, “行动”:“s3: GetObject”, “资源”:“在攻击:aws: s3::: wz-pollywebsite/*” } ] }代码>2.2.2
,音频存储桶
-
<李>名字大家随意定,我这里起名字为pollyaudio;李>
<李>打开公共访问权限。李>
2.3,创建SNS话题/h3>
<李>名称大家随意定,我这里起名字为new_posts。李>
2.4,为λ创建权限
从架构图得知,我们的λ函数和多个组件进行交互,需要有相关的权限才行,我们通过我为其创建一个角色。
-
<李>在选择的服务使用此角色处选择λ;李>
<李>先不用添加政策,先创建好角色;李>
<李>角色名大家可以随意写,我这里起名为LamdbaPostsReaderRole;李>
<李>为角色添加内联政策策略规则如下:李>
<代码> { “版本”:“2012-10-17”, “声明”:[ { “席德”:“VisualEditor0”, “效应”:“允许”, “行动”( “s3: propertynames”, “宝利:SynthesizeSpeech”, “日志:CreateLogStream”, “sns:发布”, “dynamodb: PutItem”, “dynamodb:扫描”, “dynamodb:查询”, “dynamodb: UpdateItem”, “s3: GetBucketLocation”, “日志:CreateLogGroup”, “日志:PutLogEvents”, “s3: PutObjectAcl” ), “资源”:“*” } ] }代码>
2.5,创建λNewPost
-
<李>函数名大家自己随意写,我这里写wz_NewPost;李>
<李>运行环境大家选择Python 3.7。李>
<李>填写好相关的Python代码,并配置好代码环境变量;李>
<李>为函数指定我们前面创建的角色。李>
2.6,创建λ的GetPosts
-
<李>函数名大家自己随意写,我这里写wz_GetPosts;李>
<李>运行环境大家选择Python 3.7。李>
<李>填写好相关的Python代码,并配置好代码环境变量;李>
<李>为函数指定我们前面创建的角色。李>
2.7,创建λ
转换-
<李>函数名大家自己随意写,我这里写wz_ConvertToAudio;李>
<李>运行环境大家选择Python 3.7。李>
<李>填写好相关的Python代码,并配置好代码环境变量;李>
<李>为函数指定我们前面创建的角色,李>
<李>这个函数耗时比较长,可以把函数执行时间调整为一分钟,李>
<李>添加我们创建的SNS为触发器。李>