我正在AWS中构建一个分布式应用程序,包括基础资源(iam等),数据仓库,但主要是无服务器资源,如lambdas,sns,mongodb,..
为了通过OTAP进行部署,我正在研究AWS工具,主要是概述here。
这意味着CodeCommit中的1个repo将触发CodePipeline,它将这些组件放在正确的位置(实现顺序控制):
作为一个例子,我需要为该lambda的.js文件旁边的每个lambda使用一个buildspec.yml,并且还需要在SAM模板(它自己的或一个分组的模板)中构建lambda。还有每个构建更改集步骤和执行更改集步骤。
我的问题: 如果在这个设置中,对于整个分布式应用程序的1个repo,我改变了一个微小的愚蠢的事情,比如许多lambdas中的1个的超时,这个重建会重新部署应用程序的所有元素吗?
如果没有,感谢上帝,但它是如何运作的? CodeCommit将所有源的完整zip发送到S3,而不仅仅是更改。因此,所有元素都将被触发,并且在堆栈(CF或SAM)的部署期间,底层技术可能是智能的,只能执行需要更改的内容。但是,CodePipeline中的所有元素(以及许多元素)都会被触发,这些元素的目标是尽快完成整个部署。
如果是,那就太糟糕了,然后我会在管道中找到另一个自定义代码(lambdas)的解决方案,只从CodeCommit API中提取更改并执行cretae-change-set和execute。使用带有主要缺点的aws sdk进行订单控制和诸如" aws sam package"在sdk中不可用。
答案 0 :(得分:0)
@TimR如果您有10个资源,如果不需要,您不想在P中重建/重新部署它们。那非常糟糕。每个资源都需要最长的正常运行时间。
要回答我自己的问题,当使用codePipeline或其他任何部署更改时,它将检查整个模板的不同之处,具体取决于资源类型和更改的内容重新部署该资源。仅更改未更改的资源,但大多数未触及。所以这是唯一的好处就是整个CodePipeline中的所有动作都会被触发,除了CP是Async arch之外需要花费很多时间,因此也会放慢速度。中等大小需要大约10分钟才能进行一些小改动。现在说你每30分钟有10-20个开发时间......
但是,SAM / Lambdas在AWS中有一个错误。使用Lambda代码的MD5计算时,它会检查是否更新/重新部署lambda。该算法考虑了上次更改等文件属性,从而得出所有lambdas已经改变的结论,这是愚蠢的。