搭配使用 AWS Lambda 與 Amazon Lex - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

搭配使用 AWS Lambda 與 Amazon Lex

您可以使用 Amazon Lex 將對話機器人整合至您的應用程式中。Amazon Lex 機器人提供與使用者的對話界面。Amazon Lex 提供與 Lambda 的預先建置整合,使您能夠搭配使用 Amazon Lex 機器人與 Lambda 函數。

設定 Amazon Lex 機器人時,您可以指定 Lambda 函數執行驗證、履行或兩者。對於驗證,Amazon Lex 會在使用者每次回應後叫用 Lambda 函數。該 Lambda 函數可驗證回應,並在必要時向使用者提供修正意見回饋。為了實現意圖,Amazon Lex 會在機器人成功收集所有必要資訊及收到使用者確認後,叫用 Lambda 函數以履行使用者請求。

您可以管理 Lambda 函數的並行,以控制您服務之同時機器人對談的最大數量。如果函數處於最大並行狀態,Amazon Lex API 會傳回 HTTP 429 狀態碼 (太多請求)。

如果 Lambda 函數擲回例外狀況,API 會傳回 HTTP 424 狀態碼 (相依性失敗例外)。

Amazon Lex 機器人會同步叫用您的 Lambda 函數。事件參數包含機器人和對話方塊中每個插槽值的相關資訊。如需事件和回應欄位的定義,請參閱《Amazon Lex 開發人員指南》中的 Lambda 事件和回應格式。Amazon Lex 訊息事件中的invocationSource參數會指出 Lambda 函數是否應驗證輸入 (DialogCodeHook) 或履行意圖 (FulfillmentCodeHook)。

若要取得說明如何搭配使用 Lambda 與 Amazon Lex 的範例教學,請參閱 Amazon Lex 開發人員指南中的練習 1:使用藍圖建立 Amazon Lex 機器人

角色和許可

您需要將服務連結角色設定為函數的執行角色。Amazon Lex 會定義具有預先定義許可的服務連結角色。當您使用主控台建立 Amazon Lex 機器人時,會自動建立服務連結角色。若要使用 AWS CLI 建立服務連結角色,請使用 create-service-linked-role 命令。

aws iam create-service-linked-role --aws-service-name lex.amazonaws.com

這個命令會建立下列角色。

{ "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "lex.amazonaws.com" } } ] }, "RoleName": "AWSServiceRoleForLexBots", "Path": "/aws-service-role/lex.amazonaws.com/", "Arn": "arn:aws:iam::account-id:role/aws-service-role/lex.amazonaws.com/AWSServiceRoleForLexBots" }

如果您的 Lambda 函數使用其他 AWS 服務,您需要將對應的許可新增至服務連結角色。

您可以使用資源型許可政策來允許 Amazon Lex 機器人調用 Lambda 函數。如果您使用 Amazon Lex 主控台,則會自動建立許可政策。在 AWS CLI 中,使用 Lambda add-permission 命令來設定許可。

若使用 Amazon Lex V2,請執行下列命令。在來源 ARN 中,以 AWS 區域 取代 Amazon Lex 機器人所在的 us-east-1,並使用您自己的 AWS 帳戶編號和機器人別名。

aws lambda add-permission \ --function-name LexCodeHook \ --statement-id LexInvoke-MyBot \ --action lambda:InvokeFunction \ --principal lex.amazonaws.com \ --source-arn "arn:aws:lex:us-east-1:123456789012:bot-alias/MYBOT/MYBOTALIAS"

您也可以使用 Amazon Lex V1 調用 Lambda 函數。若使用 Amazon Lex V1,請執行下列命令。在來源 ARN 中,以 us-east-1 取代 Amazon Lex 意圖所在的 AWS 區域,並使用您自己的 AWS 帳戶編號和意圖名稱。

aws lambda add-permission \ --function-name LexCodeHook \ --statement-id LexInvoke-MyIntent \ --action lambda:InvokeFunction \ --principal lex.amazonaws.com \ --source-arn "arn:aws:lex:us-east-1:123456789012 ID:intent:MYINTENT:*"

請注意,我們已停止維護 Amazon Lex V1。建議您使用 Amazon Lex V2。