【问题标题】:Cloudformation/Serverless vs Terraform in AWSAWS 中的 Cloudformation/Serverless 与 Terraform
【发布时间】:2020-12-13 22:16:30
【问题描述】:

我想了解对 Terraform 等工具的需求。当我们确实有可用的 Cloudformation 模板并且可以使用该模板创建/更新所有 AWS 服务时,使用 Terraform 之类的服务有什么意义。 请提出建议。

【问题讨论】:

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


    【解决方案1】:

    CloudFormation (CFN) 和 Terraform (CF) 都是基础架构即代码 (IaC) 开发工具。

    但是,CFN 仅适用于 AWS。您不能将它与 Azure、GCP 或 AWS 生态系统之外的任何其他东西一起使用。相比之下,TF 与云无关。您不仅可以在多个云提供商之间使用它,还可以与非云产品一起使用,例如 docker、各种数据库,甚至可以根据需要使用多米诺比萨。

    所以 TF 的主要优势在于,一旦您只学习一次,您就可以将其应用到多个云提供商。 CFN 只在 AWS 中有用,一旦你停止使用 CFN,你必须学习一些新的东西才能与其他云一起工作。

    TF 和 CFN 的工作方式也有所不同。两者都有自己的长处和周末。例如:

    • 当您使用 CFN 进行部署时,可以在 AWS 的一个中心位置查看所有资源以及模板的源代码。而 TF 则没有这样的地方。如果你登录 AWS 控制台,你不知道 TF 创建了什么,使用的源代码是什么等。

    • TF 有循环和复杂的数据结构和条件,而 CFN 没有。

    • CFN 有创建策略和更新策略,TF 没有。

    • 您可以使用 CFN 策略和 IAM 策略控制对 CFN 的访问。您不能对 TF 做同样的事情,因为它“存在”在 AWS 之外。

    【讨论】:

      【解决方案2】:

      您可能会选择 Terraform 而不是 CloudFormation 的原因有几个:

      1. 供应商不可知论:将来您可能需要迁移您的云基础架构。这可能是由于几个原因(例如成本、法规遵从性等)。使用 Terraform,您仍然可以使用相同的工具来部署新的基础架构。通过巧妙地使用 Terraform 模块,您甚至可以将大部分基础设施保留为完整的代码存储库。
      2. 对其他工具的支持: 这也建立在前一点的基础上,但 Terraform 可以部署的不仅仅是 AWS 资源。例如,您可以使用 Terraform 编排 EC2 机器的部署,然后使用 Ansible 进行配置。或者,您可以使用 Terraform 在 Kubernetes 集群上部署应用程序。虽然 CloudFormation 通过创建自定义 Lambda 来支持自定义资源,但维护工作量很大。
      3. 更广泛的生态系统: 由于 Terraform 的开源特性,有一个庞大的工具生态系统可以帮助您解决各种问题,例如将基础设施作为代码进行测试或以持续的方式构建合规性.
      4. 可以说是一种更好的语言:我个人认为 Terraform 比 CloudFormation 更适合基础架构即代码。 Terraform 在语言 (HCL) 中内置了更大的灵活性,并且它们的模块系统允许比 CloudFormation 中实现的更多的可组合性。

      【讨论】:

        猜你喜欢
        • 2020-03-07
        • 2022-10-14
        • 2019-05-22
        • 2018-09-28
        • 2019-05-23
        • 1970-01-01
        • 2020-07-22
        • 2018-05-08
        • 2023-01-12
        相关资源
        最近更新 更多