How to Use CloudFormation for AWS Automation
What is CloudFormation?

Modern IT infrastructures can be quite complex and are usually built from many distinct components: computing instances, load balancers, storage volumes, CDNs, caching nodes, one or more database clusters, etc. You need to set up each component specifically for the environment that you are using (like production, staging, development, etc.), to keep them updated and to remove or swap components due to software changes. CloudFormation is a great tool that helps system administrators by managing these details automatically.

In this course, CloudAcademy's Senior DevOps Engineer, Antonio Angelino, will discuss how AWS CloudFormation works and how you can use it to build scalable infrastructures. AWS CloudFormation allows you to easily create sets of cloud resources such as Amazon EC2 instances, CloudFront distributions, RDS database instances, and other services by just writing a template file.

Intended Audience

This is an intermediate-level course, so you should have some experience with AWS and its basic services like EC2, ELB, AutoScaling, and RDS. Also, some knowledge of high availability concepts, the JSON file format, and Wordpress would be helpful to understand the ideas behind the practical part of the course and the template's syntax.

If you need to learn more about the AWS services cited here, please check our collection of AWS courses, in particular, the courses about EC2 and RDS. Also, if you want to test your knowledge on the basic topics covered in this course, check out our AWS questions.


Hello, and welcome to the first course about AWS Automation. During this course you'll learn how AWS CloudFormation works, and how you can use it for building scalable infrastructures. AWS CloudFormation gives you an easy way to create a set of cloud resources, such as Amazon EC2 instances, CloudFront distributions, RDS database instances, and other services. A template file describes what resources you need, and AWS CloudFormation takes care of provisioning the resources in an orderly and predictable fashion, handling and recovering from any failures or issues.

Amazon is updating their list of AWS supported resources and operations monthly. And right now, the following services are fully or partially supported, EC2, VPC, ELB Elastic Load Balancing, Auto-scaling, Route 53, S3, CloudFront, RDS, DynamoDB, SimpleDB, RedShift, Elastic Cash, SNS or Simple Notification Service, SQS or Simple Queue Service, CloudFormation, CloudWatch, Elastic Beanstalk, OpsWorks, IAM, and Kinesis. As you can see, the list includes CloudFormation itself. It's possible to create stackable templates, in order to simplify template maintenance and update.

Thanks to AWS CloudFormation, you can describe your IT infrastructure and deploy it any time you need, creating different environments, for example testing, staging, production, etc in a few minutes.

Using file or code versioning tools like Git or SVN, you can keep track of each infrastructure modification, linking your infrastructure model to the application ecosystem itself. AWS CloudFormation uses the word stack in order to identify a specific infrastructure. That merely is a collection of well configured AWS resources. Each CloudFormation stack has a unique name, and a linked template with a specific configuration. When you create a new stack, you can keep track of the infrastructure deployment, delete it, or check it's live status and collected logs.

It's important to keep in mind that CloudFormation checks if each stack resource is properly created and configured. If a resource cannot be created, CloudFormation rolls back and destroys all created resources.

About the Author

Antonio is an IT Manager and a software and infrastructure Engineer with 15 years of experience in designing, implementing and deploying complex webapps.

He has a deep knowledge of the IEEE Software and Systems Engineering Standards and of several programming languages (Python, PHP, Java, Scala, JS).

Antonio has also been using and designing cloud infrastructures for five years, using both public and private cloud services (Amazon Web Services, Google Cloud Platform, Azure, Openstack and Vmware vSphere).

During his past working experiences, he designed and managed large web clusters, also developing a service orchestrator for providing automatic scaling, self-healing and a Disaster Recovery Strategy.

Antonio is currently the Labs Product Manager and a Senior DevOps Engineer at Cloud Academy; his main goal is providing the best learn-by-doing experience possible taking care of the Cloud Academy Labs platform.