Terraform 是不是支持带有少量操作的 CloudFormation 模板

Posted

技术标签:

【中文标题】Terraform 是不是支持带有少量操作的 CloudFormation 模板【英文标题】:Does Terraform support CloudFormation Templates with minor manipulationsTerraform 是否支持带有少量操作的 CloudFormation 模板 【发布时间】:2022-01-07 08:08:39 【问题描述】:

假设:Terraform 安装在 MS Visual Studio Code 上。

由于 CloudFormation 支持 JSON 模板,而 Terraform 支持 JSON,这似乎是肯定的。但是,当我将 CloudFormation 模板加载到 MS VisualStudio Code 中并将名称从 test.json 更改为 test.tf 时,VS Code 无法识别格式,正如其名称所暗示的那样。

还尝试只运行 test.json 和 test.tf 文件,代码说它不知道如何调试 json。 Code 在市场上也找不到 json 调试器(这似乎有点难以想象)

其他人有这方面的经验吗?

【问题讨论】:

【参考方案1】:

由于 CloudFormation 支持 JSON 模板,而 Terraform 支持 JSON,这似乎是肯定的。

这远非事实。

虽然 Terraform 和 CloudFormation 都支持 JSON 文件,但这并不意味着它们都可以理解这些 JSON 文件的语法。它们是由不同维护者开发的完全不同的产品。他们有不同的方式来定义和管理您想要提供的资源。

Terraform 的 AWS 提供商支持创建 CloudFormation 堆栈,更多信息请参见 documentation。如果你真的想要,你也许可以从 CFN 文件中配置资源,但当然这不是通过将 test.json 重命名为 test.tf 来实现的。

【讨论】:

这就是为什么我在问题的主题行中加上“带有少量操作”的原因。显然必须进行更改。我们可以讨论次要的含义,但是在生产中我使用了两种语言我不确定是否像您建议的那样修改它们以使其正常工作,但我完全同意它们需要修改。【参考方案2】:

你好像误会了一些事情:

CloudFormation JSON 或 YML 文件和 Terraform TF(或 JSON)均采用声明性语言。这对于 JSON 和 YML 一般都是如此。您无法调试或运行这些文件,因为它们仅描述基础架构(或一般的对象)并且不实现任何逻辑。 对于 Terraform,您需要安装 HashiCorp.terraform 扩展。这将为您提供语法高亮显示。 对于 Cloudformation,我推荐 cf-lint 扩展。

在 CloudFormation 和 Terraform 中,您都可以编辑文件(JSON、YML、TF)并使用 CLI 来部署您的代码。 Terraform 在比 CloudFormation 更高的层次上工作。 CloudFormation 只能用于部署堆栈,即一组资源。如果您还需要部署应用程序代码,则必须事先在 S3 存储桶中完成该操作并从那里引用它。同样在许多情况下,您需要创建一个堆栈然后更新它。或者您需要将两个或多个堆栈组合到一个堆栈集中。

Terraform 为您管理所有这些复杂性,并在 CloudFormation 之上提供了许多功能。如前所述,JSON 文件格式不一样,不能互换使用。不过,您可以 provision a CloudFormation 与 Terraform 堆叠。

【讨论】:

以上是关于Terraform 是不是支持带有少量操作的 CloudFormation 模板的主要内容,如果未能解决你的问题,请参考以下文章

在 terraform 文件而不是 env 变量中为 Terraform 提供凭据

Terraform 嵌套动态块:不支持的块类型

使用 Helm 而不是 Terraform 的困惑

如何检查 Terraform 是不是会创建资源

带有特殊字符的 terraform 标签值

使用带有 NMake 样式 Makefile 的 clang-cl 无法回显