(MODAClouds) AWS CloudFormation
This document is part of the MODAClouds deliverable D6.1, thus superseded by it.
This document was created in March 2013, thus its contents might be currently outdated.
AWS CloudFormation is a deployment service, offered free of change by Amazon, that allows an operator to automate the deployment of any complex application that relies on services or resources provided by Amazon. The operator must define his stack --- an application, or class of applications with a common architecture and requirements --- in terms of a template --- which can then be parametrized and instantiated multiple times --- that describes all the required resources, such as VM's, buckets, databases, and other services. Then, once pushed to the dedicated AWS CloudFormation service, the instantiation and initialization of the resources happens asynchronously, the operator needing only to watch for updates. Moreover the operator is even able to change the template after the deployment was done, and AWS mediates the adaptation of the provisioned stack to match the new requirements [AWS-CF-1].
|interaction||WUI, CLI, WS, API|
|services||almost all AWS services [AWS-CF-2]|
Notes and limitations
The CloudFormation service provided by Amazon is unique compared with other production-ready IaaS providers, allowing the operator to offload the provisioning step, and eliminating the need of various cloud deployment tools or libraries. The downside is its locked-in nature by being tailored to Amazon's infrastructure; however the format is simple and generic enough that with some effort it can be implemented for other providers, although then the operator will have to rely on his own implementation of the service.
Although it is focused on infrastructure provisioning, having only basic or limited support for application deployment --- like installing and configuring certain packages --- it does seem to integrate well with either Chef or Puppet, thus obtaining an integrated solution [AWS-CF-3].
As with other AWS products, the documentation [AWS-CF-2] is quite thorough --- both from an operator's, but also from a tool developer's or integrator's, point of view --- and comes with sufficient examples [AWS-CF-4].
It must be noted however that the expressiveness power of the templates is limited --- both in terms of syntax, JSON, but also in terms of semantic --- allowing only limited control, like single valued parameters or simple conditionals to be used, thus more complex decisions have to be taken outside of this framework, and a compiled template must be used instead. (For example we can take a closer look at how the JSON syntax is twisted in a VM's user-data property, in order to convey information about the provisioned resources.)
From a certain point of view, this approach of describing the application's resources and delegating their provisioning to a dedicated service isn't new, as it is captured in other standards, like OVF; research projects, like mOSAIC, Contrail; or application deployment systems, like Cloudify, Scalr.
If every targeted cloud provider would have a similar service, then all the ModaClouds' IaaS deployment tasks could have been completely delegated. But unfortunately as only Amazon provides it, we can take it as an inspiration source and design and prototype a similar technology, that allows us to describe all the deployment steps. Then, depending on the particular provider in question, we could either translate it into native template variants and delegate the task, or simulate a similar service ourselves.
|[AWS-CF-2]||(1, 2) AWS CloudFormation -- User Guide|
|[AWS-CF-3]||AWS CloudFormation -- FAQ|
|[AWS-CF-4]||AWS CloudFormation -- Templates|