After using terraform extensively, I'm starting to think CloudFormation and ARM Templates are better. How does Ansible compare and what features make it better than the cloud-native offering?
What separates Ansible from CloudFormation, Azure Resource Manager, and Terraform is that it's a configuration management tool. It's core functionality is to manage the configuration state vs deploying and provisioning resources. CloudFormation, Azure Resource Manager, and Terraform each have ways in which they can configure resources such as a provisioner for Terraform or using Desired State Configuration extensions with Azure Resource Manager templates. However, those technologies don't offer the same amount of functionality. Ansible is more comparable to Chef and Puppet in this regard.
What makes Ansible a better choice is highly dependent on your environment and the skill sets of the teams within the organization. For example if you have a majority of your infrastructure on-prem and some in the cloud. It might make sense to stick with Ansible vs a cloud-platform native tool chain. I've also seen CloudFormation, Azure Resource Manager, or Terraform mixed with Ansible quite often. Leaving the deploying and provisioning of resources to these tools while using Ansible for the configuration. Here's a really interested article that might help explain why that's a common pattern. I hope this helps! There are a lot of tools out there and figuring out what works best for your and your teams take some effort.
After using terraform extensively, I'm starting to think CloudFormation and ARM Templates are better. How does Ansible compare and what features make it better than the cloud-native offering?
What separates Ansible from CloudFormation, Azure Resource Manager, and Terraform is that it's a configuration management tool. It's core functionality is to manage the configuration state vs deploying and provisioning resources. CloudFormation, Azure Resource Manager, and Terraform each have ways in which they can configure resources such as a provisioner for Terraform or using Desired State Configuration extensions with Azure Resource Manager templates. However, those technologies don't offer the same amount of functionality. Ansible is more comparable to Chef and Puppet in this regard.
What makes Ansible a better choice is highly dependent on your environment and the skill sets of the teams within the organization. For example if you have a majority of your infrastructure on-prem and some in the cloud. It might make sense to stick with Ansible vs a cloud-platform native tool chain. I've also seen CloudFormation, Azure Resource Manager, or Terraform mixed with Ansible quite often. Leaving the deploying and provisioning of resources to these tools while using Ansible for the configuration. Here's a really interested article that might help explain why that's a common pattern. I hope this helps! There are a lot of tools out there and figuring out what works best for your and your teams take some effort.
blog.gruntwork.io/why-we-use-terra...
Well, this answer goes above and beyond. Thanks for the insights!
Youโre very welcome. Itโs the least I could do. You took the time to read the article and ask a great question. ๐