我有一个带有3个CodePipelines的AWS环境。我们称它们为- P1 P2 P3。我想在"具体"中运行它们;序列。该序列将由Lambda函数确定。
这个Lambda函数做一些计算,并确定管道需要运行的顺序。所以它可以是-
P1 > P2 > P3
P3 > P2 > P1
P2 > P3 > P1
在运行下一个代码管道之前,每个代码管道必须成功完成。我怎样才能做到这一点呢?
起初我试图使用相同的Lambda函数,但它有15分钟超时。我们不知道每条管道需要多长时间。他们甚至可以~ 30分钟。
此外,由于序列是动态的,我不能只让一个管道将文件导出到S3,并将其用作另一个管道的源之一!
任何建议吗?
CP使用EventBridge发送事件。因此,您必须使用
。基本上,您将设置事件规则这将触发后续管道的执行,基于前一个管道的成功完成。一般来说EventBridge可以做到这一点(正如@Marcin所提到的),但是,它不适用于我的特定场景。
我通过引入"步骤函数"解决了这个问题。
Lambda函数传递一些参数给阶跃函数。基于此,采用不同的路径(不同的管道执行顺序)
还有"wait"机制,以及GetPipelineExecution来检查状态。它们一起确保在触发下一个管道之前,一个管道需要成功结束。
希望这对将来的人有帮助:)