gpt4 book ai didi

amazon-web-services - 通过 CDK CodePipelines 将基础设施更改部署到现有堆栈

转载 作者:行者123 更新时间:2023-12-05 05:43:57 25 4
gpt4 key购买 nike

如何在不重新创建旧堆栈/资源的情况下将具有 CDK 中定义的资源的现有堆栈迁移到代码管道?

我有一个通过 Github Actions 中的 cdk deploy 部署的堆栈。我正在尝试将管道的 CD 部分迁移到 CodePipeline。但是,如果我将现有的 cdk.Stack 定义放入 cdk.Stage,它将删除旧堆栈(这是我的假设)。你会怎么处理?我知道有一种方法可以从堆栈中公开资源,但这意味着我需要保持此堆栈正常运行,这没有任何意义。

最佳答案

您希望管道更新现有堆栈而不替换有状态资源1。为了让阶段部署按预期工作,(a) 您现有的堆栈必须为您要保留的资源提供显式(非默认)资源名称,(b) 新的阶段堆栈必须具有硬编码这些现有资源名称的结构(c) 新堆栈的构造必须避免对有状态资源的其他替换行为2

“a”点意味着如果您让 CDK(从技术上讲是 CloudFormation)在现有资源上设置默认资源名称,您就不走运了。从默认命名更改为显式名称会触发替换行为,即使新的显式名称与现有生成的名称匹配。阶段部署将失败。

如果你做到这一点,剩下的就是为阶段部署的堆栈提供与现有堆栈相同的名称。当管道执行时,CloudFormation 将执行堆栈更新。

不是必需的,但作为一项安全措施,您应该确保有状态资源具有 cdk.RemovalPolicy.RETAIN removalPolicy设置和备份。保留的资源将在替换或删除操作时孤立在堆栈之外,如果出现问题则不会被销毁。


(1) 替换意味着破坏和重建。您不必担心(空)队列和 lambda 等可以安全替换的无状态资源,而是担心数据库等任何有状态资源。

(2) 对堆栈资源的更改导致 update or replacement behaviour .大多数更改都是更新,最多会导致短暂的服务中断。每个资源的 CloudFormation 文档列出了每个属性的更新行为,但至少,对资源名称(例如 CDK DynamoDB 表的 tableName)的更改会导致替换。

关于amazon-web-services - 通过 CDK CodePipelines 将基础设施更改部署到现有堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71706564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com