【问题标题】:Does AWS SAM CodePipelines do whole rebuild per commit?AWS SAM CodePipelines 是否每次提交都进行整个重建?
【发布时间】:2018-10-23 07:42:06
【问题描述】:

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

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

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

  • 部署 CF 堆栈
  • 使用 CodeBuild 为每个 SAM 资源打包(AWS 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)的 de 部署期间,底层技术可能是智能的,并且只执行需要更改的操作。但是,CodePipeline 中的所有元素(还有很多)都会被触发,这在目标是尽快完成整个部署的情况下效率很低。

如果是,那会很糟糕,然后我会在管道中找到另一个使用自定义代码 (lambdas) 的解决方案,仅从 CodeCommit API 中提取更改并执行 cretae-change-set 和执行。使用 aws sdk 的主要缺点是在订单控制方面存在问题,并且 sdk 中不提供诸如“aws sam 包”之类的内容。

【问题讨论】:

  • 我很好奇每次重新构建和重新部署的实际问题是什么?至少这样你就可以确信一切都在重新构建,并且所有功能都有一致的版本。除非进行部分部署可以节省数小时的部署时间,否则重新部署一切似乎会简单得多。

标签: amazon-web-services aws-lambda aws-codepipeline aws-codecommit aws-sam-cli


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 2015-08-07
    • 1970-01-01
    • 2015-10-23
    • 2012-12-02
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    相关资源
    最近更新 更多