>
Is there a tool that would let me describe the infrastructure and deploy it on a given cloud provider but also have the ability to deploy the same infrastructure on my local machine (using VMs/docker) for development purposes.Depending on your concept of "deploy", I can point you to two options, both produced by the company I work for.
If you think in terms of controlling from the VM up, look at BOSH[1]. It's an IaaS deployment / management / update tool which has been used in production for several years.
You create two yaml files: a release manifest (describing the software components of your system) and a deployment manifest (describing the computers and networks of your system and how to map components to them).
This separation means that a single release manifest can be applied to many different actual deployments. At my day job I deploy a large PaaS release into a single virtual machine. My colleagues deploy exactly the same release into AWS with thousands of machines.
Systems defined using BOSH can be deployed to AWS, vSphere, OpenStack or Warden (a containerisation system).
For local development, the Warden backend enables "BOSH lite"[2] -- releasing and deploying into a virtual machine that hosts a local cloud of containers.
If you want to go the next level up to a proper PaaS, you can try Cloud Foundry[3]. It's defined as a BOSH release[4], which is how at my day job my co-workers and I are able to work both locally and at scale on identical software.
In Cloud Foundry we distinguish between stateless (apps) and stateful (services) software, and we provide a simple way to connect them. The easiest way to play with it is to log into Pivotal Web Services. IBM Bluemix is the same software and is also open to the public.
So for example, with Cloud Foundry, if you want ten copies of your app, you do this:
$ cf scale my_app -i 10
And it'll be scaled up to 10 instances.
Need more RAM?
$ cf scale my_app -m 2G
Now each node gets 2Gb.
And so on.
[1] https://github.com/cloudfoundry/bosh
[2] https://github.com/cloudfoundry/bosh-lite
[3] http://docs.cloudfoundry.org/
[4] https://github.com/cloudfoundry/cf-release