Werner Vogels' weblog on building scalable and robust distributed systems.

With the launch of AWS CloudFormation today another important step has been taken in making it easier for customers to deploy applications to the cloud. Often an application requires several infrastructure resources to be created and AWS CloudFormation helps customers create and manage these collections of AWS resources in a simple and predictable way. Using declarative Templates customers can create Stacks of resources ensuring that all resources have been created, in the right sequence and with the correct confirmation.

Earlier this year I met with an ISV partner who transformed his on-premise ERP software into a software-as-a-service offering. They had taken the approach that they would not only be offering their software as a scalable multi-tenant product but also as a single tenant environment for customers that want to have their own isolated environment. When a new customer is onboarded, the ISV has to spin up a collection of AWS resources to run their web-servers, app-servers and databases in a multi-AZ (availability zone) setting to achieve high-availability. There are several resources required: Elastic Load Balancers, EC2 instances, EBS volumes, SimpleDB domains and an RDS instance. They also setup Auto Scaling, EC2 and RDS Security Groups, configure CloudWatch monitoring and alarms, and use SNS for notifications. They have a centralized control environment for managing all their customers, but creating and tearing down environments is a lot of work and it is challenging to manage the different failure scenarios during these procedures. Next to that they are often doing specialized development for these customers, meaning that for each production environment there may also be development and testing environments running. Creating and managing these environments was a pain that AWS CloudFormation set out to relieve.

AWS CloudFormation solves the complexity of managing the creation of collections of AWS resources in a predictable way. CloudFormation centers around two main abstractions: the Template in which the customer describes, in a simple text based format (JSON), what resources need to be created, what their dependencies are, what configuration parameters are needed, etc. The Template can then be used to create a Stack, which is an instantiation of the collection of AWS resources described in the template, created in the right sequence with right configuration of resources and applications. If anything goes wrong during the creation process, automatic rollback will be executed and resources created for this stack will be cleaned up. The resources in a Stack once they are created can be managed with the usual tools and controls.

Customers also frequently asked us for the ability to assign unique names to the collections of resources such that during operations administrators know exactly which resources are assigned to which application and to which of their customers. A simple scenario is for example the ability to clearly identify production from staging and development environments. AWS CloudFormation tags resources and lets you view all the resources for a Stack in a single place allowing you to quickly identify which resources are production and which are test.

If you want to see an example of how a simple application such as the Wordpress blogging platform can configured and created using AWS CloudFormation see the detailed posting by Jeff Barr at the AWS developer blog. Wordpress is just one of the many ready-to-run Templates that are available and that demonstrate how easy it is to get infrastructure for your application up and running.

Just as with AWS Elastic Beanstalk, AWS CloudFormation comes at no additional cost, you only pay for those resources that you actually consume. CloudFormation make it easier for customers to run their applications in the cloud, templates are already availablefor many popular applications and many application vendors will be providing their templates along with their applications.