December has always something to look forward to. Perusing through the shortlisted events Friday sent me over...Hmm.."AWS re:Invent conference" looks interesting" esp. this : "next generation of Amazon SageMaker". The AWS CEO himself, Matt Garman is scheduled to make this announcement. What should I Do...Go there or Watch from CC. It anyways get's uploaded to the AWS Events Channel Anyhoos,
An MLOps architecture has to answer more than "which SageMaker interface should we use?" It must explain how infrastructure changes, how training runs, and how an evaluated model becomes a production release.
Infrastructure as Code (IaC) makes resources and configuration reviewable. A machine-learning workflow expresses processing, training, evaluation, and their dependencies. A delivery workflow decides which changes and model versions are allowed into each environment. Those responsibilities remain visible even when a managed platform packages several of them together.
The example below is an illustrative architecture for a support-ticket classifier. Code fragments show integration boundaries and assume the surrounding infrastructure and application code exist.
1. Untangle the names first
Amazon SageMaker AI is the managed ML service formerly named Amazon SageMaker. AWS changed that name on 3 December 2024 while retaining existing API namespaces. The broader Amazon SageMaker platform now also encompasses analytics, data processing, governance, and Unified Studio. [1]
Amazon SageMaker Studio is the ML development experience with applications such as JupyterLab and Code Editor. Studio Classic is the specific older Studio experience, renamed in November 2023. Its documentation now directs users toward migration and restricts creation of Classic applications. "Classic SageMaker" is therefore an ambiguous label for the core APIs. [2] [3]
Amazon SageMaker Unified Studio brings multiple data and AI services into a shared development and governance environment. It can provide access to SageMaker AI capabilities; it does not replace every underlying service with a new execution engine. [1] [7]
2. Compare responsibilities
The columns below describe ways to assemble and access an ML platform. They are overlapping layers: using an IDE does not prevent direct API access or an independently operated delivery pipeline.
| Concern | SageMaker AI through APIs | SageMaker Studio | SageMaker Unified Studio |
|---|---|---|---|
| Provisioning focus | ML resources and their IAM, data, compute, and network dependencies. | ML development domains, users, spaces, and application settings. | Governed domains, blueprints, project profiles, projects, and membership. |
| ML orchestration | SageMaker Pipelines or a deliberately chosen orchestrator. | The same underlying ML workflow services, accessed from an IDE or UI. | The execution service selected by the workload and project design. |
| Templates | Your modules and application repositories. | Optional SageMaker Projects and Service Catalog provisioning. | Blueprints and project profiles; additional ModelOps automation where configured. |
| Delivery automation | Explicit CI/CD, events, schedules, and approvals. | Provided by your chosen template or delivery integration. | Provided by the configured project solution and delivery integration. |
| Engineering still owned | Model logic, evaluation criteria, release policy, least privilege, observability, recovery, cost control, and the evidence connecting a run to a release. | ||
This is an architectural synthesis of the service, pipeline, project, and module documentation - not a universal ranking of implementation effort. [2] [4] [6] [8]
3. Separate three delivery boundaries
The Design principle(s), for a resolute seperation of responsibilities (don't even get me started on the choices of IDEs, I believe this to be a pre-requisite.), I decided Absolution: name the owner of the infrastructure, the pipeline definition, each execution, and the deployed model. A workspace should make these easier to use; it should not make those ownership decisions disappear.
Absolution translated:
- Provision the foundation. Review and apply changes to networking, storage, keys, roles, environments, and long-lived service configuration.
- Publish and execute the ML workflow. Build a pipeline definition from reviewed code, publish a version, and run it against identified inputs. SageMaker Pipelines executes an ML directed acyclic graph (DAG). [4]
- Deliver a model release. Associate evaluation evidence with an exact candidate, authorize promotion, update serving infrastructure, and verify the result.
Provisioning and execution have different callers
Terraform provisions IAM, networking, storage, and the working environment. In this example it also publishes the pipeline definition. CI, a schedule, or an operator starts an execution; SageMaker Pipelines then orchestrates jobs that produce a model and evidence.
Inspect the Mermaid source
flowchart TB
accTitle: Provisioning and execution have different callers
accDescr: Terraform provisions foundation resources and an environment, and publishes a SageMaker pipeline definition. CI, a schedule, or an operator starts a pipeline execution. The pipeline orchestrates jobs that produce a model and evidence.
I["Terraform apply"] -. "provision" .-> F["IAM, network and storage"]
I -. "provision" .-> W["Studio or Unified Studio"]
I -. "publish definition" .-> P["SageMaker Pipelines"]
C["CI, schedule or operator"] -->|"start execution"| P
W -->|"author and inspect"| P
P --> J["Processing and training jobs"]
J --> R["Model and evidence"]
A practical ownership rule follows: if Terraform manages a pipeline definition, use the SDK to generate its JSON during the build, then let Terraform publish it. Alternatively, let a dedicated delivery job own publication through the SDK. Having both independently update the same definition invites drift and unexpected reversions. The same decision applies to endpoints changed by Terraform and deployment automation.
4. SageMaker AI already has native pipelines
The Terraform AWS provider includes aws_sagemaker_pipeline. It accepts a pipeline definition directly or through an S3 location. There is no general requirement to substitute Step Functions because Terraform cannot represent a SageMaker pipeline. [5]
Terraform fragment · publish the reviewed definition
resource "aws_sagemaker_pipeline" "support_triage" {
pipeline_name = "support-triage-dev"
pipeline_display_name = "support-triage-dev"
role_arn = var.pipeline_execution_role_arn
pipeline_definition = file("${path.module}/build/pipeline.json")
tags = {
Environment = "dev"
Workload = "support-triage"
}
}
The surrounding infrastructure repository must provide the configured AWS provider, execution role, and referenced resources. Generate build/pipeline.json before planning and retain the same build artifact through apply. The file contains the steps and dependencies; the HCL fragment above does not define the classifier.
Applying the resource publishes configuration. Starting a run is a separate operation. A delivery job, operator, or event integration can call StartPipelineExecution, selecting a pipeline version and runtime parameters. [10]
AWS CLI fragment · start an identified execution
aws sagemaker start-pipeline-execution \
--pipeline-name support-triage-dev \
--pipeline-version-id "$PIPELINE_VERSION_ID" \
--client-request-token "$EXECUTION_REQUEST_TOKEN" \
--pipeline-parameters \
Name=DatasetManifestUri,Value="$DATASET_MANIFEST_URI"
The selected definition must declare DatasetManifestUri. Set the version, manifest URI, credentials, and Region in the calling environment. The request token must be 32–128 characters: persist one token for retries of the same logical request, and issue a new token for a new run. Capture the returned execution ARN. [10]
Choose Step Functions when its broader service coordination fits the workflow—for example, an ML stage inside a larger business process. AWS has published a Terraform and Step Functions implementation; it is one architecture, not a limitation that applies to every SageMaker deployment. [11]
5. Studio adds a working environment
A Studio deployment adds an environment in which people develop, inspect, and operate ML workloads. Terraform commonly manages resources such as aws_sagemaker_domain, aws_sagemaker_user_profile, and aws_sagemaker_space, alongside the relevant roles and network configuration. Domain provisioning and publishing an ML DAG remain separate concerns.
Studio provides access to jobs, endpoints, and pipeline tooling. A workflow can be managed through service APIs as well as the UI; a data scientist does not need to create a Service Catalog product for every pipeline run. [2] [4]
SageMaker Projects offers a self-service provisioning path through Service Catalog products. AWS’s May 2025 Terraform Cloud example uses a Service Catalog engine to provision Terraform-backed projects without a CloudFormation wrapper. That integration matters when project templates are part of your platform; it is not a prerequisite for using SageMaker Pipelines. [6]
Operationally, give an interactive development role the permissions its work requires. Keep production promotion behind a separate delivery identity and approval policy. Moving a notebook into an IDE does not establish that separation by itself.
6. Unified Studio adds governed project provisioning
On 2 July 2026, AWS announced Terraform provisioning support for Unified Studio through the AWS-IA module. Its documented scope includes domain infrastructure and IAM roles, with submodules for blueprints, project profiles, and projects. [7]
The distinction between domain types matters: the Unified Studio module provisions a DataZone-backed V2 domain. It is not an interchangeable use of aws_sagemaker_domain. The reviewed module uses both the AWS and AWS Cloud Control providers; project and project-profile resources include awscc_datazone_* types. [8]
Terraform fragment · domain foundation in an infrastructure repository
module "unified_studio" {
source = "./vendor/terraform-aws-sagemaker-unified-studio"
domain_name = "ml-platform-dev"
vpc_id = var.vpc_id
subnet_ids = var.private_subnet_ids
tags = {
Environment = "dev"
}
}
Here, the local module directory contains a reviewed upstream revision committed with the infrastructure code. Supply its required providers and existing network inputs. This fragment provisions the domain foundation; projects and your ML delivery integration need their own configuration. [8]
A blueprint describes the resources and capabilities available to an environment; a project profile composes the environment choices offered during project creation. The built-in blueprint catalogue covers several services, and some blueprints provision resources through CloudFormation. Terraform as the entry point does not imply that every downstream resource is directly represented in your Terraform state. [9]
Read the automation behind the template. AWS's Unified Studio ModelOps reference solution configures GitHub connections and template repositories, then uses EventBridge and Lambda for project setup and deployment integration. It also describes Step Functions, GitHub Actions, and CDK deployment components. Those are implemented parts of that solution—not capabilities to assume from creating a domain alone. [12]
The useful shift is that project onboarding and governance can be packaged once and reused. Assess the resulting system by inspecting what it creates, which identity runs each action, and how updates and failures are handled. A shorter Terraform entry point can still represent a substantial operating platform.
7. Follow one model from data to serving
Consider a support-ticket classifier that predicts a routing category and can abstain when confidence is insufficient. Evaluation thresholds are decisions the product team must specify from observed business costs; they are not SageMaker defaults.
- Prepare. Read an immutable dataset manifest, validate the schema, minimize personal data, and split examples without leaking duplicated tickets or later outcomes into the test set.
- Train. Run the reviewed training code with a recorded image digest, configuration, and random seed. Store the trained artifact under an immutable identity.
- Evaluate. Produce a report covering macro-F1, recall for important categories, abstention behaviour, and relevant customer or language slices. Compare with a declared baseline.
- Gate and register. If the quality rule passes, register that candidate with its artifact and evaluation references, initially awaiting approval. If it fails, preserve the report and stop this promotion path.
- Approve and validate serving. Review the exact candidate, deploy it to staging, and check its request schema, preprocessing, latency, and failure handling.
- Release and observe. Promote the same artifact to production, verify the endpoint's actual model version, and monitor operational and business outcomes.
A successful run produces a candidate
Preparation, training, and evaluation lead to a quality decision. Failure stops promotion while retaining evidence. A passing model is registered and waits for approval. Approved candidates go through staging checks before production; a failed staging check holds the release.
Inspect the Mermaid source
flowchart TB
accTitle: Quality and release gates for a model candidate
accDescr: A trained and evaluated candidate passes a quality gate before registration. It then requires release approval and staging checks. Failed quality retains evidence and stops; declined approval or failed staging holds the release.
T["Prepare, train and evaluate"] --> Q{"Quality pass?"}
Q -->|"No"| X["Retain evidence; stop"]
Q -->|"Yes"| R["Register candidate"]
R --> A{"Approved?"}
A -->|"No"| H["Hold release"]
A -->|"Yes"| S["Deploy to staging"]
S --> V{"Checks pass?"}
V -->|"No"| H
V -->|"Yes"| P["Promote same artifact"]
For this use case, automatic routing can have a different release criterion from simply suggesting a category to a support agent. Make that product distinction part of evaluation and approval. An infrastructure deployment reporting success cannot tell you whether expensive misrouting is acceptably rare.
A registry status of Approved can initiate deployment when an appropriate template or integration is configured. It does not universally create an endpoint, and changing the status alone is not proof that the intended model is serving. [13]
8. Promote an artifact across accounts
For an enterprise implementation, I would start with separate development, staging, and production accounts, separate Terraform state, and explicit deployment roles. This is a design recommendation: the account boundary limits accidental coupling, while the roles and resource policies determine actual access.
| Environment | Work allowed | Promotion evidence |
|---|---|---|
| Development | Explore, change code, train, evaluate, and create candidates within budget. | Code revision, input manifest, execution ARN, artifact digest, and evaluation report. |
| Staging | Exercise the approved serving package with representative integration tests. | Request/response compatibility, latency and error results, and release-policy checks. |
| Production | Deploy an explicitly authorized version through the production delivery role. | Approval record, target configuration, deployment result, and recovery target. |
Promote the evaluated model rather than silently retraining it at each stage. If production policy requires retraining with different data, treat its output as a new candidate requiring evaluation. Otherwise the artifact that passed staging and the artifact serving customers may be different models.
Choose whether each account receives a verified copy of the artifact or accesses a governed central registry and storage location. AWS's cross-account deployment guidance involves model-package access and the relevant S3, ECR, and KMS permissions. Project membership alone does not establish those service permissions. [14]
Use distinct identities for provisioning, interactive development, pipeline execution, and production deployment. Scope data access to the required locations and bound iam:PassRole to the execution roles the caller actually needs. Keep approval authority separate from a training job's ability to emit a candidate.
Decide which system owns the endpoint configuration. If Terraform owns it, release automation should request the corresponding reviewed Terraform change. If a deployment service owns it, avoid a competing Terraform configuration that can revert a later model rollout. Record the ownership boundary alongside the recovery procedure.
9. Make the run reproducible and the release recoverable
A useful release record connects source commit -> pipeline definition/version -> execution -> inputs and image -> model package -> approval -> endpoint configuration. Keep exact identifiers in the record. Labels such as "latest" and a screenshot of a green pipeline are insufficient to reconstruct that chain.
Commit Terraform's provider lock file and review dependency upgrades. That lock file tracks providers; remote module selections require their own version constraints or pinned source revisions. A local, reviewed module copy is another explicit versioning choice. [15]
Version datasets and container images as carefully as code. Record seeds and relevant runtime settings, but distinguish repeatable inputs from numerically identical training: hardware, parallel execution, and ML libraries can still affect results. Define the reproducibility tolerance your workload needs.
SageMaker step caching is opt-in, uses step-specific matching attributes, and reuses eligible successful results within a configured time window. A cache hit is not a fresh evaluation. Ensure that changing a dataset also changes the immutable input reference used by the workflow, and understand which attributes form the cache key. [16]
For serving, retain the previous approved artifact and a known-good configuration. Where supported, SageMaker deployment guardrails offer traffic shifting and alarm-driven rollback. Select the rollout mode and alarms explicitly, and check endpoint feature compatibility. These guardrails apply to supported real-time and asynchronous inference endpoints, not every possible deployment target. [17]
Track time to a validated release, time to recover, failed or duplicated runs, and cost per accepted model. For the classifier, also track misrouting and human correction rates. Those measurements reveal whether the platform is reducing delivery effort while maintaining the required outcome.
10. Choose the environment around the work
My recommendation is to start with the team's operating needs:
- Use SageMaker AI directly when your team already has development tools, CI/CD, and governance, and mainly needs managed ML execution or serving.
- Add Studio when managed ML development applications and a shared view of SageMaker resources improve the team's workflow.
- Use Unified Studio when shared discovery, governance, and project provisioning across data and AI services justify the broader platform.
Evaluate a representative project before standardizing the approach. Measure onboarding work, review the effective permissions, follow an unsuccessful training run, and recover a failed release. Include the identities and resources created indirectly by templates in that review.
The question I would bring to an architecture review: for this production prediction, can we identify the code and data that produced the model, the evidence that justified its release, the identity that deployed it, and the procedure that restores a known-good version?
Sources and further reading
Primary AWS and HashiCorp references, checked on 03 August 2026. Provider and module documentation can evolve; review the version selected in your own infrastructure repository.
- AWS: What is Amazon SageMaker AI? - service naming and the broader SageMaker platform.
- AWS: Amazon SageMaker Studio - development applications and access to ML resources.
- AWS: Amazon SageMaker Studio Classic - naming, lifecycle, and migration guidance.
- AWS: SageMaker Pipelines - managed ML workflow orchestration and authoring interfaces.
- HashiCorp: aws_sagemaker_pipeline - native Terraform resource and definition inputs.
- AWS: Deploy Amazon SageMaker Projects with Terraform Cloud - 30 May 2025; a Service Catalog integration pattern.
- AWS: Unified Studio Terraform provisioning announcement - 2 July 2026; scope of the launch.
- AWS-IA: terraform-aws-sagemaker-unified-studio - module, resource types, inputs, providers, and submodules.
- AWS: Unified Studio supported blueprints - environment capabilities and provisioned resources.
- AWS: StartPipelineExecution API - execution version, parameters, and idempotency token.
- AWS: Deploy and manage ML pipelines with Terraform using SageMaker - an implementation using Step Functions.
- AWS: Automate ModelOps with Unified Studio, Part 2 - 12 August 2025; the integration components behind a reference solution.
- AWS: Update the approval status of a model - approval states and configured deployment behaviour.
- AWS: Deploy a model from the registry with Python - model deployment and cross-account permissions.
- HashiCorp: Dependency lock file - provider selection, checksums, and the distinction from module versioning.
- AWS: Caching pipeline steps - cache matching, scope, eligibility, and timeouts.
- AWS: Deployment guardrails - rollout options, rollback, and supported endpoint types.