【发布时间】: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