【问题标题】:CodePipeline how to deploy multiple CFN stacksCodePipeline 如何部署多个 CFN 堆栈
【发布时间】:2022-02-07 09:56:57
【问题描述】:

tldr;我可以将单个 CFN 堆栈部署为管道的一部分,但如何部署多个动态堆栈?

一个更好的 tldr;你会怎么做? forEach BuildStage.artifact 调用 CloudFormation.build

我以非常传统的方式使用 CodePipeline。目标是对我的 CloudFormation 模板进行源代码控制,在模板更改时通过管道推送它们,然后自动部署堆栈。

Source Stage(CodeCommit 提交我的 CFN yaml 模板)

构建阶段(CodeBuild 从提交中找到新文件,并将它们推送到 S3)

部署阶段(CloudFormation 将我的模板部署为 CFN 堆栈)

几乎一切都很好。我将模板更改提交到 CodeCommit,构建阶段运行我的 codeBuild 网守,它收集已更改的文件,并将它们上传到 S3。到目前为止一切顺利。

挑战在于,有时我会更改一个模板,有时我会更改多个 (n)。在我的构建阶段,我可以检测到更改的文件并将它们升级到 S3 没有问题。如果我对一个模板进行更改,一切正常。我可以使用 S3 上的模板位置创建一个导出变量,将其传递到我的部署阶段,并让 CloudFormation 部署操作使用该文件作为模板源。但是如果我有 2 个模板,我将如何处理呢?

  • 我不能只是在构建阶段创建无穷无尽的导出变量。
  • 如果可以的话,AFAIK 无法迭代部署阶段的每个条目。

我的想法是我需要执行以下操作之一:

  1. 在我当前的构建规范中(在我将文件上传到 S3 之后),使用 AWS CLI 调用 CFN 堆栈构建。我可以将其添加为循环的一部分,因此它会迭代每个要上传的文件。或
  2. 在我的构建阶段之后,使用 Lambda 执行与 #1 相同的操作。循环遍历每个文件,然后使用 CLI 或 SDK 调用 CFN 堆栈构建。

这两个选项似乎完全违背了部署阶段的目的,这对我来说似乎很笨重。

我还缺少其他选项吗?你会怎么做?

【问题讨论】:

  • 不会为第二个模板工作添加另一个部署阶段吗?
  • @jingx - 如果我提前知道第二个模板,也许这会起作用。但是如果只提交一个模板呢?如果提交了 10 个模板怎么办?我几乎需要一种能够动态扩展部署阶段的方法。虽然我觉得这可能是错误的方法,或者我遗漏了一些东西,但实际上真的很容易:-D
  • 你是说模板的数量可以随着构建而改变?或者只是 changed 模板的数量可以改变?如果是后者,您不必担心排除未更改的模板,CFN 会自行检测更改。
  • 老实说,两者都是。现在,我的 repo 中可能总共有 10 个模板,也许它们一次都更改一个。但是有可能 1) 更多模板被添加到 repo,2) 每次提交更改多个模板。
  • 您需要使用 CDK 或 Bisque 为您的管道生成模板。循环或 foreach 没有开箱即用的解决方案。

标签: amazon-web-services amazon-cloudformation aws-codepipeline aws-codebuild


【解决方案1】:

只想回答我自己的问题,以防其他人试图弄清楚如何做到这一点。

我最终选择了选项 1...直接从 CodeBuild 中进行 cli CFN 部署。我真的很想硬塞使用 CodePipeline 部署阶段的想法,但这很好用。

如果其他人最终提出更好的解决方案,我会全力以赴。

【讨论】:

  • 正如我们所说的那样,我确实在这样做。代码管道对我来说感觉很僵硬。就像它适用于某些特定情况一样,但我对部署需要做的一些事情并没有超级兴奋。我真的不想为了部署而设置带有 NAT 网关的 VPC。我很便宜。
  • 我不必做任何这些,尽管我的用例可能与您正在做的不同。我试图只推送一些 CFN 模板,并让它们在通过管道时自动部署。我创建了一个 CodeCommit 存储库,我将所有内容推送到该存储库。然后是一个 CodeBuild 项目,我实际上只是用来运行 shell 命令以仅检测更改的文件、将它们复制到 S3、运行 CFN 部署等。这不是 CodeBuild 的理想用途,但它正在工作。
猜你喜欢
  • 2019-04-20
  • 2023-03-11
  • 2019-02-07
  • 2018-08-24
  • 2011-06-03
  • 2018-07-31
  • 2021-02-19
  • 1970-01-01
  • 2021-11-24
相关资源
最近更新 更多