ML platform · Platform engineering · 2026 – Present

An Enterprise Hub-and-Spoke MLOps Platform on AWS

Architecting an enterprise hub-and-spoke MLOps platform on AWS CDK: a shared hub, a versioned construct library, and a template that generates ML projects.

Senior AI Engineer, platform architect · Blue Cross Blue Shield of North Carolina, via CuraCor Solutions

Randolph Schilke

By , Senior AI Engineer
Updated

Hub changes needed to onboard a new model
0
Human decision point for model promotion
1
AWS regions, with disaster recovery
2

Platform design

3 parts, one platform

Spoke factoryCopier templateSPOKES · ONE PER ML PROJECTSpoke AReadmission modelSpoke BChurn modelSpoke CAny new ML projectHUB · BUILT ONCE PER ACCOUNTShared platformTiered S3 storageOne KMS key per tierCross-account trustPermission boundaryPublished names and ARNsENGINE · VERSIONED LIBRARYcoe-utilsSelf-mutating pipeline constructModel promotion pipelinePromotion trigger (orchestrator)Cross-region registry mirrorConfig, naming, and taggingcopier copycopier update3-way mergereads namesat deploy timeimports andcomposes
The template generates each spoke. Every spoke imports the coe-utils engine and reads the hub's published names at deploy time, so adding a spoke changes nothing in the hub.
  • Hub, built once
  • coe-utils and control plane
  • Spoke, one per ML project

Scroll sideways to see the full diagram.

  1. 01

    The hub

    Shared infrastructure, built once

    Tiered S3 storage for scratch work, training outputs, approved models, and promotion manifests, each tier with its own customer-managed KMS key, plus cross-account trust, a permission boundary, and published parameters that every project reads at deploy time.

  2. 02

    The engine: coe-utils

    Versioned CDK construct library

    Reusable constructs for self-mutating deployment pipelines, model promotion, cross-region registry mirroring, configuration loading, naming, and tagging. Projects pick up fixes by bumping one dependency.

  3. 03

    The spoke factory

    Copier project template

    Generates a ready-to-deploy ML project wired to the hub, with training and inference pipelines, monitoring, CI, docs, and tests. Feature toggles include or exclude whole files, and copier update merges template fixes into existing projects.

Where a change belongs

If you need toChange it in
Add or change shared storage, encryption keys, or cross-account grantsThe hub
Change how every project deploys, promotes, or mirrors modelscoe-utils
Change what a new project starts withThe template
Change one project's model, data, or featuresThat spoke

Architecture

How a model gets promoted

DEV ACCOUNTTARGET ACCOUNT · STAGE OR PRODReviewerhumanTrainingpipelineDev modelregistryEventBridgeOrchestratorManifeststorePromotionpipelineGoldstoreTargetregistry1 · registers version2 · approves: eligible, nothing moves yet3 · advances lifecycle stage4 · state change5 · triggers6 · checks eligibility;prod requires stage first7 · writes manifestcross-account8 · starts pipeline9 · copies artifact10 · prod only: requests approval11 · approves12 · registers idempotently,retires previous release
A model version moves because its lifecycle stage changed in the dev registry, not because code was deployed. Humans act only in dev and at the prod gate; inference reads the target registry at run time, so a new version needs no redeploy.
  • Hub, built once
  • coe-utils and control plane
  • Spoke, one per ML project
  • Human decision or gate

Scroll sideways to see the full diagram.

Context

In the earlier model, every ML repository created its own storage buckets and encryption keys, and fixes to pipeline or promotion logic had to be repeated project by project.

MLOps v3, the next version of the platform, answers that with a hub-and-spoke architecture built on AWS CDK (Python). Platform concerns are built once in a shared hub, and every ML project, called a spoke, reuses them. I am designing and building it this year as Senior AI Engineer, building on CarePath, the multi-account platform behind 37 clinical prediction models.

What I built

  • Shared data tiers per account and region, each encrypted with its own customer-managed KMS key. Each project writes only under its own prefix, so many projects share one set of buckets instead of creating their own.
  • Convention-based contracts instead of code coupling: projects discover shared resources through published parameters and follow naming rules the hub already trusts, so onboarding a new model needs no hub change.
  • Least-privilege security by default: a role per project scoped to its own prefix, a permission boundary on promotion roles, and cross-account grants that only let approved artifacts move forward, from dev to stage to prod.
  • Self-mutating CDK Pipelines in a central Shared Services account, one per region, that deploy every project to dev, stage, and prod, with a manual approval before production.
  • Registry-first model promotion: advancing a version's lifecycle stage in the dev model registry emits an event that an orchestrator Lambda checks for eligibility. It then writes a promotion manifest that starts the target environment's pipeline, which copies the artifact into approved storage, waits for human approval in prod, registers the version idempotently, and retires the previous release.
  • Multi-region disaster recovery: cross-region replication of approved artifacts, an event-driven model registry mirror with scheduled reconciliation, secondary-region pipelines that wait for the primary, and an operator-controlled failover flag kept outside infrastructure code so a redeploy cannot reset it mid-incident.
  • One configuration file per project, seeded with organization-wide values, that drives accounts, networking, approvals, and the tags required by Shared Services tag enforcement.

Design principles

  1. 01
    Dev is the only place humans decide
    Stage and prod registries are projections that only automation writes.
  2. 02
    Approval is not movement
    Approving makes a version eligible. Advancing its lifecycle stage is what moves it.
  3. 03
    Prod keeps a human gate
    An artifact can reach prod storage, but it becomes servable only after approval.
  4. 04
    Everything is idempotent
    Duplicate events, retries, and bursts converge on the same result, and batching coalesces bursts.
  5. 05
    Rollback is a forward promotion
    Rolling back means promoting an earlier good version through the same path.

Results

  • New ML projects start from a generated, ready-to-deploy repository that is already wired to the shared platform.
  • One set of buckets and keys per account replaces per-repository storage and key sprawl.
  • Pipeline and promotion fixes ship once through coe-utils, and template fixes reach existing projects through copier update.
  • Model versions move between environments without redeploying code, and prod cannot receive a model that has not reached stage.

Architecture deep dive

Under the hood

Accounts and the path to production

Code deploys flow down from a central control plane. Model artifacts flow sideways between accounts, and only forward.

SHARED SERVICES ACCOUNT · CONTROL PLANEOne deployment pipeline per project, per regionSynthesizes once, updates itself, then deploys each stage in orderDEV ACCOUNTSTAGE ACCOUNTPROD ACCOUNTautomaticautomaticafter human approvalApp stack and registryTraining, review, inferenceApp stack and registryWritten only by automationApp stack and registryWritten only by automationPromotion orchestratorChecks stage before prodPromotion pipelineCopy, register, retire previousPromotion pipelineCopy, human gate, registerGold storeApproved artifactsGold storeApproved artifactsGold storeApproved artifactsSilver storeTraining outputsManifest storePromotion triggersManifest storePromotion triggersstagecopiesprodcopiesDev orchestrator writes promotion manifests into stage and prod (cross-account)
Code deploys flow down from the Shared Services control plane, with a human approval before prod. Approved artifacts move only forward, dev to stage to prod, and nothing reads from prod.
  • Hub, built once
  • coe-utils and control plane
  • Spoke, one per ML project
  • Human decision or gate

Scroll sideways to see the full diagram.

Shared data tiers

Each account and region gets one set of encrypted stores. Projects are isolated by prefix, not by bucket.

SageMaker pipelinesTraining and inferencePromotion copyProject rolePromotion orchestratorDev accountEPHEMERALScratch spaceNot versionedapp-a/ app-b/ app-c/Own KMS keySILVERTraining outputsVersionedapp-a/ app-b/ app-c/Own KMS keyGOLDApproved modelsVersioned, replicatedapp-a/ app-b/ app-c/Own KMS keyMANIFESTPromotion triggersEvent notifications onapp-a/ app-b/ app-c/Own KMS keyShared, not copiedOne set per accountand regionscratchtraining outputspromotes approvedwrites manifestGold replicaDR regionPromotion pipelineTarget environmentcross-region replicationevent starts it
One set of storage tiers per account and region, each with its own customer-managed KMS key. Every project writes only under its own prefix, so many projects share four stores instead of creating their own.
  • Hub, built once
  • coe-utils and control plane
  • Spoke, one per ML project

Scroll sideways to see the full diagram.

The spoke factory

A new ML project is generated rather than hand-assembled, and it keeps receiving template fixes after it is created.

TEMPLATE QUESTIONSProject answersProject, library, and model namesData source and databases per envTraining and inference pipelinesBias, data, and model qualityMulti-environment and approvalscopier copycopier update:template fixes,3-way mergeGENERATED SPOKE · READY TO DEPLOYML codeTraining, inference, SQLInfrastructureApp stack, stage per envCI/CDDeploy, promote, PR checksSageMaker pipelinesTraining and inferenceConfigurationOne file, org values seededDocs and testsGenerated with the project
Answers to the template's questions drive generation. Feature toggles add or remove whole files, and copier update merges later template fixes into existing projects without overwriting local changes.
  • Template tooling
  • Generated spoke

Scroll sideways to see the full diagram.

Disaster recovery

Both artifacts and registry entries reach the DR region, and failover stays under operator control.

Active-region flagSet by operators, outside IaCPRIMARY REGIONDR REGIONModel registrySource of truthGold storeApproved artifactsPipelinesDeploy firstModel registry mirrorKept in syncGold replicaReplicated artifactsPipelinesWait for primary; promotion readyread by the mirrorevent-driven mirrorplus scheduled reconcileS3 cross-region replicationprimary stage finishes first
Artifacts reach the DR region through storage replication, and registry entries through the coe-utils mirror. The active-region flag lives outside infrastructure code, so a redeploy cannot reset an operator's failover mid-incident.
  • Hub, built once
  • coe-utils and control plane
  • Spoke, one per ML project
  • Human decision or gate

Scroll sideways to see the full diagram.

Contact

Hiring for ML platform or healthcare AI work?

I'm open to Senior and Staff AI engineering, ML platform, and data science leadership roles, and to healthcare AI consulting. Email is the fastest way to reach me, and I reply personally.

Target roles
Senior or Staff AI Engineer · ML Platform / MLOps Engineer · Data Science Lead
Location
Remote-friendly; based in the Jacksonville, FL area
Work authorization
U.S. citizen
Focus
ML platforms, MLOps, LLMs, and healthcare AI