I have a CloudFormation background, so I was excited to dive into blueprint because any infra as code would allow me to reduce duplication, track changes, and overall save me a lot of time.
I spent the whole day fiddling with render.yaml, reading all the documentation, reading forums, testing different approaches, and I still haven’t found the “golden path”. All approaches that I had tried had unfavorable trade-offs. I am constantly fighting between 3 issues: version control, duplication, and explicitness.
I want to track every tiny detail in version control. Fields in the blueprint such as domains, region, plan, number of instances need parameterization to allow variance per environment, but it should not come at the cost of explicitness and version control. For example, I want to be able to parameterize environmental variables. HOST
is a common environmental variable that differs between environments, and since it’s not a secret then we want to version control this. I can parameterize it per environment if I used sync: false
, but it comes at the cost of explicitness and version control. Who changed it? when? to what? and why? Without version control of that env var, then I lose all that extra knowledge. Alternatively, if I hard code it into render.yaml then I will have to create a separate template for each environment which leads to duplication.
I am having a hard time finding the right balance of trade-offs. It would be really helpful to understand what are the best practices around blueprint.