使用Terraform创建CloudFormation Stack是否有意义

72次阅读
没有评论

问题描述

在与供应商应用程序集成时,希望将AWS账户与供应商应用程序集成。供应商提供了一个CloudFormation模板,用于创建一个CF堆栈,该堆栈将为集成创建所需的IAM角色、S3存储桶、SNS主题等。用户已经查看了CF模板,并将CF模板中的步骤拆分,并编写了需要在AWS中创建的资源(根据用户环境进行了修改)。用户将拆分的步骤和CF模板一起交给了DevOps团队,希望他们使用Terraform将CF模板转换为Terraform代码,并通过Terraform创建IAM角色等。但是用户发现他们正在尝试编写Terraform代码来创建CloudFormation堆栈。用户的组织中没有其他人会登录AWS账户的控制台并创建资源,只有DevOps团队会这样做,并且他们会通过Terraform完成所有操作。

用户想知道是否有意义使用Terraform来创建CF堆栈,因为他们可以使用Terraform本身来创建IAM角色、S3存储桶等。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

最初,我认为使用Terraform来创建运行CloudFormation脚本所需的基础设施是没有意义的。如果您已经熟悉Terraform并且在其他基础设施中使用它,那么引入另一种方法是没有意义的。

使用Terraform创建CloudFormation堆栈并运行供应商提供的脚本的唯一原因是为了消除在转换为Terraform过程中引入错误的可能性。如果供应商的CloudFormation脚本很复杂,这可能是一个问题,但如果只是创建IAM角色和一些策略,那可能不是太大的问题。

方案2

根据Occam’s razor原则,”不必要地增加实体是不合理的”。因此,为一个任务引入两个实体是过于冗余的。

方案3

如果供应商经常更改CloudFormation模板,或者Terraform资源不需要与CloudFormation资源交互,那么使用Terraform部署CloudFormation堆栈是可以的。

如果这两个条件都不成立,您可能需要将资源迁移到Terraform。如果其中一个条件不成立,而另一个条件成立,您应该考虑权衡利弊。

以上是关于使用Terraform创建CloudFormation Stack是否有意义的解决方案。根据您的具体情况和需求,选择适合您的方法。

注意:在进行任何更改之前,请确保备份您的数据和配置文件。

正文完