如何在不删除现有堆栈的情况下从 cloudformation 迁移到 CDK?

Zha*_* Yi 6 amazon-web-services aws-cdk

我正在使用 cloudformation 模板构建应用程序,现在迁移到使用 CDK。但是当我运行 cdk deploy 命令时,即使我使用相同的堆栈名称,它总是抱怨资源已经存在。有没有一种方法可以在不拆除任何cloudformation堆栈的情况下运行CDK?

我知道有导入资源功能,但我的情况是资源将属于 CDK 管理的堆栈。如果我使用import,则意味着资源存在于堆栈之外。我怎样才能让它自动工作?逻辑应该是import the resource if it exists, otherwise create it

Mat*_*hew 9

不幸的是,会有一些手动步骤,但是通过一些工作,大多数步骤都可以编写脚本。以下是我过去完成 CF 到 CDK 堆栈迁移的大致方式:

  1. 对于您想要从旧 CF 堆栈中迁移出的所有资源,请将删除策略设置为保留。
  2. 使用这些更改进行 CloudFormation 堆栈更新 - 当您在下一步中删除堆栈时,这会将这些资源从您的堆栈中“分离”,以便将它们导入到您的 CDK 堆栈中。
  3. 删除 CloudFormation 堆栈。堆栈中的资源应该继续存在。
  4. 重新定义您准备在 CDK 堆栈中导入的资源。尝试尽可能地反映您现有的资源,这将帮助您在导入后整合任何偏差。
  5. 通过 ChangeSet 将这些分离的资源导入到您的 CDK 堆栈中。您可以直接通过 AWS 控制台或通过 CLI(例如aws cloudformation create-change-set --change-set-type IMPORT --resources-to-import ...)执行此操作
  6. 在 CDK CF 堆栈上运行漂移检测。修复任何漂移。理想情况下,如果您在 CDK 中正确建模了资源,则不会有任何差异,但由于 CDK 设置的默认值,可能会存在细微差异。