【问题标题】:How to gracefully cancel a cdk deploy?如何优雅地取消 cdk 部署?
【发布时间】:2022-02-02 19:22:33
【问题描述】:

问题

就我而言,我想构建一个具有以下要求的 CI/CD 管道(使用 github 操作):

  • 每个 git push 都会触发一个工作流(= 管道)
  • 每个工作流都会为当前分支创建/更新多个堆栈(因此每个分支都有自己的部署和自己的独立堆栈)
  • 如果分支的堆栈已部署,堆栈将得到更新
  • cdk deploy 命令用于创建/更新堆栈

只要您不在较短的时间内多次推送新更改,这一切都可以正常工作。如果您第一次推送,它将按预期触发cdk deploy。
但是,如果您在不久之后再次推送,它将触发 cdk deploy 失败,因为之前的 cdk deploy 已经将堆栈置于 CREATE_IN_PROGRESS 或 UPDATE_IN_PROGRESS 状态。这是不幸的,因为只有最新的推送和最新的cdk deploy 是相关的。

问题

如何优雅地取消cdk deploy,使其开始回滚部署并且后续cdk deploy 能够成功?

我试过了

对我来说理想的解决方案是用Ctrl+C 中断cdk deploy 命令会取消部署。但这种情况并非如此。它将继续部署。还有其他不太复杂的解决方案吗?

【问题讨论】:

  • CDK 最终是后端的 AWS cloudformation。所以,如果你能在随后的部署中以某种方式挂钩它,它就可以工作。 docs.aws.amazon.com/cli/latest/reference/cloudformation/…
  • 我看到这是一个尚未实现的功能:github.com/aws/aws-cdk/issues/3781
  • @DevangSanghani 我实际上找到了该命令,但它说:You can cancel only stacks that are in the UPDATE_IN_PROGRESS state. 据我了解,这意味着您在第一次创建堆栈时无法使用此命令..跨度>
  • @DevangSanghani 关于 github 问题:我已经看到并给了它一个凹凸:D 我可能会再添加一条评论

标签: amazon-web-services amazon-cloudformation github-actions aws-cdk


【解决方案1】:

这个问题是高度自以为是的,您的问题的解决方案可能根本不是使用 CDK。您不能 100% 确定即使在强制取消 cdk deploy 命令后,它也会完美回滚。如果堆栈第一次部署并创建 s3 存储桶怎么办。在这种情况下,即使您取消部署。 S3 存储桶不会被删除。

解决问题的直接方法是在 CI 服务器中实现顺序管道。因此,如果 1 个管道正在为给定的队列或 repo 工作,那么其他管道应该在队列中等待。通过这样做,您的基础设施更改将逐步部署。这是一个更清洁、更可靠的解决方案,可以实现您想要做的事情。

这个 ^ 解决方案并不像任何其他解决方案那样完美!与取消部署 -> 删除堆栈 -> 重新部署相比,顺序管道将花费更多时间,因此可能会在整个解决方案中造成很多缓慢。

【讨论】:

  • 嗯。 :D 我明白你的意思,但我们从旧管道迁移到 github 操作以提高管道性能。以这种方式,至少对我的情况似乎适得其反。我也不在乎,例如S3 存储桶未正确删除。我的主要目标是后续管道运行不会相互阻塞,但仍保持良好的速度。无论如何,清理都需要以不同的方式处理。总而言之,这似乎没有好的解决方案,这对于 AWS 这样一个巨大的平台来说是相当可悲的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
相关资源
最近更新 更多