1. We can't test the templates in local environment, the only way to test a template is to create a real cluster which usually takes ~15 minutes.
2. The error messages are not helpful enough. It usually fails with "SETUP_FAILED" error with no proper error cause.
3. The rollback may not work if you change the configuration. You need to delete the resources manually or even need to get help from Amazon since the resources stuck at some failed status.
4. The JSON template is hard to write and read. We have a fat single file template that has 2k lines and scared to change it since we might broke something.
5. Not all AWS actions are supported. For example we need to add custom resources (ELB and RDS instances) to a Opsworks stack but it's not possible with Cloudformation.