Amazon web services AWS中的Cloudformation/Serverless与Terraform

Amazon web services AWS中的Cloudformation/Serverless与Terraform,amazon-web-services,terraform,amazon-cloudformation,Amazon Web Services,Terraform,Amazon Cloudformation,我想了解像Terraform这样的工具的需求。当我们有可用的Cloudformation模板并且可以使用它创建/更新所有AWS服务时,使用Terraform这样的服务有什么意义。 请提出建议。选择地形而不是云层的原因有两个: 供应商不可知:将来可能需要迁移云基础设施。这可能是由于几个原因(如成本、法规遵从性等)。使用Terraform,您仍然可以使用相同的工具部署新的基础设施。通过巧妙地使用地形模块,您甚至可以在tact中将大部分基础结构作为代码存储库 对其他工具的支持:这也在前面的基础上构建了

我想了解像Terraform这样的工具的需求。当我们有可用的Cloudformation模板并且可以使用它创建/更新所有AWS服务时,使用Terraform这样的服务有什么意义。
请提出建议。

选择地形而不是云层的原因有两个:

  • 供应商不可知:将来可能需要迁移云基础设施。这可能是由于几个原因(如成本、法规遵从性等)。使用Terraform,您仍然可以使用相同的工具部署新的基础设施。通过巧妙地使用地形模块,您甚至可以在tact中将大部分基础结构作为代码存储库
  • 对其他工具的支持:这也在前面的基础上构建了一点,但是Terraform可以部署更多的AWS资源。例如,您可以使用Terraform来协调EC2机器的部署,然后使用Ansible配置该机器。或者您可以使用Terraform在Kubernetes集群上部署应用程序。虽然CloudFormation通过创建自定义lambda来支持自定义资源,但需要维护的工作量相当大
  • 更广泛的生态系统:由于Terraform的开源特性,有一个庞大的工具生态系统,可以帮助您解决各种问题,例如将基础设施作为代码进行测试或以持续的方式进行遵从性构建
  • 可以说是一种更好的语言:我个人认为Terraform更适合作为代码的基础设施,而不是云计算。Terraform在语言(HCL)中具有更大的灵活性,其模块系统允许比CloudFormation实现的更大的可组合性
  • CloudFormation(CFN)和Terraform(CF)都是基础架构代码(IaC)开发工具

    但是,CFN仅适用于AWS。您不能将其与Azure、GCP或AWS生态系统之外的任何其他东西一起使用。相反,TF是云不可知的。您不仅可以跨多个云提供商使用它,还可以使用非云产品,如docker、各种数据库甚至DominoPizza(如果需要)

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

    TF和CFN的工作方式也存在差异。两者都有各自的长处和周末。例如:

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

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

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

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