1

我正在 AWS 中构建一个分布式应用程序,包括基本资源(iam 等)、数据仓库,但主要是无服务器资源,如 lambdas、sns、mongodb、..

为了通过 OTAP 部署它,我正在研究 AWS 工具,主要在此处概述。

这意味着 CodeCommit 中的 1 个 repo 将触发 CodePipeline,它将在正确的位置包含这些组件(实现订单控制):

  • 部署 CF 堆栈
  • 使用 CodeBuild 打包(AWS sam 包)一个 SAM 资源-> 为每个 SAM 资源一个
  • 使用构建步骤创建变更集 -> 每个 SAM 资源一个
  • 使用构建步骤执行变更集 -> 每个变更集一个

因此,作为一个例子,我需要一个 buildspec.yml 用于该 .js 文件旁边的每个 lambda,并且 lambda 还需要在 SAM 模板中构建(它自己的或分组的)。还有一个 build-change-set 步骤和 execute-change-set 步骤。

我的问题: 如果在此设置中,对于整个分布式应用程序的 1 个 repo,我更改了 1 个微小的愚蠢的东西,例如许多 lambdas 中的 1 个超时,那么这个重建是否会重新部署应用程序的所有元素?

如果没有,谢天谢地,但它是如何工作的?CodeCommit 将所有源的整个 zip 发送到 S3,而不是仅更改。因此,所有元素都将被触发,并且在堆栈(CF 或 SAM)的部署过程中,底层技术可能是智能的,并且只执行需要更改的操作。但是,仍然会触发 CodePipeline 中的所有元素(并且有很多元素),这在目标是尽快完成整个部署的情况下效率低下。

如果是,那会很糟糕,然后我会在管道中找到另一个使用自定义代码(lambdas)的解决方案,仅从 CodeCommit API 中提取更改并执行 cretae-change-set 并执行。使用具有主要缺点的 aws sdk 会导致订单控制以及一些诸如“aws sam 包”之类的东西在 sdk 中不可用。

4

1 回答 1

1

@TimR如果您有10个资源,您不想在不需要时在P中重建/重新部署它们。这是非常糟糕的。每个资源都需要最长的正常运行时间。

为了回答我自己的问题,当使用 codePipeline 或其他任何东西来部署更改时,它将检查整个模板是否有什么不同,并根据资源类型和更改的内容重新部署该资源。仅检查未更改的资源,但大部分未更改。因此,唯一的好处是整个 CodePipeline 中的所有操作都将被触发,除了 CP 是异步架构之外,还会花费大量时间,因此退出速度也很慢。一个中型的需要大约 10 分钟的小变化。现在假设您每 30 分钟有 10-20 个开发人员提交..

然而,SAM/Lambdas 在 AWS 中有一个错误。当使用 Lambda 代码的 MD5 计算时,它会检查是否更新/重新部署 lambda。该算法考虑了文件属性,如上次更改等,从而得出所有 lambda 都已更改的结论,这是愚蠢的。

于 2018-06-03T09:17:26.557 回答