Skip to content

About the Template Repo

Jason Williscroft edited this page Aug 14, 2024 · 1 revision

Contents

About the Template Repo

Metastructure is a powerful IDEA, but the tool itself is fairly simple. The real magic is in the templates you create to generate your infrastructure code.

That's what the Metastructure Template Repo is all about: providing an enterprise-grade reference infrastructure that can serve as a robust starting point for your own projects.

Beta Warning!

Early days for Metastructure! The tool works perfectly, but the Metastructure Template Repo is still a work in progress.

If you are reading this notice, there are features described in this documentation that are not yet implemented in the Template Repo, and there are features in the Template Repo that are not yet documented here.

I'll have all that sorted very soon. Meanwhile, if you discover a discrepancy or just have a question, please open a discussion!

Design Principles

Elsewhere we discussed the Design Principles behind the Metastructure tool. Those principles are very general: they apply equally to ALL software engineering projects, and frankly you could use Metastructure to build all sorts of AWS implementations.

By contrast, the Metastructure Template Repo is a very SPECIFIC software engineering project. It is highly opinionated with respect to the tools and techniques it uses, and it is designed to be a reference implementation of a very specific kind of infrastructure: one that conforms to the AWS Well-Architected Framework.

You could use Metastructure differently and still satisfy every principle laid out below. Go nuts. But we can't get started without making some choices, so these are the choices I've made.

I'm certainly open to suggestions for improvement. Start a discussion if you'd like to share a better idea!

With all that understood, the Metastructure Template Repo is...

  • DRY − Configurations and logic are written once and only once. Similar logic is encapsulated into generic form and supported by configuration.

  • CLEAN − Configurations and logic are expressed in a clear, readable, and maintainable way. The code is well-documented and well-organized.

  • GENERIC − To the extent that the Template expresses a given feature—like SSO or CloudTrail logging—you should not have to modify the implementation to get it to do what you need. Configuration alone should be sufficient.

  • EXTENSIBLE − To the extent that the Template does NOT express a given feature, you should have room to add configurable, generic new functionality without breaking existing implementations & features. Configuration alone should be sufficient.

  • COMPREHENSIVE − To the maximum extent possible, all features required to maintain a secure, compliant, and efficient AWS infrastructure should be included and supported by configuration and automation, specifically including functions like DevOps that exceed the Terraform feature set.

We won't hit these principles every time, but they are the stars we'll steer by. If you find we've strayed off course, please raise an issue!

Getting Started

Metastructure is much more than a package you can just install and forget. It's a powerful tool that enables you to use Terraform in a new way.

So small surprise, this will take some doing. Follow these steps to get started:

  1. Review A Guided Tour for an overview of the Metastructure Template Repo: what are its components, why THOSE components, and how are they related?

  2. Work through Setting Up Your Dev Environment to get your development environment ready to work with the Metastructure Template Repo.

  3. Follow the steps in Hello, Enterprise! to stand up a multi-account AWS Organization—complete with important enterprise features like SSO and CloudTrail audit logging—in about 20 minutes.

From that point, you're on your own... but you aren't ALONE. Open a discussion and tell me how it's going!