Configuration syntax¶
A configuration file can contain several sites with all different configurations and all using a different mix of re-usable serverless microservice components.
It is common to have a single configuration file per environment since they usually share the same general configurations.
The configuration file has the following structure:
JSON schema
A JSON schema for the syntax is available on GitHub. This can be used to configure IntelliSense autocompletion support in VSCode.
Including YAML files¶
Using the ${include()}
syntax it's possible to load in another yaml file as part of your configuration.
This can be used for example to manage your component definitions elsewhere like so;
---
mach_composer: ...
global: ...
sites: ...
components: ${include(components.yml)}
Or load them from an external location;
---
mach_composer: ...
global: ...
sites: ...
components: ${include(git::https://github.com/your-org/mach-config.git@9f42fe2//components.yml)}
---
mach_composer: ...
global: ...
sites: ...
components: ${include(https://www.your-org.com/mach/components.yml)}
Full example¶
---
mach_composer:
version: 1.0.0
global:
environment: test
cloud: aws
terraform_config:
aws_remote_state:
bucket: my-tfstate-tst
key_prefix: mach-composer-tst
lock_table: my-tfstate-tst-lock
region: eu-central-1
providers:
aws: 3.28.0
amplience:
client_id: 2d02e7da-053a-449c-a954-bc0bb22f70e6
client_secret: ybPPCtPlgzBCuAbaWoD8eDLAifVgJhT2HPepn4mCCJZibmGKno
sentry:
auth_token: 56jIifdp7viYv1DMgTBZq7DZlUbV4mF7nL036KN5
organization: my-org
project: my-project
rate_limit_window: 21600
rate_limit_count: 100
contentful:
cma_token: sbhdaxeux8l54q9no2nng1pgopsu9u
organization_id: OcF6DjbBh9AtQXcy8CZ0
sites:
- identifier: site-tst
endpoints:
main: https://site-tst.my-commerce-services.net
internal: https://site-tst.my-commerce-services.internal
aws:
account_id: 00000000001
region: eu-central-1
amplience:
hub_id: UWebNaB5MbYIVyWPUzZE
contentful:
space: my-site
commercetools:
project_key: site-tst
client_id: rA53Hcm8ZtBuO8QwgmRZ
client_secret: A94ElFbJYEt2sTyBzWcFToWp5lipS1
scopes: manage_project:site-tst view_api_clients:site-tst manage_api_clients:site-tst
token_url: https://auth.us-central1.gcp.commercetools.com
api_url: https://api.us-central1.gcp.commercetools.com
languages:
- en-US
countries:
- US
currencies:
- USD
channels:
- key: US
roles:
- ProductDistribution
- InventorySupply
name:
en-US: USA
stores:
- key: US
name:
en-US: USA
distribution_channels:
- US
supply_channels:
- US
apollo_federation:
api_key: service:mach-poc-123:Abc00kHbB89h
graph: mach-poc-123
graph_variant: current
components:
- name: ecommerce-content
- name: api-extensions
variables:
ORDER_PREFIX: mysitetst
- name: payment
variables:
PAYMENT_PUBLIC_KEY: 6H6HHLrQH03OZtUVfWwY
secrets:
PAYMENT_PRIVATE_KEY: eGye6jX9FNp3peytjeyQEmnJsBB6gG
components:
- name: api-extensions
source: git::https://github.com/your-company/api-extensions-component//terraform
integrations: [aws, commercetools, sentry]
version: 0dd4814
- name: payment
source: git::https://github.com/your-company/payment-component//terraform
integrations: [aws, commercetools, sentry]
endpoints:
main: main
internal: internal
version: 06b3cf8
- name: ecommerce-content
integrations: [amplience, contentful]
source: git::https://github.com/your-company/ecommerce-content//terraform
version: a410ce6
---
mach_composer:
version: 1.0.0
global:
environment: test
cloud: azure
terraform_config:
azure_remote_state:
resource_group: my-shared-we-rg
storage_account: mysharedwesaterra
container_name: tfstate
state_folder: test
providers:
azure: 2.51.0
amplience:
client_id: 2d02e7da-053a-449c-a954-bc0bb22f70e6
client_secret: ybPPCtPlgzBCuAbaWoD8eDLAifVgJhT2HPepn4mCCJZibmGKno
sentry:
auth_token: 56jIifdp7viYv1DMgTBZq7DZlUbV4mF7nL036KN5
organization: my-org
project: my-project
rate_limit_window: 21600
rate_limit_count: 100
contentful:
cma_token: sbhdaxeux8l54q9no2nng1pgopsu9u
organization_id: OcF6DjbBh9AtQXcy8CZ0
azure:
service_object_ids:
developers: 034f9027-4934-4565-99c6-0fb58b2be1fe # developer TST group
tenant_id: 486df2a5-2faa-47eb-b1b5-5ace2032e59b
subscription_id: e12224d5-997d-4c72-a576-60f4919296db
region: westeurope
resources_prefix: my-
frontdoor:
resource_group: my-shared-we-rg
suppress_changes: true
sites:
- identifier: cas-site-tst
endpoints:
main: https://cas-site-tst.my-commerce-services.net
azure:
region: centralus
alert_group:
name: critical
alert_emails:
- alerting@example.com
webhook_url: https://example.com/api/alert-me/
service_plans:
default:
kind: elastic
tier: ElasticPremium
size: EP1
amplience:
hub_id: UWebNaB5MbYIVyWPUzZE
contentful:
space: my-site
commercetools:
project_key: cas-site-tst
client_id: rA53Hcm8ZtBuO8QwgmRZ
client_secret: A94ElFbJYEt2sTyBzWcFToWp5lipS1
scopes: manage_project:cas-site-tst view_api_clients:cas-site-tst manage_api_clients:cas-site-tst
token_url: https://auth.us-central1.gcp.commercetools.com
api_url: https://api.us-central1.gcp.commercetools.com
languages:
- en-US
countries:
- US
currencies:
- USD
channels:
- key: US
roles:
- ProductDistribution
- InventorySupply
name:
en-US: USA
stores:
- key: US
name:
en-US: USA
distribution_channels:
- US
supply_channels:
- US
apollo_federation:
api_key: service:mach-poc-123:Abc00kHbB89h
graph: mach-poc-123
graph_variant: current
components:
- name: ecommerce-content
- name: api-extensions
variables:
ORDER_PREFIX: mysitetst
- name: payment
variables:
PAYMENT_PUBLIC_KEY: 6H6HHLrQH03OZtUVfWwY
secrets:
PAYMENT_PRIVATE_KEY: eGye6jX9FNp3peytjeyQEmnJsBB6gG
components:
- name: api-extensions
source: git::https://github.com/your-company/api-extensions-component//terraform
integrations: [azure, commercetools, sentry]
version: 0dd4814
azure:
short_name: apiexts
service_plan: default
- name: payment
source: git::https://github.com/your-company/payment-component//terraform
integrations: [azure, commercetools, sentry]
endpoints:
main: main
azure:
service_plan: default
version: 06b3cf8
- name: ecommerce-content
integrations: [amplience, contentful]
azure:
short_name: pt_ecom
source: git::https://github.com/your-company/ecommerce-content//terraform
version: a410ce6