Aws lambda 连接的lambda函数在回复Lex之前是否可以降速?

Aws lambda 连接的lambda函数在回复Lex之前是否可以降速?,aws-lambda,aws-lex,Aws Lambda,Aws Lex,tldr:一个连接的Lambda代码钩子是否可能在回复Lex之前先降速然后再升速(可能多次) 首先是一些细节:我在Java8中有一个Lambda函数,它连接到我的Lex chatbot上的一个意图。这是一个“初始化和验证代码挂钩”Lambda,意味着每当我的意图被激活时,Lex都会使用此处指定的输入事件格式使用用户的输入查询我的Lambda:。现在,我处理输入事件和响应的方式是通过一个名为“handleRequest()”的函数,该函数将InputStream、OutputStream和Cont

tldr:一个连接的Lambda代码钩子是否可能在回复Lex之前先降速然后再升速(可能多次)

首先是一些细节:我在Java8中有一个Lambda函数,它连接到我的Lex chatbot上的一个意图。这是一个“初始化和验证代码挂钩”Lambda,意味着每当我的意图被激活时,Lex都会使用此处指定的输入事件格式使用用户的输入查询我的Lambda:。现在,我处理输入事件和响应的方式是通过一个名为“handleRequest()”的函数,该函数将InputStreamOutputStreamContext作为参数。在读取InputStream并激活相应的逻辑之后,我写入作为HandlerRequest输入提供的OutputStream对象(使用上面链接中的响应格式),Lex很高兴。 这就是现在的工作方式,它满足了我的需要

然而,现在我有一个新问题。我的Lambda逻辑的一部分现在依赖于向第三方web API发出请求。在提出这个请求之后,我的Lambda将停止运行(它停止计算)。最终,这个第三方API将调用我的Lambda,其中包含实现我的意图所需的信息,但到目前为止,由于我已经关闭了Lambda,我已经丢失了用于将对Lex的响应写入其中的OutputStream对象

我的问题是是否还有其他方法。有没有其他方法可以使用Java8回复Lex?也许在莱克斯打电话给莱克斯,莱克斯准备好了之后,我会直接从莱克斯那里回复莱克斯。有没有其他人曾经这样做过,或者有过在回复Lex之前需要减速的Lambda的经验


请分享您的见解。

您描述的旧流程是同步的,但现在您正在将其迁移为异步的,这意味着您需要更改您的设计:由于同一个lambda无法同时执行查询(向第三方)和回复Lex,因此您必须创建新的“玩家”:

  • 一旦lambda调用了第三方,它应该将其数据(上下文)持久化到持久化存储(DB)中并退出
  • 从第三方接收回调必须由另一个lambda完成,该lambda将查看数据库中的相关上下文,并将其与从第三方获得的数据相结合,在合成结果后,它必须调用Lex(这不再是响应!)来更新它
  • 我不熟悉莱克斯,所以我不能告诉你它是否支持

    另一个选项是,查看是否可以轮询结果,而不是从第三方获得回调。如果有这样一个选项,lambda可以在休眠几秒钟的循环中运行,然后轮询第三方以获得结果,直到它这样做

    需要注意的重要一点是,AWS中的lambda执行时间有限(最多15分钟),因此,如果第三方需要更长的时间来解决您的查询,此解决方案将不起作用