当我在Codepipeline中运行Lambda函数时,它会正常结束并按照我在日志中看到的所要执行的操作,但它在管道中永远不会成功。当我的Lambda函数实际上在日志中执行工作时,它只会显示 In Progress 。
我想念什么?也许我需要将here所示的'putJobSuccessResult'发送到CodePipeline?但是如果是这样,那为什么不是自定义操作呢?
什么是自定义操作?它们和非自定义操作有什么区别?
答案 0 :(得分:2)
也许我需要将此处所示的'putJobSuccessResult'发送给CodePipeline?
是的,您需要从Lambda函数中调用putJobSuccessResult。
但是如果是这样,那为什么不是自定义操作呢?
这将告诉CodePipeline您的Lambda函数已完成,以及下一步该做什么。
CodePipeline具有一项功能,如果您传递“延续令牌”,则CodePipeline将重新调用您的函数,并将延续令牌中的状态传递给下一次调用。这样,您可以使操作的运行时间超过Lambda调用超时的时间。您可以在调用putJobSuccessResult时传递此信息。
此外,它将“操作失败”与“功能失败”分开。这使您可以在不使lambda函数失败的情况下使操作失败。这是可取的,因为如果函数失败,Lambda将具有retry behavior。
什么是自定义操作?
使用自定义操作,您需要自己的代码来调用PollForJobs,该代码通常在例如上运行。长时间运行的EC2实例。 Lambda调用操作将调用Lambda函数,而无需运行自己的实例/主机。