Amazon web services 将AWS CloudFormation转换为地形模板

Amazon web services 将AWS CloudFormation转换为地形模板,amazon-web-services,amazon-cloudformation,terraform,Amazon Web Services,Amazon Cloudformation,Terraform,我想将现有的AWS云信息模板(yaml)自动转换为地形模板(hcl) 有人能推荐一些工具、方法等吗?从概念上看,CFT和TF并不是功能对等的。您将无法表达CFT能够在TF中部署的所有内容 从实用的角度来看,这是可能的,但你需要编写一个语法转换器;如果您的CFT使用的是内在函数,那么这将变得非常复杂(几乎不可能) 在我看来,您应该使用terraform aws_cloudformation_stack来部署现有的CFT,而不是尝试将其转换()。没有任何工具可以将cloudformation转换为t

我想将现有的AWS云信息模板(yaml)自动转换为地形模板(hcl)


有人能推荐一些工具、方法等吗?

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

从实用的角度来看,这是可能的,但你需要编写一个语法转换器;如果您的CFT使用的是内在函数,那么这将变得非常复杂(几乎不可能)


在我看来,您应该使用terraform aws_cloudformation_stack来部署现有的CFT,而不是尝试将其转换()。

没有任何工具可以将cloudformation转换为terraform,除非您讨论的是通过
aws_cloudformation_stack
简单地管理cloudformation模板

而且你可能根本不想使用这样的工具。设想一个Cloudformation模板创建了四个子网,可能使用复制/粘贴的JSON或YAML以及四个单独的资源(“PublicSubnet0”、“PublicSubnet1”等等)写出。在Terraform中,您可能会使用
aws\u子网
count=4
。您使用的任何转换器都应该足够智能来处理该问题。但它也应该足够聪明,知道“PrivateSubnet0”将是一个完全不同的
aws_子网
,有自己的
计数
。这对于任何软件来说都很难做到


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

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

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


另一种选择是使用terraform为您部署CFN堆栈,并从中进行管理。

我不熟悉在terraform Cloudformation模板之间转换的工具

但是,请查看以下备选方案:

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

  • 使用CLI工具(如)为现有云信息资源生成地形配置和状态


  • 感谢您的详细说明!要是有就好了。现在,2021年有了AWS CDK,它是一个定义真正使用代码的基础设施的层,例如:l Python、Java、Go。Terraform为CDK发布了一个Alpha模块。因此,您可以用Java编写/定义基础结构对象,选择部署到AWS,并选择使用terraform配置。CDK根据需要创建地形或云形成配置文件。