将AWS CloudFormation转换为Terraform模板

时间:2018-06-17 18:27:27

标签: amazon-web-services amazon-cloudformation terraform

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

有人可以建议一些工具,方法等吗?

4 个答案:

答案 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_subnetcount = 4进行操作。您使用的任何转换器都应该足够聪明来处理它。但是也应该足够聪明,知道“ PrivateSubnet0”将是一个完全不同的aws_subnet和它自己的count。任何软件都很难做到。

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

答案 3 :(得分:1)

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

但是,请检查以下替代方法:

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

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