CloudFormation templates have several advantages:

  • Follow a familiar format: A CloudFormation template is simply a JSON (JavaScript Object Notation) or YAML-formatted text file that describes the AWS infrastructure needed to run an application or service along with any interconnection between them.
  • Manage relationships: Templates concisely capture resource relationships, such as EC2 instances that must be associated with an Elastic Load Balancing load balancer, or the fact that an EBS volume must be in the same EC2 Availability Zone as the instance to which it is attached.
  • Use over and over: Using template parameters enable a single template to be used for many infrastructure deployments with different configuration values, such as how many instances to deploy for the application.
  • Get helpful feedback: Templates also provide output properties for communicating deployment results or configuration information back to the user. For example, when instantiated, a template may provide the URL of the Elastic Load Balancing endpoint the customer should use to connect to the newly instantiated application.
  • Avoid collisions: All AWS resources in a template are identified using logical names, allowing multiple stacks to be created from a template without fear of naming collisions between AWS resources.
  • Write and go: Use any method to launch a stack without having to register the template with AWS CloudFormation beforehand.
  • Visualize your stack: CloudFormation Designer lets you visualize your templates in a diagram. You can easily view your AWS resources and their relationships, and arrange their layout so that the diagram makes sense to you. You can edit the templates using the drag-and-drop interface and the integrated JSON editor. The modifications you make to the diagram automatically modify the template’s JSON.
  • Look up resources: AWS CloudFormation retains a copy of the stack template so you can use the AWS Management Console, the command line tools or the APIs to look up the precise resource configurations that were applied during stack creation.
  • Automate: You have the option to automate template generation using a programming language or a tool of your choice. You also have the option to automate stack creation from the templates using the CloudFormation API, AWS SDKs, or AWS CLI.

A template has the following high level JSON structure:

Get Started with AWS for Free

Create a Free Account
Or Sign In to the Console

Receive twelve months of access to the AWS Free Tier and enjoy AWS Basic Support features including, 24x7x365 customer service, support forums, and more.

{

    "Description" : "A text description for the template usage",

    "Parameters": {

        // A set of inputs used to customize the template per deployment

    },

    "Resources" : {

        // The set of AWS resources and relationships between them

    },

    "Outputs" : {

        // A set of values to be made visible to the stack creator

    },

    "AWSTemplateFormatVersion" : "2010-09-09"

}

The following template is a simple example that shows how to create an EC2 instance:

{

    "Description" : "Create an EC2 instance running the Amazon Linux 32 bit AMI.",

    "Parameters" : {

        "KeyPair" : {

            "Description" : "The EC2 Key Pair to allow SSH access to the instance",

            "Type" : "String"

        }

    },

    "Resources" : {

        "Ec2Instance" : {

            "Type" : "AWS::EC2::Instance",

            "Properties" : {

                "KeyName" : { "Ref" : "KeyPair" },

                "ImageId" : "ami-3b355a52"

            }

        }

    },

    "Outputs" : {

        "InstanceId" : {

            "Description" : "The InstanceId of the newly created EC2 instance",

            "Value" : {

                "Ref" : "Ec2Instance"

            }

        }

    },

    "AWSTemplateFormatVersion" : "2010-09-09"

}   

A stack is a collection of resources that result from instantiating a template. You create a stack by supplying a template and any required parameters to AWS CloudFormation. Based on the template and any dependencies specified in it, AWS CloudFormation determines what AWS resources need to be created and in what order.

To update a stack, you provide a template with the desired configuration of all of the resources in your stack. You can modify properties of the existing resources in your stack to react to changes in your environment or new application requirements. For example, you can change the alarm thresholds on your AWS CloudWatch alarms or update the AMI running on an instance in your stack. AWS CloudFormation takes care of rolling those changes through the different resources in your stack. In many cases, the changes will be made without affecting your running application. However, if a change cannot be made dynamically (such as updating the AMI on an EC2 instance), AWS CloudFormation will create a new resource and rewire it into the stack, deleting the old resource once the service has determined that the full update will be successful.

AWS CloudFormation will create or update a stack it in its entirety. If a stack cannot be created or updated in its entirety, AWS CloudFormation will roll it back. For debugging purposes, the rollback operation can be disabled and the stack create or update can be manually retried at a later time.

You can also use AWS CloudFormation Designer to create or modify a stack's template and then submit it to AWS CloudFormation to create or update the stack. AWS CloudFormation Designer is available within the AWS Management Console.

AWS CloudFormation can be easily accessed through the AWS Management Console, which gives you a point-and-click, web-based interface to deploy and manage stacks. You can create, delete, and update an application from inside the AWS Management Console in a few simple steps.

AWS CloudFormation Designer is a visual tool that provides a drag-and-drop interface for adding resources to templates. CloudFormation Designer allows you to spend more time designing your AWS infrastructure and less time manually coding your templates. For example, when you add or remove resources, CloudFormation Designer automatically modifies the underlying JSON for you. You can also use the integrated text editor to specify template details, such as resource property values and input parameters. Read the documentation to learn more.

CloudFormation-ss-1

AWS CloudFormation Designer is part of the AWS CloudFormation console; you must sign in with your AWS credentials to use the tool. To use AWS CloudFormation Designer, go to https://console.aws.amazon.com/cloudformation/designer. The following scenarios highlight some of the features of AWS CloudFormation Designer.

Visualize template resources
Parsing JSON-formatted text files to understand what resources are in your template and the relationships between them can be difficult. With AWS CloudFormation Designer, you can open any valid AWS CloudFormation template, and the tool visualizes all your template resources as a diagram. You can easily view template resources and how they're connected without reading JSON. AWS CloudFormation Designer does include a JSON text editor so that you can always view template details if you need to.

Simplify template authoring
When you work with template resources in a text editor, you must manually edit JSON, which can be tedious and error-prone. In AWS CloudFormation Designer, you work with resources in a similar way to how you work with diagrams. You drag and drop new resources to add them to you template, and you drag connections between resources to establish relationships. AWS CloudFormation Designer automatically modifies the JSON. In addition to visualizing your resources, the integrated JSON text editor provides an auto-complete feature for resource property names. By using AWS CloudFormation Designer, you can spend less time manually coding your templates and more time designing your AWS infrastructure.

AWS CloudFormation also provides a simple set of APIs that are easy to use and highly flexible. For a full list of the available AWS CloudFormation APIs, please see the AWS CloudFormation API Reference Guide. Some of the most commonly used APIs and their functionality are listed below:

  • CreateStack: Starts the creation of a new stack. The input parameters to the call include the stack name and a file name (or Amazon S3 URL) for the source template. If the process of creating the stack is completed successfully, the stack is in the CREATE_COMPLETE state. If the stack creation fails, AWS CloudFormation deletes previously created resources, unless the user specified a flag to retain these elements for debugging purposes.
  • ListStacks: Lists all stacks in your account. You can use this to view the set of stacks and their current status, such as whether the stack is being created or updated.
  • ListStackResources: Lists all the AWS resource names and identifiers that were created as part of creating a stack. In addition to providing you information, this call can be used by an AWS CloudFormation-aware application to understand its environment.
  • DescribeStackEvents: Lists all AWS CloudFormation generated operations and events for a stack so you can see how creation or deletion is progressing.
  • UpdateStack: Starts the update process for an existing stack. The input parameters to the call include the stack name and a file name (or Amazon S3 URL) for the updated template. If the process of updating the stack is completed successfully, the stack will be in the UPDATE_COMPLETE state. If the stack update fails, AWS CloudFormation rolls back any resource changes that have been made so that the stack is returned to state described in the original template.

AWS CloudFormation can also be used via the AWS SDKs and the AWS CLI.

AWS CloudFormation is integrated with the Amazon Simple Notification Service (Amazon SNS), allowing you to receive notifications as the creation, update and deletion of the stack progresses. In addition to providing you with status, this also allows other programs to become aware of events within CloudFormation and respond or even participate in the stack configuration process.

The AWS CloudFormation template is designed to leverage your existing experience with AWS. Each resource has a set of parameters with names that are identical to the names used to create the resources through their native API. The following template snippet shows how you define an Amazon EBS Volume. The logical name of the volume in the template is "myVolume", and its type is "AWS::EC2::Volume". The properties will look very familiar if you have used EBS volumes previously.

"myVolume" : {

    "Type" : "AWS::EC2::Volume",

    "Properties" : {

        "Size" : "10",

        "SnapshotId" : "snap-7b8fd361",

        "AvailabilityZone" : "us-east-1a"

    }

}

AWS CloudFormation provides a number of helper scripts that can be deployed to your EC2 instances. These scripts provide a simple way to read resource metadata from your stack and use it to configure your application, deploy packages and files to your instance that are listed in your template, and react to stack updates such as changes to the configuration or updates to your application.

The following scripts are available:

  • cfn-get-metadata: Retrieve metadata attached to your resources in the template.
  • cfn-init: Download and install packages and files described in your template.
  • cfn-signal: Signal to the stack creation workflow that your application is up and running and ready to take traffic.
  • cfn-hup: A daemon to listen for stack updates that were initiated through the AWS console, command line tools or API directly and execute your application-specific hooks to react to those changes.

You can use CloudFormation scripts on their own or in conjunction with CloudInit, a feature available on the Amazon Linux AMI and some other Linux AMIs. For more details of bootstrapping applications and updating configuration, see the AWS CloudFormation developer resources.

Your use of this service is subject to the Amazon Web Services Customer Agreement.