利用 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

相關文章
相關標籤/搜索