What follows is a description of how one might reasonably manage the core configuration of a stateless service platform.
input
- initial inputs that help describe a desired state. includes information such as allowed amis, application manifests, etccompiler
- reads inputs, produces cloudformation templates along with other top-level metadata. (important to note that there could even be multiple compilers)metadata
- top-level, global data that describes ideal state of the platform
inputs -> compiler -> metadata
metadata -> s3://my-platform/metadata/{git-ref}/{sha-256}/metadata.json
testing is done (by human, likely), and new 'golden' url is promoted
Your CI system (jenkins, etc) can take care of compiling and shipping the output to the appropriate location in S3.
Note that your compiler might not produce a single metadata.json
, but multiple files. It might be handy to produce an index.json
containing a list of each piece with description.
The system is intentionally open-ended. Ideally the inputs and compiler are open to your organization. The outputs are meant to be made globally available to the platform. Any / all convergence of your platform is meant to be derived from these outputs by downstream tooling.
For example, prehaps you build a cli tool that can execute those templates, intended for bootstrapping and / or repairing the system in the event of an emergency.
$ bootstrap -u s3://my-platform/metdata/{git-ref}/{sha-256}/my-web-stack-prod.json
...
Further innovation is limited only by your imagination.