How Cloud Formation Works

435 views Asked by At

I see that there are a lot of success stories using CloudFormation, we're planning to use it to make sure our Prod/Dev environments are identical. I heard that its a a great place to have a single file, in version control, for deploying multiple similar environments. I've a doubt, lets say if I use CloudFormer and create a template of say my DB instance and save it GIT, and say in next 10-15 days I make couple of changes like add new volumes in instance to store DataFiles, or delete some volumes etc, Now, when I use that Template in say our Dev Environment will it reflect the volumes which I added/deleted. I mean how does it work behind the scene.

2

There are 2 answers

3
bsvingen On

This is the basic way to use CloudFormation:

  1. Create a JSON template describing your stack. You can write it manually, or write code that creates the JSON for you.

  2. Create one or more stacks based on the template.

  3. Whenever you want to change something, edit your template (always committing changes to version control) and update the stack(s).

You will often have several templates, where stacks based on one template uses resources created by stacks based on other templates. Outputs and parameters are good for coordinating this.

Most importantly: You should never change resources created using CloudFormation in any other way than by changing the stack template and updating the stack.

0
Julio Faerman On

No, such changes would not be reflected automatically.

A CloudFormation template is a declarative description of AWS resources. When you create a Stack from a template, AWS will provision all resources described in the template. You can also update a stack with new resources or delete entire stacks.

ClodFormer is a separate tool that will scan you account for resources and create a template describing them.

So, if you create two stacks from the same template, they will be similar only after created, but totally separate lives thereafter. But you can have resources that are shared between stacks, for example, you can have one database stack that is referenced by two application stacks, if that makes sense to your environment.