将 Amazon Lambda 与 Amazon Lex 结合使用 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Amazon Lambda 与 Amazon Lex 结合使用

您可以使用 Amazon Lex 将会话自动程序集成到您的应用程序中。Amazon Lex 自动程序为您的用户提供一个对话界面。Amazon Lex 为 Lambda 提供了预构建集成,使您能够将 Lambda 函数 和 Amazon Lex 自动程序一起使用。

配置 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 event and response format(Lambda 事件和响应格式)。Amazon Lex 消息事件中的invocationSource参数指示 Lambda 函数应该验证输入 (DialogCodeHook) 还是实现意图 (FulfillmentCodeHook)。

有关演示如何将 Lambda 与 Amazon Lex 结合使用的示例教程,请参阅开发人员指南中的练习 1:使用蓝图创建 Amazon Lex 自动程序

角色和权限

您需要将服务相关角色配置为函数的执行角色。Amazon Lex 定义具有预定义权限的服务相关角色。当您使用控制台创建 Amazon Lex 自动程序时,会自动创建服务相关角色。要使用 Amazon 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 函数使用其他 Amazon 服务,则需要向服务相关角色添加相应的权限。

您可以使用基于资源的权限策略来允许 Amazon Lex 自动程序调用您的 Lambda 函数。如果您使用 Amazon Lex 控制台,将自动创建权限策略。从 Amazon CLI 中,使用 Lambda add-permission 命令设置权限。

对于 Amazon Lex V2,运行以下命令。在来源 ARN 中,将 us-east-1 替换为您的 Amazon Lex 自动程序所在的 Amazon Web Services 区域,然后使用您自己的 Amazon Web Services 账户 编号和自动程序别名。

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 意图所在的 Amazon Web Services 区域,然后使用您自己的 Amazon Web Services 账户 编号和意图名称。

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。