--
Because of our platform-engineering approach at Lab Digital, our underlying tools, including MACH composer, are continuously improved.
A particular area of focus has been support for more MACH services with MACH composer. Support for Storyblok and Commerce Layer are a result of this. Also with added GCP support, we now finally cover the major cloud providers!
Read the post below for a more detailed overview of improvements and added services.
New to MACH composer? In short: when you go MACH and need a proven, un-opinionated, and vendor-independent software development approach, MACH composer might be what you’re looking for!
We’ve added support for several SAAS and Cloud services:
Also, Azure support has been rewritten and improved to become less opinionated.
Additionally, MACH composer has been rewritten in Go and is now powered by a plug-in system, to make it easier for anyone to extend it!
Last but not least, we’ve worked on a ‘metadata API’ that can be used in conjunction with MACH composer, called MACH composer cloud, which is currently in private beta.
MACH composer has existed for almost five years now! First, as an internal platform with a different name, because the term MACH didn’t exist back then. Later on, we open-sourced it to the public in 2021 as MACH composer.
Over time we’ve seen a couple of iterations and extensions of the platform, all incorporating the learnings of their predecessors in a mostly backward-compatible way. Now it has matured into something that we can use for almost any MACH project, and is our standard way of working, regardless of any of the MACH and cloud technologies that are used under the hood. Today at Lab Digital, use of MACH composer spans many projects, clients, and teams.
Through all of those projects, we can continuously improve MACH composer itself, as well as the surrounding tools that together form our development platform.
As described in our previous blog post, continuously improving our platform is at the core of our approach as an agency. And this extends to MACH composer of course! When adding support for additional services in MACH composer, we always take the approach that a ‘production project’ is a requirement.
Over the last year or so this means that we’ve extended the platform with several services, which we actively run in production!
MACH composer originally started with support for Amazon Web Services, and shortly after, we implemented support for Microsoft Azure. We attempted implementing GCP support a couple of years ago, but unfortunately, that stuck.
Fortunately, we’ve seen a lot more activity around GCP in our market in the past six months, and this has now resulted in official GCP support in MACH composer!
We’re very proud of this, as we now support all three major cloud platforms.
Commerce Layer is now officially supported in MACH composer. To better support mid-market use cases, we’ve been on the lookout for an alternative commerce engine for a while. At the beginning of this year, this resulted in a client project in collaboration with Commerce Layer and an accompanying MACH composer.
Having support for Amplience, Contentstack, and Contentful in MACH composer means that we have headless CMS support covered pretty well.
However, we’ve recently seen a lot of activity around Storyblok in the Benelux region. This led us to explore the system, and we were pretty impressed. Official MACH composer support followed by implementing a Terraform provider for Storyblok! Now we have several production projects underway using it.
The front-end development platform space has seen rapid growth in the past couple of years — with Vercel as one of the main propagators of this change. At Lab Digital, we’ve been using Vercel for a while, resulting in an official Vercel plugin for MACH composer. This plugin can be used to manage Vercel’s configuration, like environment variables, through MACH composer.
Observability is increasingly important in a distributed architecture like a MACH architecture. While we’ve had Sentry support in this space for a long time, some projects had more advanced requirements. This led us to the use of Honeycomb.
Through the Honeycomb plugin, it is easy to provide each of the running MACH components with the appropriate details to integrate OpenTelemetry-based tracing.
As you might know, we’re fans of using GraphQL federation in conjunction with composable architectures. We think it’s the perfect partner for building composable APIs that power the front ends of composable architectures.
With federation, you build a GraphQL schema from different backing services. This might result in conflicts or backward compatibility issues when working in multiple teams.
Apollo Studio is intended to solve this problem, by offering tools to validate schema changes as part of your deployment and CI pipelines.
Through a Terraform provider and a plugin for MACH composer, it is now possible to configure Apollo Studio through MACH composer.
We’ve supported Microsoft Azure for a while, with numerous projects in production. However, the existing MACH composer Azure implementation was too opinionated.
Therefore, we’ve written a new azure-minimal plugin and deprecated the earlier implementation.
While the core of MACH composer has been changed and improved continuously, there are two main developments that we want to highlight.
MACH composer has been rewritten in Go, coming from a Python version. We’ve done this because the Golang ecosystem is more suitable for a tool so close to Terraform, as it is also the language in which Hashicorp builds Terraform itself.
This brings us a couple of benefits:
Mainly distribution is a lot easier. Because we can now ship a simple binary, it is a lot easier to install MACH composer on any platform. Windows users should benefit from this (while we still recommend running MACH composer in WSL).
Connection with Hashicorp ecosystem. We are now able to use terraform-native libraries in MACH composer itself. An example of this is the go-plugin library by Hashicorp, which is used for the Terraform Provider plugin system and is now also used to power the MACH composer plugin system.
As mentioned, MACH composer is now powered by a Plug-in system, which is used to implement SAAS-service support in MACH composer.
All of the existing SAAS en Cloud systems that MACH composer supports, are now implemented as a plug-in, which is loaded when it is configured in your configuration.
This system allows anyone to implement support for a Cloud/SAAS service in MACH composer and makes it easier for us to change plug-in behavior, without changing MACH composer itself.
Plug-ins can be configured as below, and MACH composer will automatically download the configured plugins for you if they are not installed. Plug-ins themselves are hosted on Github Releases and can be hosted in any Github profile or organization: <github org>/<repository name>.
Currently, we support several clouds and SAAS services through plug-ins:
mach_composer: version: 1 variables_file: secrets.yml plugins: amplience: source: mach-composer/amplience version: 0.1.3 apollostudio: source: mach-composer/apollostudio version: 0.0.2 aws: source: mach-composer/aws version: 0.1.0 azure: source: mach-composer/azure version: 0.1.0 azure-minimal: source: mach-composer/azure-minimal version: 0.1.0 commercelayer: source: mach-composer/commercelayer version: 0.0.3 commercetools: source: mach-composer/commercetools version: 0.1.8 contentful: source: mach-composer/contentful version: 0.1.0 gcp: source: mach-composer/gcp version: 0.1.1 honeycomb: source: mach-composer/honeycomb version: 0.1.0 sentry: source: mach-composer/sentry version: 0.1.3 vercel: source: mach-composer/vercel version: 0.2.0
MACH composer has always been a developer tool that’s executed through the command line interface, on a developer workstation, or a CI/CD pipeline like GitHub Actions.
That won’t change. However, we have seen the requirement for hosting certain metadata in a remote environment — mainly metadata about the components that MACH composer deploys.
To ‘give this a place’, we’ve started work on the MACH composer cloud. MACH composer cloud initially provides a metadata API for hosting component names and versions. This allows MACH composer to, among others, ‘fetch’ the latest versions of components reliably, without relying on ‘just’ Git. And on top of the API we’ve created a convenient administrative UI.
Using this functionality is opt-in only and is currently in private beta at Lab Digital.
screenshot of MACH composer cloud
We aim to develop MACH composer and our underlying platform. Work on several Terraform providers for MACH platforms is essential for this improvement. We, therefore, hope that MACH vendors will take a 1st class approach to those at some point as well.
Areas of improvement for the coming period are:
Additional MACH & SAAS services support, as our projects demand
Easier deployment of individual components of MACH composer configuration, making it even easier for multiple teams to work on the same MACH composer project
Making deployments faster in general, by parallelization and supporting ‘individual’ component deploys
Also, we expect to add features to MACH composer cloud, on an as-needed basis. Areas that we expect to improve are more tight integration with GitHub Actions, to eventually be able to support so-called ‘branch deployments’ of MACH stacks — which is quite an ambition of course.