What is our primary use case?
It allows us to use infrastructure as code. We write code to deploy resources on AWS. While we primarily use Terraform for deploying AWS resources, there are situations where we use CloudFormation stacks. It depends on the client's preference.
How has it helped my organization?
We have deployment pipelines set up to manage resources across multiple environments and accounts. When we want to deploy or modify something, we specify the target account ID and details within the deployment configuration. Changes to our code repository trigger the pipeline, which then executes actions on those specific accounts.
When it comes to automating things, the pipeline needs preparation for deployment. AWS calls this CodePipeline. In my last project, we used CodePipeline, though for CI/CD, we used Jenkins rather than AWS solutions. AWS CodePipeline is similar to Jenkins or GitHub Actions.
Whenever you make changes to your CloudFormation source code, it will trigger the pipeline in CodePipeline. Our pipeline has steps for source control, build, test, and finally, deployment. This AWS DevOps functionality is the most valuable feature for automating things.
What is most valuable?
I appreciate the flexibility of infrastructure as code. With CloudFormation, we can define ground rules, control usage limits, and scale our infrastructure up or down programmatically. Having this level of control through code on infra is a major benefit. That's the beauty of CloudFormation.
What needs improvement?
If you work with multiple cloud providers, it's better to go with Terraform. CloudFormation stacks cannot be used for multiple vendors. For example, you cannot create resources for Azure or Google Cloud Platform (GCP) using a CloudFormation stack.
For how long have I used the solution?
I have been using it for the past two and a half years.
What do I think about the stability of the solution?
I would rate the stability a ten out of ten. I haven't faced any issues with the stability yet.
What do I think about the scalability of the solution?
I would rate the scalability an eight out of ten.
The reason for the eight is that we cannot directly integrate Control Tower with CloudFormation. For different services, AWS offers specific resources for scalability. For example, with EC2, we use Auto Scaling Groups to scale instances based on traffic or usage.
Within a CloudFormation stack, we can set up and create an Auto Scaling Group. So indirectly, CloudFormation facilitates the scaling of other resources, even though the stack itself isn't inherently scalable.
In my organization, there are probably around 800 to 1000 users working with AWS in general.
We are a service provider. We work with AWS as a service provider. Our clients include Toyota, BMW Canada, and BMW Germany. I recently worked with Vira Mobility in the US, and now I'm working in the banking sector. We provide CloudFormation to manage our clients' cloud infrastructure.
How are customer service and support?
Customer service and support are available. If we raise tickets for issues on AWS, they will contact us as soon as possible. I think it's good.
And, if we face any issues, they will resolve them quite well. The communication is also good.
How would you rate customer service and support?
Which solution did I use previously and why did I switch?
For Toyota, we used Terraform. For BMW, we also used Terraform. For some FinOps purposes, we use CloudFormation stacks to have resources under control.
However, in most cases, we use Terraform for infrastructure management and deployment. Currently, I'm onboarding to a new project where they use CloudFormation more heavily than Terraform.
So, I've mostly worked on Terraform. I use CloudFormation stacks purely for specific tasks that Terraform cannot offer.
How was the initial setup?
The initial setup depends on how large your infrastructure is. If the infrastructure is small, it won't be too tough. But if the infrastructure is huge and we need to deploy across multiple accounts, like 20 to 30, then it's going to be quite difficult.
Also, keep in mind that we can't use CloudFormation to create organization member accounts within AWS Control Tower. Aside from that, the initial setup is easier if you know what you're doing. For a beginner, it's kind of difficult. It might be better to start with Terraform as it's easier than CloudFormation.
So, the user does need some knowledge in order to do it.
AWS CloudFormation integrates with the existing CI/CD pipeline.
In CloudFormation, we configure our CodePipeline settings. Whenever you make changes to the source code, this triggers the pipeline. We can set this up in the AWS console. You can configure it to check your source code every 10 to 20 seconds. If there are changes, it will trigger the pipeline.
What's my experience with pricing, setup cost, and licensing?
There's a particular team, the FinOps team, that handles the calculation of pricing. We do sometimes check the pricing for cost optimization purposes.
So, it's actually cheaper. In general, pricing within AWS is relatively affordable.
What other advice do I have?
Overall, I would rate it a ten out of ten. It's quite similar to Terraform and easy to manage – especially if you know AWS well. The thing is, the CloudFormation stack is going to create the resources, so knowledge of AWS is important. Overall, it's actually good.
If you are using only a single cloud provider, you can go with CloudFormation. For those focused solely on AWS, it's a good option.
However, if you work with multiple cloud providers, it's better to go with Terraform. CloudFormation stacks cannot be used for multiple vendors. For example, you cannot create resources for Azure or Google Cloud Platform (GCP) using a CloudFormation stack.
Disclosure: My company does not have a business relationship with this vendor other than being a customer.
I appreciate AWS CloudFormation for its robust capabilities in simplifying and automating complex infrastructure management tasks, thereby significantly enhancing operational efficiency and reducing the likelihood of errors. Its intuitive interface allows for seamless collaboration among team members, fostering a cohesive environment for project development and deployment. Additionally, CloudFormation's extensive integration with a diverse array of AWS services empowers users to create comprehensive infrastructure setups tailored to their specific needs, while its inherent scalability ensures adaptability to projects of varying sizes and complexities. With features designed to streamline resource dependency management and enable version control through tools like Git, CloudFormation facilitates agile development processes and ensures the reproducibility of environments, promoting consistency and reliability across deployments. Overall, CloudFormation stands out as a versatile and indispensable tool for modern cloud infrastructure management, offering unparalleled flexibility and control to users seeking to optimize their AWS deployments.