The way my own local maximum,
https://github.com/eropple/auster, works is that it runs a set of CloudFormation templates, in order, with the expectation that pre/post steps occur around those templates; I was hoping that, with something a little more programmatic, I could more reasonably wire it into a single program, but that might be unwise