Skip to content

Environments

For AWS access and account requests, see the Platform Catalog and AWS Access Guide.

All frontend services run in two accounts:

AccountPurposeRegion
Production (214061306515)Live traffic (prod)eu-central-1
Non-production (213617179136)Sandboxes, test, preprodeu-central-1

WAF stacks are the exception — deployed to us-east-1 (required for CloudFront).


Diagram
StageAccountLifecycleURL Pattern
SandboxNon-prodTemporary (auto-created, auto-deleted)frontend-<branch>.<service>.ui-test.hema.digital
TestNon-prodPermanent (auto-deployed on main)Preview URLs via gateway registration
ProductionProdPermanent (manual approval for gateway)www.hema.nl / www.hema.com

AspectSandboxTestProduction
Manual approval
Monitoring & alarms
WAF
Spot instances✓ (cost saving)
E2E tests (Playwright)
Auto-cleanup on branch delete
terminationProtection

EnvironmentBranchTrigger
ProductionmainPush + manual approval
TestmainPush (automatic)
Sandboxfeature/*, fix/*, chore/*Butler push
Diagram
EnvironmentBranchTriggerDatasetStudio URL
ProductionmainPushproductionhema-cms.sanity.studio
Pre-productionmainPushpreprodpreprod-hema-cms.sanity.studio
StagingmainGit tagstagingstaging-hema-cms.sanity.studio
Sandboxfeature/*Push<branch>_sandbox<branch>-sandbox-hema-cms.sanity.studio

CMS sandboxes create a new Sanity dataset automatically and are cleaned up on branch deletion.

EnvironmentBranchTriggerDomains
ProductionmainPush + manual approvalwww.hema.nl, www.hema.com
IntegrationintegrationPushInternal preview domains
Betabeta/*PushPreview domains
TestmainPush*.omni-web-gateway.experience-dev.hema.digital
Sandboxfeature/*Butler pushTemporary preview domains

Every service uses the Environment interface from @hema/common-types:

interface Environment {
name: string; // "prod", "test1", "feature-cofi-123"
service: string; // "omni-web-content"
component: string; // "frontend"
temporary: boolean; // true for sandboxes
configurationName: string; // "prod" | "int" | "test"
}

configurationName determines which SSM parameters are loaded — multiple environment names can share the same config (e.g., all sandboxes use test config).


PathPurpose
/hema/global/authKong OAuth credentials (Secret)
/hema/global/business-base-urlInternal API base URL
/hema/global/gateway/account-idGateway account for RAM sharing
/hema/<service>/<configName>/base-urlPublic domain per environment
/hema/<service>/sanity/project-idSanity project ID
/hema/<service>/<configName>/sanity/datasetSanity dataset per environment
PathServiceContents
/hema/global/authAll MFEsKong OAuth { clientId, clientSecret }
/hema/global/basic-authGateway/E2EPreview basic auth
/hema/<service>/sanityMFEsSanity { apiReadToken }
<stage>/cms-env-varsCMSAll CMS env vars bundled

PatternExample
<project>-cicontent-main-ci
<project>-rtcontent-main-rt
<project>-monitoringomni-web-gateway-prod-monitoring
<project>-wafomni-web-gateway-prod-waf

Butler sandboxes: <service>-<branch>-ci, <service>-<branch>-rt