Serverless Component Inventory
Every piece of infrastructure is declared as a component in src/main/serverless/. The root config.json lists the components and the region each is deployed to; each components/*.json file specifies one component's type, settings and links. The Serverless Maven Plugin translates these into AWS resources and the IAM permissions implied by the links.
Deployment configuration
config.json groups components by region:
Region | Components |
|---|---|
global | Email_Service, SMS_Service, Auth_Service |
eu-west-2 | deploy-artifacts, Content_Store, Asset_Store, Component_Store, Publish_Store, Backup_Store, cms-functions, publisher-function, public-functions, CMS_API, Public_API, Admin_Tool |
Shared variables (rootDomain, version) are interpolated into component settings using ${...} placeholders (e.g. cms-api.${rootDomain}).
Component summary
Component | Type | Purpose |
|---|---|---|
Admin_Tool | website | React admin SPA on S3 + CloudFront at admin.<rootDomain> |
CMS_API | api-gateway | Authenticated admin REST API at cms-api.<rootDomain> |
Public_API | api-gateway | Public read/delivery API at api.<rootDomain> |
cms-functions | functions | ~90 control-plane Lambda handlers |
publisher-function | functions | Renders pages to static HTML |
public-functions | functions | Public content, navigation, search, form handlers |
Content_Store | database | DynamoDB single-table store for all authoring state |
Asset_Store | storage | Per-site media and font uploads |
Component_Store | storage | Component HTML/CSS/JS bundles |
Publish_Store | storage | Rendered static site output (CloudFront origin) |
Backup_Store | storage | Backup zip archives |
deploy-artifacts | storage | Lambda deployment zips |
Auth_Service | authentication | Cognito user pool (email login, MFA, groups) |
Email_Service | email | Transactional email (SES) |
SMS_Service | sms | SMS for MFA/notifications (SNS) |
APIs
CMS_API (admin)
- Domain: cms-api.${rootDomain}
- CORS origins: https://admin.${rootDomain} only
- Access logging: enabled
- Authorizer: preProcessFunction: cms-pre-process runs ahead of routes
- Routes: ~90, almost all requiring auth: Auth_Service. Public exceptions are the auth endpoints (/auth/*) and /platform/status.
- Links: API_GATEWAY_TO_FUNCTION → cms-functions, API_GATEWAY_TO_AUTHENTICATION → Auth_Service.
See the API reference for the route list.
Public_API (delivery)
- Domain: api.${rootDomain}
- Unauthenticated, read-optimised. Routes: page content by slug, navigation, site meta, search, and form submit.
- Links: API_GATEWAY_TO_FUNCTION → public-functions.
Function groups
cms-functions
The control plane. Each function is Node.js 22 (nodejs22.x), packaged from releases/cms-functions/...zip in deploy-artifacts. Handlers are grouped by domain:
- Auth & identity — cms-pre-process (authorizer), auth-login, auth-logout, auth-refresh, auth-change-password, auth-forgot-password, auth-confirm-forgot-password.
- Users & groups — users-*, groups-*, custom-groups-*, site-groups-*.
- Sites — sites-list/create/get/update/delete, root-domains, provision-site, delete-site-step, rebuild-site.
- Templates & pages — templates-*, pages-*, pages-lock-*, pages-move, pages-revert, page-versions-*, pages-preview.
- Publishing — publish-page, unpublish-page, publish-tree, bulk-publish-initiate/status/worker, publish-requests-*.
- Components & design — components-*, component-css, themes-*, theme-get/update, breakpoints-update, variables-*, page-types-*.
- Assets & fonts — assets-list/upload/create-folder, fonts-list/upload/delete.
- Platform — platform-status, platform-initialize, ai-crawler-activity, activity-log-list.
- Backup & restore — backup-create, backup-create-platform, backup-list, backup-list-all, backup-get, backup-delete, backup-restore, backup-process-step, restore-process-step.
Each function declares only the links it needs (FUNCTION_TO_DATABASE, FUNCTION_TO_STORAGE, FUNCTION_TO_AUTHENTICATION, FUNCTION_TO_FUNCTION) plus explicit permissions for cross-cutting actions (e.g. dns:*, certificate:*, website:invalidate, event-bus:manage). This is how least privilege is expressed — see Security.
Notable non-default resourcing:
Function | Memory | Timeout | Why |
|---|---|---|---|
provision-site | 512 MB | 120 s | DNS + ACM + CloudFront orchestration |
bulk-publish-worker | 512 MB | 300 s | Renders many pages per run |
backup-process-step | 512 MB | 60 s | Gathers + zips site content |
delete-site-step | 256 MB | 30 s | Teardown steps |
restore-process-step | 512 MB | 120 s | Restore steps (incl. asset upload) |
platform-status / platform-initialize | default | 300 s | Seeds/inspects platform records |
publisher-function
A single publisher Lambda (1024 MB, 60 s) that renders pages to HTML. It links to Content_Store, Component_Store, Publish_Store and Asset_Store. It is invoked by control-plane handlers rather than exposed via API Gateway.
public-functions
Delivery-plane handlers (page-content, navigation, site-meta, form-submit, search) that read from Content_Store and Publish_Store.
Stores (S3)
Store | Contents |
|---|---|
Asset_Store | Per-site media (assets/{siteId}/…) and fonts |
Component_Store | Component bundles ({componentId}/component.html, .css, .js) |
Publish_Store | Rendered static output per site (CloudFront origin), sitemaps, robots.txt, error.html |
Backup_Store | Backup zips (backups/{siteId}/{backupId}/backup.zip) and staging JSON |
deploy-artifacts | Lambda deployment zips for the three function groups |
Data store
Content_Store is a DynamoDB table with:
- Composite key PK / SK (both strings)
- Two global secondary indexes GSI1 and GSI2 (each …PK / …SK)
- PAY_PER_REQUEST billing and point-in-time recovery enabled
The single-table key design is documented in the Data model.
Identity & messaging services
- Auth_Service — Cognito user pool: email login provider, self registration disabled, mfa: optional, and a password policy of min length 12 with upper-case, number and symbol requirements. Ships with platform groups (admin, site-editor, site-creator, authentication-admin) and a seed admin user. Linked to Email_Service and SMS_Service.
- Email_Service — SES sender identity (fromAddress / fromName) for Cognito emails and platform notifications.
- SMS_Service — SNS-backed SMS for MFA/notifications.
Continue to Data model »