繁体   English   中英

将 AWS CloudFormation 转换为 Terraform 模板

[英]Convert AWS CloudFormation to Terraform template

我想将现有的 AWS CloudFormation 模板 (yaml) 自动转换为 Terraform 模板 (hcl)。

任何人都可以建议一些工具,方法等吗?

从概念的角度来看,CFT 和 TF 并不是等价的。 您将无法表达 CFT 能够在 TF 中部署的所有内容。

从实践的角度来看,这是可能的,但您需要编写一个语法转换器; 如果您的 CFT 使用内在函数https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html ,这将变得非常复杂(几乎不可能)

在我看来,您应该使用 terraform aws_cloudformation_stack 来部署现有的 CFT,而不是尝试对其进行转换 ( https://www.terraform.io/docs/providers/aws/r/cloudformation_stack.html )。

到目前为止,我还没有看到将用 YAML 或 JSON 编写的 CFN 转换为 terraform 代码的简单方法。

但是,您可以尝试通过 CFN 部署资源,然后对您部署 CFN 的帐户使用terraforming 您可以提取 terraform 代码中的大部分资源,但不是全部。 代码需要一些重构,剩余的资源(lambdas 等)需要用 TF 重写或从 CFN“翻译”到 terraform。

其他选项是使用 terraform aws_cloudformation_stack为您部署 CFN 堆栈并从那里管理它。

我不熟悉用于在 Terraform <--> Cloudformation模板之间进行转换的工具。

但是,请查看以下替代方案:

  1. 使用 Terraform 的数据源: aws_cloudformation_export ,它允许使用可选的导出属性访问 Cloudformation 模板的输出部分中指定的堆栈导出。

  2. 使用cf-to-tf等 CLI 工具为现有 CloudFormation 资源生成 Terraform 配置和状态。

没有任何工具可以将 Cloudformation 转换为 Terraform,除非您只是在谈论通过aws_cloudformation_stack管理 Cloudformation 模板。

并且您可能无论如何都不想使用这样的工具。 想象一个创建四个子网的 Cloudformation 模板,可能使用复制/粘贴 JSON 或 YAML 和四个单独的资源(“PublicSubnet0”、“PublicSubnet1”等)写出。 在 Terraform 中,您可能会使用aws_subnetcount = 4 您使用的任何转换器都应该足够聪明来处理这个问题。 但它也应该足够聪明,知道“PrivateSubnet0”将是一个完全不同的aws_subnet ,它有自己的count 这是任何软件都很难做到的。

因此,如果您关心 Terraform 脚本中的代码质量,请手动进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM