我想自动将现有的AWS CloudFormation模板(yaml)转换为Terraform模板(hcl)。
有人可以建议一些工具,方法等吗?
答案 0 :(得分:7)
从概念的角度来看,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)。
答案 1 :(得分:6)
到目前为止,我还没有看到一种将YAML或JSON编写的CFN转换为Terraform代码的简单方法。
但是,您可以尝试通过CFN部署资源,然后对部署CFN的帐户使用terraforming。您可以用terraform代码吸收大部分资源,但不是全部。该代码将需要一些重构,剩余的资源(lambda等)需要用TF重写或从CFN“转换”为terraform。
其他选择是使用terraform aws_cloudformation_stack为您部署CFN堆栈并从那里进行管理。
答案 2 :(得分:1)
没有任何工具可以将Cloudformation转换为Terraform,除非您正在谈论仅通过aws_cloudformation_stack
管理Cloudformation模板。
您可能甚至不想使用这样的工具。想象一下一个Cloudformation模板,它创建了四个子网,可能使用带有四个单独资源(“ PublicSubnet0”,“ PublicSubnet1”等)的复制/粘贴JSON或YAML进行写出。您可能会在Terraform中使用aws_subnet
和count = 4
进行操作。您使用的任何转换器都应该足够聪明来处理它。但是也应该足够聪明,知道“ PrivateSubnet0”将是一个完全不同的aws_subnet
和它自己的count
。任何软件都很难做到。
因此,如果您关心Terraform脚本中的代码质量,请手动进行操作。
答案 3 :(得分:1)
我对在Terraform <-> Cloudformation 模板之间进行转换的工具不熟悉。
但是,请检查以下替代方法:
使用Terraform的数据源:aws_cloudformation_export,它允许使用可选的Export属性访问Cloudformation模板的Output部分中指定的堆栈导出。
使用cf-to-tf之类的CLI工具为现有CloudFormation资源生成Terraform配置和状态。