从6.10更新自定义资源支持的 lambda 到8.10不再发送请求

By simon at 27 天前 • 0人收藏 • 20人看过

我们使用一个云形成模板向客户提供我们的软件的测试驱动器来启动 AWS AMI。 最近,我为这个模板添加了一个自定义资源,该资源生成一个试用许可证密钥,以便在测试驱动器期间使用,并保存其中一个云形成输出。 许可证是通过运行存储在 S3上的 lambda zip 文件生成的。 在 node4.10,然后是 node6.10中,这个步骤一直在工作,但是现在我已经移动到 node8.10,在 parseturl 收到响应之前等待来自 parseturl 的响应的步骤正在结束。 由于没有返回到云形成的响应,如果该资源等待60分钟,则创建将发出删除堆栈命令。

我认为问题在于 node.js 的异步本质,以及我对如何转换代码缺乏理解。

事件处理程序(event,context){
返回 genKey ("。 [咒语]。 "sh",[ arg1]). Then (function (resp){ responseStatus"SUCCESS"; responseData ["trialkey"] resp; console.log ('Here is the response',responseData) ; sendResponse (event,context,responseStatus,responseData) ; }) ;

这个片段是最初的 node6.10工作版本。 我已经改为:

事件处理器 async (event,context){

尝试{ var resp await helpers.genKey ("。 [咒语]。 Sh",[ arg1]) ; responseStatus"SUCCESS"; responseData ["trialkey"] resp; console.log ('Here is the response',responseData) ; try { const rest2 await sendResponse (event,context,responseStatus,responseData) return rest2; } catch (e){ console.log (e) ; } catch (e){ console.log (e) ; }

Sendresponse 代码保持不变,我使用了 AWS 站点的例子:

函数 sendResponse (event,context,responseStatus,responseData){ var responseBody JSON.stringify ({ StackId: event。 事件。 事件。 Logicalresourceid,PhysicalResourceId: context.logStreamName,Status: responseStatus,Reason:"See the details in CloudWatch Log"+ context.logStreamName,Data: responseData }) ; console.Log ("RESPONSE BODY:  n",responseBody) ; var https require ("https") ; var url require ("url") ; var parsedUrl url.parse (event). 句子太长,请短一点

在观云中,我看到反应的身体仍然很好。

句子太长,请短一点

然后我看到了发送回复。 但接下来的一句话是:End requested: ba8542ed-66cf-4ada-9ae6-fd4f1920faee

在以前的版本中,这种方法运行良好。 我们看到的是响应主体,然后发送响应:2018-11-16T18:03:06.435 z dd879acf-e9c9-11e8-afaf-bfffb4a386b6 STATUS: 200

资源被创造出来。

1 个回复 | 最后更新于 27 天前
27 天前   #1

回答自己的问题。 安装了"cfn-response-promise"模块,作为我正在使用的 sendResponse 函数的异步 / 等待兼容替代模块。 Cf 堆栈完成,没有错误,并且在 lambda 运行之后收到 STATUS 为200。

登录后方可回帖

Loading...